[{"data":1,"prerenderedAt":174672},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2024-10-10-html-he-css-xue-xi\u002Fch08-css-xian-shi-mo-shi-yu-bei-jing-te-xing":3,"wiki-doc-nav":2056},{"id":4,"title":5,"body":6,"description":2048,"extension":2049,"meta":2050,"navigation":2051,"path":2052,"seo":2053,"stem":2054,"__hash__":2055},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":8,"toc":2022},"minimark",[9,13,18,31,36,65,71,74,77,80,83,88,91,102,110,114,150,155,158,161,164,167,171,174,183,187,200,205,208,211,214,218,223,227,230,313,316,348,351,408,412,415,597,730,733,736,739,742,746,749,753,756,759,763,766,801,837,865,868,872,899,942,946,1044,1047,1076,1079,1082,1085,1088,1091,1094,1097,1100,1103,1107,1165,1192,1196,1246,1250,1295,1298,1301,1304,1307,1310,1314,1407,1410,1413,1416,1420,1543,1753,1757,1761,1764,1767,1770,1774,1777,1780,1806,1809,1812,1815,1818,1821,1825,1835,1897,1900,1960,1963,1966,1969,1972,1975,1978,1981,2018],[10,11,5],"h1",{"id":12},"_8-css显示模式与背景特性",[14,15,17],"h2",{"id":16},"_81-css元素显示模式","8.1 css元素显示模式",[19,20,21,22,26,27,30],"p",{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[23,24,25],"code",{},"\u003Cdiv>","自己占一行，比如一行可以放多个",[23,28,29],{},"\u003Cspan>","，HTML 元素一般分为块元素和行内元素两种类型",[32,33,35],"h3",{"id":34},"_811-块元素","8.1.1 块元素",[19,37,38,39,42,43,46,47,46,50,46,52,46,55,46,58,61,62,64],{},"常见的块元素有",[23,40,41],{},"\u003Ch1>","~",[23,44,45],{},"\u003Ch6>","、",[23,48,49],{},"\u003Cp>",[23,51,25],{},[23,53,54],{},"\u003Cul>",[23,56,57],{},"\u003Col>",[23,59,60],{},"\u003Cli>","等，其中 ",[23,63,25],{}," 标签是最典型的块元素",[19,66,67],{},[68,69,70],"strong",{},"块级元素的特点：",[19,72,73],{},"① 比较霸道，自己独占一行。",[19,75,76],{},"② 高度，宽度、外边距以及内边距都可以控制。",[19,78,79],{},"③ 宽度默认是容器（父级宽度）的100%。",[19,81,82],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[19,84,85],{},[68,86,87],{},"注意点：",[19,89,90],{},"①文字类的元素内不能使用块级元素",[19,92,93,94,96,97,99,100],{},"②",[23,95,49],{}," 标签主要用于存放文字，因此 ",[23,98,49],{}," 里面不能放块级元素，特别是不能放",[23,101,25],{},[19,103,104,105,42,107,109],{},"⑥同理， ",[23,106,41],{},[23,108,45],{},"等都是文字类块级标签，里面也不能放其他块级元素",[32,111,113],{"id":112},"_812-行内元素","8.1.2 行内元素",[19,115,116,117,46,120,46,123,46,126,46,129,46,132,46,135,46,138,46,141,46,144,146,147,149],{},"常见的行内元素有 ",[23,118,119],{},"\u003Ca>",[23,121,122],{},"\u003Cstrong>",[23,124,125],{},"\u003Cb>",[23,127,128],{},"\u003Cem>",[23,130,131],{},"\u003Ci>",[23,133,134],{},"\u003Cdel>",[23,136,137],{},"\u003Cs>",[23,139,140],{},"\u003Cins>",[23,142,143],{},"\u003Cu>",[23,145,29],{}," 等，其中 ",[23,148,29],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[19,151,152],{},[68,153,154],{},"特点：",[19,156,157],{},"① 相邻行内元素在一行上，一行可以显示多个。",[19,159,160],{},"② 高、宽直接设置是无效的。",[19,162,163],{},"③ 默认宽度就是它本身内容的宽度。",[19,165,166],{},"④ 行内元素只能容纳文本或其他行内元素。",[19,168,169],{},[68,170,87],{},[19,172,173],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[19,175,176,177,179,180,182],{},"②特殊情况链接 ",[23,178,119],{}," 里面可以放块级元素，但是给 ",[23,181,119],{}," 转换一下块级模式最安全",[32,184,186],{"id":185},"_813-行内块元素","8.1.3 行内块元素",[19,188,189,190,46,193,46,196,199],{},"在行内元素中有几个特殊的标签 —— ",[23,191,192],{},"\u003Cimg \u002F>",[23,194,195],{},"\u003Cinput \u002F>",[23,197,198],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[19,201,202],{},[68,203,204],{},"行内块元素的特点：",[19,206,207],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[19,209,210],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[19,212,213],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[32,215,217],{"id":216},"_814-总结","8.1.4 总结",[219,220],"img",{"style":221,"src":222},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[32,224,226],{"id":225},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[19,228,229],{},"①转换为块元素：display:block;",[231,232,237],"pre",{"className":233,"code":234,"language":235,"meta":236,"style":236},"language-Css shiki shiki-themes github-light github-dark","\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n","Css","",[23,238,239,248,259,275,292,307],{"__ignoreMap":236},[240,241,244],"span",{"class":242,"line":243},"line",1,[240,245,247],{"class":246},"sJ8bj","\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[240,249,251,255],{"class":242,"line":250},2,[240,252,254],{"class":253},"s9eBZ","a",[240,256,258],{"class":257},"sVt8B"," {\n",[240,260,262,266,269,272],{"class":242,"line":261},3,[240,263,265],{"class":264},"sj4cs","  display",[240,267,268],{"class":257},": ",[240,270,271],{"class":264},"block",[240,273,274],{"class":257},";\n",[240,276,278,281,283,286,290],{"class":242,"line":277},4,[240,279,280],{"class":264},"  width",[240,282,268],{"class":257},[240,284,285],{"class":264},"100",[240,287,289],{"class":288},"szBVR","px",[240,291,274],{"class":257},[240,293,295,298,300,303,305],{"class":242,"line":294},5,[240,296,297],{"class":264},"  height",[240,299,268],{"class":257},[240,301,302],{"class":264},"40",[240,304,289],{"class":288},[240,306,274],{"class":257},[240,308,310],{"class":242,"line":309},6,[240,311,312],{"class":257},"}\n",[19,314,315],{},"②转换为行内元素：display:inline;",[231,317,319],{"className":233,"code":318,"language":235,"meta":236,"style":236},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[23,320,321,326,333,344],{"__ignoreMap":236},[240,322,323],{"class":242,"line":243},[240,324,325],{"class":246},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[240,327,328,331],{"class":242,"line":250},[240,329,330],{"class":253},"div",[240,332,258],{"class":257},[240,334,335,337,339,342],{"class":242,"line":261},[240,336,265],{"class":264},[240,338,268],{"class":257},[240,340,341],{"class":264},"inline",[240,343,274],{"class":257},[240,345,346],{"class":242,"line":277},[240,347,312],{"class":257},[19,349,350],{},"③转换为行内块：display:inline-block;",[231,352,354],{"className":233,"code":353,"language":235,"meta":236,"style":236},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[23,355,356,361,367,378,391,404],{"__ignoreMap":236},[240,357,358],{"class":242,"line":243},[240,359,360],{"class":246},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[240,362,363,365],{"class":242,"line":250},[240,364,240],{"class":253},[240,366,258],{"class":257},[240,368,369,371,373,376],{"class":242,"line":261},[240,370,265],{"class":264},[240,372,268],{"class":257},[240,374,375],{"class":264},"inline-block",[240,377,274],{"class":257},[240,379,380,382,384,387,389],{"class":242,"line":277},[240,381,280],{"class":264},[240,383,268],{"class":257},[240,385,386],{"class":264},"80",[240,388,289],{"class":288},[240,390,274],{"class":257},[240,392,393,395,397,400,402],{"class":242,"line":294},[240,394,297],{"class":264},[240,396,268],{"class":257},[240,398,399],{"class":264},"30",[240,401,289],{"class":288},[240,403,274],{"class":257},[240,405,406],{"class":242,"line":309},[240,407,312],{"class":257},[32,409,411],{"id":410},"_816-小米侧边栏","8.1.6 小米侧边栏",[219,413],{"style":221,"src":414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[231,416,420],{"className":417,"code":418,"language":419,"meta":236,"style":236},"language-Html shiki shiki-themes github-light github-dark","\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","Html",[23,421,422,427,448,470,489,508,527,547,567,587],{"__ignoreMap":236},[240,423,424],{"class":242,"line":243},[240,425,426],{"class":246},"\u003C!-- 小米侧边栏案例 -->\n",[240,428,429,432,434,438,441,445],{"class":242,"line":250},[240,430,431],{"class":257},"\u003C",[240,433,330],{"class":253},[240,435,437],{"class":436},"sScJk"," class",[240,439,440],{"class":257},"=",[240,442,444],{"class":443},"sZZnC","\"sidebar\"",[240,446,447],{"class":257},">\n",[240,449,450,453,455,458,460,463,466,468],{"class":242,"line":261},[240,451,452],{"class":257},"  \u003C",[240,454,254],{"class":253},[240,456,457],{"class":436}," href",[240,459,440],{"class":257},[240,461,462],{"class":443},"\"#\"",[240,464,465],{"class":257},">手机 电话卡\u003C\u002F",[240,467,254],{"class":253},[240,469,447],{"class":257},[240,471,472,474,476,478,480,482,485,487],{"class":242,"line":277},[240,473,452],{"class":257},[240,475,254],{"class":253},[240,477,457],{"class":436},[240,479,440],{"class":257},[240,481,462],{"class":443},[240,483,484],{"class":257},">电视 盒子\u003C\u002F",[240,486,254],{"class":253},[240,488,447],{"class":257},[240,490,491,493,495,497,499,501,504,506],{"class":242,"line":294},[240,492,452],{"class":257},[240,494,254],{"class":253},[240,496,457],{"class":436},[240,498,440],{"class":257},[240,500,462],{"class":443},[240,502,503],{"class":257},">笔记本 平板\u003C\u002F",[240,505,254],{"class":253},[240,507,447],{"class":257},[240,509,510,512,514,516,518,520,523,525],{"class":242,"line":309},[240,511,452],{"class":257},[240,513,254],{"class":253},[240,515,457],{"class":436},[240,517,440],{"class":257},[240,519,462],{"class":443},[240,521,522],{"class":257},">出行 穿戴\u003C\u002F",[240,524,254],{"class":253},[240,526,447],{"class":257},[240,528,530,532,534,536,538,540,543,545],{"class":242,"line":529},7,[240,531,452],{"class":257},[240,533,254],{"class":253},[240,535,457],{"class":436},[240,537,440],{"class":257},[240,539,462],{"class":443},[240,541,542],{"class":257},">智能 路由器\u003C\u002F",[240,544,254],{"class":253},[240,546,447],{"class":257},[240,548,550,552,554,556,558,560,563,565],{"class":242,"line":549},8,[240,551,452],{"class":257},[240,553,254],{"class":253},[240,555,457],{"class":436},[240,557,440],{"class":257},[240,559,462],{"class":443},[240,561,562],{"class":257},">健康 儿童\u003C\u002F",[240,564,254],{"class":253},[240,566,447],{"class":257},[240,568,570,572,574,576,578,580,583,585],{"class":242,"line":569},9,[240,571,452],{"class":257},[240,573,254],{"class":253},[240,575,457],{"class":436},[240,577,440],{"class":257},[240,579,462],{"class":443},[240,581,582],{"class":257},">耳机 音响\u003C\u002F",[240,584,254],{"class":253},[240,586,447],{"class":257},[240,588,590,593,595],{"class":242,"line":589},10,[240,591,592],{"class":257},"\u003C\u002F",[240,594,330],{"class":253},[240,596,447],{"class":257},[231,598,600],{"className":233,"code":599,"language":235,"meta":236,"style":236},".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",[23,601,602,612,622,635,648,661,674,686,698,702,713,725],{"__ignoreMap":236},[240,603,604,607,610],{"class":242,"line":243},[240,605,606],{"class":436},".sidebar",[240,608,609],{"class":253}," a",[240,611,258],{"class":257},[240,613,614,616,618,620],{"class":242,"line":250},[240,615,265],{"class":264},[240,617,268],{"class":257},[240,619,271],{"class":264},[240,621,274],{"class":257},[240,623,624,626,628,631,633],{"class":242,"line":261},[240,625,280],{"class":264},[240,627,268],{"class":257},[240,629,630],{"class":264},"234",[240,632,289],{"class":288},[240,634,274],{"class":257},[240,636,637,639,641,644,646],{"class":242,"line":277},[240,638,297],{"class":264},[240,640,268],{"class":257},[240,642,643],{"class":264},"42",[240,645,289],{"class":288},[240,647,274],{"class":257},[240,649,650,653,655,657,659],{"class":242,"line":294},[240,651,652],{"class":264},"  line-height",[240,654,268],{"class":257},[240,656,643],{"class":264},[240,658,289],{"class":288},[240,660,274],{"class":257},[240,662,663,666,668,670,672],{"class":242,"line":309},[240,664,665],{"class":264},"  padding-left",[240,667,268],{"class":257},[240,669,399],{"class":264},[240,671,289],{"class":288},[240,673,274],{"class":257},[240,675,676,679,681,684],{"class":242,"line":529},[240,677,678],{"class":264},"  color",[240,680,268],{"class":257},[240,682,683],{"class":264},"#fff",[240,685,274],{"class":257},[240,687,688,691,693,696],{"class":242,"line":549},[240,689,690],{"class":264},"  background-color",[240,692,268],{"class":257},[240,694,695],{"class":264},"#55585a",[240,697,274],{"class":257},[240,699,700],{"class":242,"line":569},[240,701,312],{"class":257},[240,703,704,706,708,711],{"class":242,"line":589},[240,705,606],{"class":436},[240,707,609],{"class":253},[240,709,710],{"class":436},":hover",[240,712,258],{"class":257},[240,714,716,718,720,723],{"class":242,"line":715},11,[240,717,690],{"class":264},[240,719,268],{"class":257},[240,721,722],{"class":264},"#ff6700",[240,724,274],{"class":257},[240,726,728],{"class":242,"line":727},12,[240,729,312],{"class":257},[219,731],{"style":221,"src":732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[19,734,735],{},"行高=盒子高度：实现文字的垂直居中",[19,737,738],{},"原理讲解：",[219,740],{"style":221,"src":741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[14,743,745],{"id":744},"_82-css背景","8.2 css背景",[19,747,748],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[32,750,752],{"id":751},"_821-背景颜色","8.2.1 背景颜色",[19,754,755],{},"background-color:颜色值;",[19,757,758],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[32,760,762],{"id":761},"_822-背景图片","8.2.2 背景图片",[19,764,765],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[231,767,769],{"className":233,"code":768,"language":235,"meta":236,"style":236},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[23,770,771,777,797],{"__ignoreMap":236},[240,772,773,775],{"class":242,"line":243},[240,774,330],{"class":253},[240,776,258],{"class":257},[240,778,779,782,784,787,790,794],{"class":242,"line":250},[240,780,781],{"class":264},"  background-image",[240,783,268],{"class":257},[240,785,786],{"class":264},"url",[240,788,789],{"class":257},"(",[240,791,793],{"class":792},"s4XuR","images\u002Fbg.png",[240,795,796],{"class":257},");\n",[240,798,799],{"class":242,"line":261},[240,800,312],{"class":257},[802,803,804,818],"table",{},[805,806,807],"thead",{},[808,809,810,815],"tr",{},[811,812,814],"th",{"align":813},"left","参数值",[811,816,817],{"align":813},"作用",[819,820,821,830],"tbody",{},[808,822,823,827],{},[824,825,826],"td",{"align":813},"none",[824,828,829],{"align":813},"无背景图（默认的）",[808,831,832,834],{},[824,833,786],{"align":813},[824,835,836],{"align":813},"使用绝对或相对地址指定背景图像",[231,838,839],{"className":233,"code":768,"language":235,"meta":236,"style":236},[23,840,841,847,861],{"__ignoreMap":236},[240,842,843,845],{"class":242,"line":243},[240,844,330],{"class":253},[240,846,258],{"class":257},[240,848,849,851,853,855,857,859],{"class":242,"line":250},[240,850,781],{"class":264},[240,852,268],{"class":257},[240,854,786],{"class":264},[240,856,789],{"class":257},[240,858,793],{"class":792},[240,860,796],{"class":257},[240,862,863],{"class":242,"line":261},[240,864,312],{"class":257},[19,866,867],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[32,869,871],{"id":870},"_823-背景平铺","8.2.3 背景平铺",[231,873,875],{"className":233,"code":874,"language":235,"meta":236,"style":236},"div {\n  background-repeat: no-repeat;\n}\n",[23,876,877,883,895],{"__ignoreMap":236},[240,878,879,881],{"class":242,"line":243},[240,880,330],{"class":253},[240,882,258],{"class":257},[240,884,885,888,890,893],{"class":242,"line":250},[240,886,887],{"class":264},"  background-repeat",[240,889,268],{"class":257},[240,891,892],{"class":264},"no-repeat",[240,894,274],{"class":257},[240,896,897],{"class":242,"line":261},[240,898,312],{"class":257},[802,900,901,909],{},[805,902,903],{},[808,904,905,907],{},[811,906,814],{"align":813},[811,908,817],{"align":813},[819,910,911,919,926,934],{},[808,912,913,916],{},[824,914,915],{"align":813},"repeat",[824,917,918],{"align":813},"背景图像在纵向和横向上平铺（默认的）",[808,920,921,923],{},[824,922,892],{"align":813},[824,924,925],{"align":813},"背景图像不平铺",[808,927,928,931],{},[824,929,930],{"align":813},"repeat-x",[824,932,933],{"align":813},"背景图像在横向上平铺",[808,935,936,939],{},[824,937,938],{"align":813},"repeat-y",[824,940,941],{"align":813},"背景图像在纵向平铺",[32,943,945],{"id":944},"_824-背景图片位置","8.2.4 背景图片位置",[231,947,949],{"className":233,"code":948,"language":235,"meta":236,"style":236},"\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",[23,950,951,956,962,977,981,986,992,1010,1014,1019,1025,1040],{"__ignoreMap":236},[240,952,953],{"class":242,"line":243},[240,954,955],{"class":246},"\u002F* 方位名词 *\u002F\n",[240,957,958,960],{"class":242,"line":250},[240,959,330],{"class":253},[240,961,258],{"class":257},[240,963,964,967,969,972,975],{"class":242,"line":261},[240,965,966],{"class":264},"  background-position",[240,968,268],{"class":257},[240,970,971],{"class":264},"center",[240,973,974],{"class":264}," top",[240,976,274],{"class":257},[240,978,979],{"class":242,"line":277},[240,980,312],{"class":257},[240,982,983],{"class":242,"line":294},[240,984,985],{"class":246},"\u002F* 精确单位 *\u002F\n",[240,987,988,990],{"class":242,"line":309},[240,989,330],{"class":253},[240,991,258],{"class":257},[240,993,994,996,998,1001,1003,1006,1008],{"class":242,"line":529},[240,995,966],{"class":264},[240,997,268],{"class":257},[240,999,1000],{"class":264},"20",[240,1002,289],{"class":288},[240,1004,1005],{"class":264}," 50",[240,1007,289],{"class":288},[240,1009,274],{"class":257},[240,1011,1012],{"class":242,"line":549},[240,1013,312],{"class":257},[240,1015,1016],{"class":242,"line":569},[240,1017,1018],{"class":246},"\u002F* 混合单位 *\u002F\n",[240,1020,1021,1023],{"class":242,"line":589},[240,1022,330],{"class":253},[240,1024,258],{"class":257},[240,1026,1027,1029,1031,1033,1035,1038],{"class":242,"line":715},[240,1028,966],{"class":264},[240,1030,268],{"class":257},[240,1032,1000],{"class":264},[240,1034,289],{"class":288},[240,1036,1037],{"class":264}," center",[240,1039,274],{"class":257},[240,1041,1042],{"class":242,"line":727},[240,1043,312],{"class":257},[19,1045,1046],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[802,1048,1049,1058],{},[805,1050,1051],{},[808,1052,1053,1055],{},[811,1054,814],{"align":813},[811,1056,1057],{"align":813},"说明",[819,1059,1060,1068],{},[808,1061,1062,1065],{},[824,1063,1064],{"align":813},"length",[824,1066,1067],{"align":813},"百分数|由浮点数和单位标识符组成的长度值",[808,1069,1070,1073],{},[824,1071,1072],{"align":813},"position",[824,1074,1075],{"align":813},"top|center|bottom|left|center|right 方位名词",[19,1077,1078],{},"其他说明：",[19,1080,1081],{},"①参数是方位名词",[19,1083,1084],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[19,1086,1087],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[19,1089,1090],{},"②参数是精确单位",[19,1092,1093],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[19,1095,1096],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[19,1098,1099],{},"③参数是混合单位",[19,1101,1102],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[32,1104,1106],{"id":1105},"_825-背景图片固定","8.2.5 背景图片固定",[231,1108,1110],{"className":233,"code":1109,"language":235,"meta":236,"style":236},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[23,1111,1112,1117,1123,1135,1139,1144,1150,1161],{"__ignoreMap":236},[240,1113,1114],{"class":242,"line":243},[240,1115,1116],{"class":246},"\u002F* 背景滚动（默认） *\u002F\n",[240,1118,1119,1121],{"class":242,"line":250},[240,1120,330],{"class":253},[240,1122,258],{"class":257},[240,1124,1125,1128,1130,1133],{"class":242,"line":261},[240,1126,1127],{"class":264},"  background-attachment",[240,1129,268],{"class":257},[240,1131,1132],{"class":264},"scroll",[240,1134,274],{"class":257},[240,1136,1137],{"class":242,"line":277},[240,1138,312],{"class":257},[240,1140,1141],{"class":242,"line":294},[240,1142,1143],{"class":246},"\u002F* 背景固定 *\u002F\n",[240,1145,1146,1148],{"class":242,"line":309},[240,1147,330],{"class":253},[240,1149,258],{"class":257},[240,1151,1152,1154,1156,1159],{"class":242,"line":529},[240,1153,1127],{"class":264},[240,1155,268],{"class":257},[240,1157,1158],{"class":264},"fixed",[240,1160,274],{"class":257},[240,1162,1163],{"class":242,"line":549},[240,1164,312],{"class":257},[802,1166,1167,1176],{},[805,1168,1169],{},[808,1170,1171,1174],{},[811,1172,1173],{"align":813},"参数",[811,1175,817],{"align":813},[819,1177,1178,1185],{},[808,1179,1180,1182],{},[824,1181,1132],{"align":813},[824,1183,1184],{"align":813},"背景图像是随对象内容滚动",[808,1186,1187,1189],{},[824,1188,1158],{"align":813},[824,1190,1191],{"align":813},"背景图像固定",[32,1193,1195],{"id":1194},"_826-背景样式合写","8.2.6 背景样式合写",[231,1197,1199],{"className":233,"code":1198,"language":235,"meta":236,"style":236},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[23,1200,1201,1206,1212,1242],{"__ignoreMap":236},[240,1202,1203],{"class":242,"line":243},[240,1204,1205],{"class":246},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[240,1207,1208,1210],{"class":242,"line":250},[240,1209,330],{"class":253},[240,1211,258],{"class":257},[240,1213,1214,1217,1219,1221,1224,1226,1228,1231,1233,1236,1238,1240],{"class":242,"line":261},[240,1215,1216],{"class":264},"  background",[240,1218,268],{"class":257},[240,1220,683],{"class":264},[240,1222,1223],{"class":264}," url",[240,1225,789],{"class":257},[240,1227,793],{"class":792},[240,1229,1230],{"class":257},") ",[240,1232,892],{"class":264},[240,1234,1235],{"class":264}," fixed",[240,1237,1037],{"class":264},[240,1239,974],{"class":264},[240,1241,274],{"class":257},[240,1243,1244],{"class":242,"line":277},[240,1245,312],{"class":257},[32,1247,1249],{"id":1248},"_827-背景色半透明","8.2.7 背景色半透明",[231,1251,1253],{"className":233,"code":1252,"language":235,"meta":236,"style":236},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[23,1254,1255,1261,1291],{"__ignoreMap":236},[240,1256,1257,1259],{"class":242,"line":243},[240,1258,330],{"class":253},[240,1260,258],{"class":257},[240,1262,1263,1265,1267,1270,1272,1275,1278,1280,1282,1284,1286,1289],{"class":242,"line":250},[240,1264,1216],{"class":264},[240,1266,268],{"class":257},[240,1268,1269],{"class":264},"rgba",[240,1271,789],{"class":257},[240,1273,1274],{"class":264},"0",[240,1276,1277],{"class":257},", ",[240,1279,1274],{"class":264},[240,1281,1277],{"class":257},[240,1283,1274],{"class":264},[240,1285,1277],{"class":257},[240,1287,1288],{"class":264},"0.3",[240,1290,796],{"class":257},[240,1292,1293],{"class":242,"line":261},[240,1294,312],{"class":257},[19,1296,1297],{},"解释：",[19,1299,1300],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[19,1302,1303],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[19,1305,1306],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[19,1308,1309],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[32,1311,1313],{"id":1312},"_828-总结","8.2.8 总结",[802,1315,1316,1328],{},[805,1317,1318],{},[808,1319,1320,1323,1325],{},[811,1321,1322],{"align":813},"属性",[811,1324,817],{"align":813},[811,1326,1327],{"align":813},"值",[819,1329,1330,1341,1352,1363,1374,1385,1396],{},[808,1331,1332,1335,1338],{},[824,1333,1334],{"align":813},"background-color",[824,1336,1337],{"align":813},"背景颜色",[824,1339,1340],{"align":813},"预定义的颜色值\u002F十六进制\u002FRGB代码",[808,1342,1343,1346,1349],{},[824,1344,1345],{"align":813},"background-image",[824,1347,1348],{"align":813},"背景图片",[824,1350,1351],{"align":813},"url(图片路径)",[808,1353,1354,1357,1360],{},[824,1355,1356],{"align":813},"background-repeat",[824,1358,1359],{"align":813},"是否平铺",[824,1361,1362],{"align":813},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[808,1364,1365,1368,1371],{},[824,1366,1367],{"align":813},"background-position",[824,1369,1370],{"align":813},"背景位置",[824,1372,1373],{"align":813},"length\u002Fposition 分别是x和y坐标",[808,1375,1376,1379,1382],{},[824,1377,1378],{"align":813},"background-attachment",[824,1380,1381],{"align":813},"背景附着",[824,1383,1384],{"align":813},"scroll(背景滚动) \u002Ffixed (背景固定)",[808,1386,1387,1390,1393],{},[824,1388,1389],{"align":813},"背景简写",[824,1391,1392],{"align":813},"书写更简单",[824,1394,1395],{"align":813},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[808,1397,1398,1401,1404],{},[824,1399,1400],{"align":813},"背景半透明",[824,1402,1403],{"align":813},"背景颜色半透明",[824,1405,1406],{"align":813},"background: rgba(0,0,0.3); 后面必须是4个值",[19,1408,1409],{},"颜色渐变：",[219,1411],{"style":221,"src":1412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[219,1414],{"style":221,"src":1415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[32,1417,1419],{"id":1418},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[231,1421,1423],{"className":417,"code":1422,"language":419,"meta":236,"style":236},"\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",[23,1424,1425,1440,1459,1478,1497,1516,1535],{"__ignoreMap":236},[240,1426,1427,1429,1431,1433,1435,1438],{"class":242,"line":243},[240,1428,431],{"class":257},[240,1430,330],{"class":253},[240,1432,437],{"class":436},[240,1434,440],{"class":257},[240,1436,1437],{"class":443},"\"nav\"",[240,1439,447],{"class":257},[240,1441,1442,1444,1446,1448,1450,1452,1455,1457],{"class":242,"line":250},[240,1443,452],{"class":257},[240,1445,254],{"class":253},[240,1447,457],{"class":436},[240,1449,440],{"class":257},[240,1451,462],{"class":443},[240,1453,1454],{"class":257},">五彩导航1\u003C\u002F",[240,1456,254],{"class":253},[240,1458,447],{"class":257},[240,1460,1461,1463,1465,1467,1469,1471,1474,1476],{"class":242,"line":261},[240,1462,452],{"class":257},[240,1464,254],{"class":253},[240,1466,457],{"class":436},[240,1468,440],{"class":257},[240,1470,462],{"class":443},[240,1472,1473],{"class":257},">五彩导航2\u003C\u002F",[240,1475,254],{"class":253},[240,1477,447],{"class":257},[240,1479,1480,1482,1484,1486,1488,1490,1493,1495],{"class":242,"line":277},[240,1481,452],{"class":257},[240,1483,254],{"class":253},[240,1485,457],{"class":436},[240,1487,440],{"class":257},[240,1489,462],{"class":443},[240,1491,1492],{"class":257},">五彩导航3\u003C\u002F",[240,1494,254],{"class":253},[240,1496,447],{"class":257},[240,1498,1499,1501,1503,1505,1507,1509,1512,1514],{"class":242,"line":294},[240,1500,452],{"class":257},[240,1502,254],{"class":253},[240,1504,457],{"class":436},[240,1506,440],{"class":257},[240,1508,462],{"class":443},[240,1510,1511],{"class":257},">五彩导航4\u003C\u002F",[240,1513,254],{"class":253},[240,1515,447],{"class":257},[240,1517,1518,1520,1522,1524,1526,1528,1531,1533],{"class":242,"line":309},[240,1519,452],{"class":257},[240,1521,254],{"class":253},[240,1523,457],{"class":436},[240,1525,440],{"class":257},[240,1527,462],{"class":443},[240,1529,1530],{"class":257},">五彩导航5\u003C\u002F",[240,1532,254],{"class":253},[240,1534,447],{"class":257},[240,1536,1537,1539,1541],{"class":242,"line":529},[240,1538,592],{"class":257},[240,1540,330],{"class":253},[240,1542,447],{"class":257},[231,1544,1546],{"className":233,"code":1545,"language":235,"meta":236,"style":236},".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",[23,1547,1548,1557,1567,1580,1593,1604,1616,1626,1630,1656,1680,1704,1728],{"__ignoreMap":236},[240,1549,1550,1553,1555],{"class":242,"line":243},[240,1551,1552],{"class":436},".nav",[240,1554,609],{"class":253},[240,1556,258],{"class":257},[240,1558,1559,1561,1563,1565],{"class":242,"line":250},[240,1560,265],{"class":264},[240,1562,268],{"class":257},[240,1564,375],{"class":264},[240,1566,274],{"class":257},[240,1568,1569,1571,1573,1576,1578],{"class":242,"line":261},[240,1570,280],{"class":264},[240,1572,268],{"class":257},[240,1574,1575],{"class":264},"120",[240,1577,289],{"class":288},[240,1579,274],{"class":257},[240,1581,1582,1584,1586,1589,1591],{"class":242,"line":277},[240,1583,297],{"class":264},[240,1585,268],{"class":257},[240,1587,1588],{"class":264},"58",[240,1590,289],{"class":288},[240,1592,274],{"class":257},[240,1594,1595,1598,1600,1602],{"class":242,"line":294},[240,1596,1597],{"class":264},"  text-align",[240,1599,268],{"class":257},[240,1601,971],{"class":264},[240,1603,274],{"class":257},[240,1605,1606,1608,1610,1612,1614],{"class":242,"line":309},[240,1607,652],{"class":264},[240,1609,268],{"class":257},[240,1611,1588],{"class":264},[240,1613,289],{"class":288},[240,1615,274],{"class":257},[240,1617,1618,1620,1622,1624],{"class":242,"line":529},[240,1619,678],{"class":264},[240,1621,268],{"class":257},[240,1623,683],{"class":264},[240,1625,274],{"class":257},[240,1627,1628],{"class":242,"line":549},[240,1629,312],{"class":257},[240,1631,1632,1634,1636,1639,1641,1644,1647,1649,1651,1653],{"class":242,"line":569},[240,1633,1552],{"class":436},[240,1635,609],{"class":253},[240,1637,1638],{"class":436},":nth-child",[240,1640,789],{"class":257},[240,1642,1643],{"class":264},"1",[240,1645,1646],{"class":257},") { ",[240,1648,1334],{"class":264},[240,1650,268],{"class":257},[240,1652,722],{"class":264},[240,1654,1655],{"class":257},"; }\n",[240,1657,1658,1660,1662,1664,1666,1669,1671,1673,1675,1678],{"class":242,"line":589},[240,1659,1552],{"class":436},[240,1661,609],{"class":253},[240,1663,1638],{"class":436},[240,1665,789],{"class":257},[240,1667,1668],{"class":264},"2",[240,1670,1646],{"class":257},[240,1672,1334],{"class":264},[240,1674,268],{"class":257},[240,1676,1677],{"class":264},"#ff0000",[240,1679,1655],{"class":257},[240,1681,1682,1684,1686,1688,1690,1693,1695,1697,1699,1702],{"class":242,"line":715},[240,1683,1552],{"class":436},[240,1685,609],{"class":253},[240,1687,1638],{"class":436},[240,1689,789],{"class":257},[240,1691,1692],{"class":264},"3",[240,1694,1646],{"class":257},[240,1696,1334],{"class":264},[240,1698,268],{"class":257},[240,1700,1701],{"class":264},"#00a4ff",[240,1703,1655],{"class":257},[240,1705,1706,1708,1710,1712,1714,1717,1719,1721,1723,1726],{"class":242,"line":727},[240,1707,1552],{"class":436},[240,1709,609],{"class":253},[240,1711,1638],{"class":436},[240,1713,789],{"class":257},[240,1715,1716],{"class":264},"4",[240,1718,1646],{"class":257},[240,1720,1334],{"class":264},[240,1722,268],{"class":257},[240,1724,1725],{"class":264},"#ff00ff",[240,1727,1655],{"class":257},[240,1729,1731,1733,1735,1737,1739,1742,1744,1746,1748,1751],{"class":242,"line":1730},13,[240,1732,1552],{"class":436},[240,1734,609],{"class":253},[240,1736,1638],{"class":436},[240,1738,789],{"class":257},[240,1740,1741],{"class":264},"5",[240,1743,1646],{"class":257},[240,1745,1334],{"class":264},[240,1747,268],{"class":257},[240,1749,1750],{"class":264},"#00ff00",[240,1752,1655],{"class":257},[14,1754,1756],{"id":1755},"_83-css三大特性","8.3 css三大特性",[32,1758,1760],{"id":1759},"_831-层叠性","8.3.1 层叠性",[19,1762,1763],{},"为了解决样式冲突问题",[19,1765,1766],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[19,1768,1769],{},"   ②样式不冲突，不会层叠",[32,1771,1773],{"id":1772},"_832-继承性","8.3.2 继承性",[19,1775,1776],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[19,1778,1779],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[231,1781,1783],{"className":233,"code":1782,"language":235,"meta":236,"style":236},"p {\n  color: #333;\n}\n",[23,1784,1785,1791,1802],{"__ignoreMap":236},[240,1786,1787,1789],{"class":242,"line":243},[240,1788,19],{"class":253},[240,1790,258],{"class":257},[240,1792,1793,1795,1797,1800],{"class":242,"line":250},[240,1794,678],{"class":264},[240,1796,268],{"class":257},[240,1798,1799],{"class":264},"#333",[240,1801,274],{"class":257},[240,1803,1804],{"class":242,"line":261},[240,1805,312],{"class":257},[219,1807],{"style":221,"src":1808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[19,1810,1811],{},"解释：①行高可以跟单位也可以不跟单位",[19,1813,1814],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[19,1816,1817],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[19,1819,1820],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[32,1822,1824],{"id":1823},"_833-优先级","8.3.3 优先级",[1826,1827,1828,1832],"ol",{},[1829,1830,1831],"li",{},"选择器相同，则执行层叠性",[1829,1833,1834],{},"选择器不同，则根据选择器权重执行",[802,1836,1837,1847],{},[805,1838,1839],{},[808,1840,1841,1844],{},[811,1842,1843],{"align":813},"选择器",[811,1845,1846],{"align":813},"选择器权重",[819,1848,1849,1857,1865,1873,1881,1889],{},[808,1850,1851,1854],{},[824,1852,1853],{"align":813},"继承 或者*",[824,1855,1856],{"align":813},"0，0，0，0",[808,1858,1859,1862],{},[824,1860,1861],{"align":813},"标签选择器",[824,1863,1864],{"align":813},"0，0，0，1",[808,1866,1867,1870],{},[824,1868,1869],{"align":813},"类选择器，伪类选择器",[824,1871,1872],{"align":813},"0，0，1，0",[808,1874,1875,1878],{},[824,1876,1877],{"align":813},"ID选择器",[824,1879,1880],{"align":813},"0，1，0，0",[808,1882,1883,1886],{},[824,1884,1885],{"align":813},"行内样式",[824,1887,1888],{"align":813},"1，0，0，0",[808,1890,1891,1894],{},[824,1892,1893],{"align":813},"！important",[824,1895,1896],{"align":813},"无穷大",[19,1898,1899],{},"! important用法：",[231,1901,1903],{"className":233,"code":1902,"language":235,"meta":236,"style":236},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[23,1904,1905,1910,1916,1930,1934,1939,1945,1956],{"__ignoreMap":236},[240,1906,1907],{"class":242,"line":243},[240,1908,1909],{"class":246},"\u002F* !important 拥有最高优先级 *\u002F\n",[240,1911,1912,1914],{"class":242,"line":250},[240,1913,330],{"class":253},[240,1915,258],{"class":257},[240,1917,1918,1920,1922,1925,1928],{"class":242,"line":261},[240,1919,678],{"class":264},[240,1921,268],{"class":257},[240,1923,1924],{"class":264},"pink",[240,1926,1927],{"class":288}," !important",[240,1929,274],{"class":257},[240,1931,1932],{"class":242,"line":277},[240,1933,312],{"class":257},[240,1935,1936],{"class":242,"line":294},[240,1937,1938],{"class":246},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[240,1940,1941,1943],{"class":242,"line":309},[240,1942,330],{"class":253},[240,1944,258],{"class":257},[240,1946,1947,1949,1951,1954],{"class":242,"line":529},[240,1948,678],{"class":264},[240,1950,268],{"class":257},[240,1952,1953],{"class":264},"red",[240,1955,274],{"class":257},[240,1957,1958],{"class":242,"line":549},[240,1959,312],{"class":257},[19,1961,1962],{},"优先级注意点：",[19,1964,1965],{},"①权重是有4组数字组成,但是不会有进位",[19,1967,1968],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[19,1970,1971],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[19,1973,1974],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[19,1976,1977],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[19,1979,1980],{},"⑥复合选择器",[802,1982,1983,1993],{},[805,1984,1985],{},[808,1986,1987,1990],{},[811,1988,1989],{"align":813},"div ul li",[811,1991,1992],{"align":813},"0,0,0,3",[819,1994,1995,2003,2011],{},[808,1996,1997,2000],{},[824,1998,1999],{"align":813},".nav ul li",[824,2001,2002],{"align":813},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[808,2004,2005,2008],{},[824,2006,2007],{"align":813},"a:hover",[824,2009,2010],{"align":813},"0,0,1,1",[808,2012,2013,2016],{},[824,2014,2015],{"align":813},".nav a",[824,2017,2010],{"align":813},[2019,2020,2021],"style",{},"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":236,"searchDepth":250,"depth":250,"links":2023},[2024,2032,2043],{"id":16,"depth":250,"text":17,"children":2025},[2026,2027,2028,2029,2030,2031],{"id":34,"depth":261,"text":35},{"id":112,"depth":261,"text":113},{"id":185,"depth":261,"text":186},{"id":216,"depth":261,"text":217},{"id":225,"depth":261,"text":226},{"id":410,"depth":261,"text":411},{"id":744,"depth":250,"text":745,"children":2033},[2034,2035,2036,2037,2038,2039,2040,2041,2042],{"id":751,"depth":261,"text":752},{"id":761,"depth":261,"text":762},{"id":870,"depth":261,"text":871},{"id":944,"depth":261,"text":945},{"id":1105,"depth":261,"text":1106},{"id":1194,"depth":261,"text":1195},{"id":1248,"depth":261,"text":1249},{"id":1312,"depth":261,"text":1313},{"id":1418,"depth":261,"text":1419},{"id":1755,"depth":250,"text":1756,"children":2044},[2045,2046,2047],{"id":1759,"depth":261,"text":1760},{"id":1772,"depth":261,"text":1773},{"id":1823,"depth":261,"text":1824},null,"md",{},true,"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":5,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",[2057,7114,8221,9641,12630,13981,15469,16557,25318,25330,25928,25954,26078,26319,26384,26402,26415,26462,26586,26755,26954,27134,27339,27475,27570,27607,27620,27929,28670,29378,29399,30419,32050,32201,32214,32226,32527,52339,52354,52371,52404,55266,78593,94736,94757,94870,94991,95761,96424,96785,96823,96929,97029,97072,97098,97159,98813,98914,98939,99430,99930,101010,101293,102034,102535,102547,104563,106226,107729,109427,111344,113263,115285,118755,119187,119650,120399,123343,123691,123713,124069,127376,127388,127791,127814,127961,128124,128327,128626,129182,129837,131494,133092,133741,135235,136666,137901,139595,141347,143757,143873,144808,145019,145904,147139,147367,147380,148535,150947,153315,156636,159113,160757,162534,164547,167599,169779,172306,174500],{"id":2058,"title":2059,"body":2060,"description":236,"extension":2049,"meta":7109,"navigation":2051,"path":7110,"seo":7111,"stem":7112,"__hash__":7113},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":2061,"toc":7081},[2062,2065,2069,2072,2076,2087,2091,2095,2098,2101,2104,2107,2110,2137,2141,2144,2147,2150,2152,2200,2204,2222,2224,2238,2241,2249,2252,3092,3099,3116,3120,3206,3210,3216,3301,3305,3343,3347,3410,3414,3418,3424,3435,3439,3444,3448,3453,3457,3462,3466,3470,3475,3741,3746,3884,3889,4145,4148,4156,4160,4165,4268,4271,4577,4586,4686,4689,4692,4695,4698,4958,4963,5103,5106,5285,5288,5416,5419,5571,5575,5580,5583,5594,5602,5605,5712,5716,5720,5725,5775,5780,5785,5809,5814,5867,5870,5875,6052,6057,6342,6347,6744,6748,6753,6810,6815,6823,6826,6966,6969,7078],[10,2063,2059],{"id":2064},"_1基础入门",[14,2066,2068],{"id":2067},"_11注释","1.1注释",[19,2070,2071],{},"\u002F\u002F或者\u002F* *\u002F",[14,2073,2075],{"id":2074},"_12命名","1.2命名",[1826,2077,2078,2081,2084],{},[1829,2079,2080],{},"字母数字下划线",[1829,2082,2083],{},"开头必须是字母或_",[1829,2085,2086],{},"不能使用关键词",[14,2088,2090],{"id":2089},"_13数据类型","1.3数据类型",[32,2092,2094],{"id":2093},"_131整形","1.3.1整形",[19,2096,2097],{},"short 短整形 2",[19,2099,2100],{},"int 整形 4",[19,2102,2103],{},"long 长整形 win4 linux32位4 linux64位8",[19,2105,2106],{},"long long 长长整形 8",[19,2108,2109],{},"利用sizeof可以求数据类型占用的内存空间大小",[231,2111,2115],{"className":2112,"code":2113,"language":2114,"meta":236,"style":236},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[23,2116,2117,2130],{"__ignoreMap":236},[240,2118,2119,2122,2124,2127],{"class":242,"line":243},[240,2120,2121],{"class":288},"sizeof",[240,2123,789],{"class":257},[240,2125,2126],{"class":288},"int",[240,2128,2129],{"class":257},")\n",[240,2131,2132,2134],{"class":242,"line":250},[240,2133,2121],{"class":288},[240,2135,2136],{"class":257},"(num)\n",[32,2138,2140],{"id":2139},"_132浮点型","1.3.2浮点型",[19,2142,2143],{},"float 单精度 4节 7位有效数字",[19,2145,2146],{},"double 双精度 8节 15-16有效数字",[19,2148,2149],{},"默认情况下，输出一个小数，会显示6位有效数字",[19,2151,87],{},[231,2153,2155],{"className":2112,"code":2154,"language":2114,"meta":236,"style":236},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[23,2156,2157,2179],{"__ignoreMap":236},[240,2158,2159,2162,2165,2167,2170,2173,2176],{"class":242,"line":243},[240,2160,2161],{"class":288},"float",[240,2163,2164],{"class":257}," f1",[240,2166,440],{"class":288},[240,2168,2169],{"class":264},"3.14",[240,2171,2172],{"class":288},"f",[240,2174,2175],{"class":257},";",[240,2177,2178],{"class":246}," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[240,2180,2181,2183,2186,2188,2190,2193,2195,2197],{"class":242,"line":250},[240,2182,2161],{"class":288},[240,2184,2185],{"class":257}," f2",[240,2187,440],{"class":288},[240,2189,1692],{"class":264},[240,2191,2192],{"class":288},"e",[240,2194,1668],{"class":264},[240,2196,2175],{"class":257},[240,2198,2199],{"class":246}," \u002F\u002F科学记数法\n",[32,2201,2203],{"id":2202},"_133字符型","1.3.3字符型",[231,2205,2207],{"className":2112,"code":2206,"language":2114,"meta":236,"style":236},"char ch='a'\n",[23,2208,2209],{"__ignoreMap":236},[240,2210,2211,2214,2217,2219],{"class":242,"line":243},[240,2212,2213],{"class":288},"char",[240,2215,2216],{"class":257}," ch",[240,2218,440],{"class":288},[240,2220,2221],{"class":443},"'a'\n",[19,2223,87],{},[1826,2225,2226,2229,2232,2235],{},[1829,2227,2228],{},"在显示字符型变量时，只能单引号，双引号x",[1829,2230,2231],{},"单引号内只能一个字符，不能字符串",[1829,2233,2234],{},"c和c++字符型变量只占用一个字符",[1829,2236,2237],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[19,2239,2240],{},"ASCII码大致由以下两部分组成：",[1826,2242,2243,2246],{},[1829,2244,2245],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[1829,2247,2248],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[19,2250,2251],{},"ASCII码表格：",[802,2253,2254,2293],{},[805,2255,2256],{},[808,2257,2258,2263,2268,2272,2277,2281,2285,2289],{},[811,2259,2260,1327],{},[68,2261,2262],{},"ASCII",[811,2264,2265],{},[68,2266,2267],{},"控制字符",[811,2269,2270,1327],{},[68,2271,2262],{},[811,2273,2274],{},[68,2275,2276],{},"字符",[811,2278,2279,1327],{},[68,2280,2262],{},[811,2282,2283],{},[68,2284,2276],{},[811,2286,2287,1327],{},[68,2288,2262],{},[811,2290,2291],{},[68,2292,2276],{},[819,2294,2295,2319,2343,2368,2393,2417,2441,2466,2492,2516,2542,2567,2593,2618,2644,2670,2696,2719,2744,2769,2794,2818,2843,2868,2893,2917,2942,2967,2992,3016,3041,3066],{},[808,2296,2297,2299,2302,2305,2308,2311,2314,2317],{},[824,2298,1274],{},[824,2300,2301],{},"NUT",[824,2303,2304],{},"32",[824,2306,2307],{},"(space)",[824,2309,2310],{},"64",[824,2312,2313],{},"@",[824,2315,2316],{},"96",[824,2318,46],{},[808,2320,2321,2323,2326,2329,2332,2335,2338,2341],{},[824,2322,1643],{},[824,2324,2325],{},"SOH",[824,2327,2328],{},"33",[824,2330,2331],{},"!",[824,2333,2334],{},"65",[824,2336,2337],{},"A",[824,2339,2340],{},"97",[824,2342,254],{},[808,2344,2345,2347,2350,2353,2356,2359,2362,2365],{},[824,2346,1668],{},[824,2348,2349],{},"STX",[824,2351,2352],{},"34",[824,2354,2355],{},"\"",[824,2357,2358],{},"66",[824,2360,2361],{},"B",[824,2363,2364],{},"98",[824,2366,2367],{},"b",[808,2369,2370,2372,2375,2378,2381,2384,2387,2390],{},[824,2371,1692],{},[824,2373,2374],{},"ETX",[824,2376,2377],{},"35",[824,2379,2380],{},"#",[824,2382,2383],{},"67",[824,2385,2386],{},"C",[824,2388,2389],{},"99",[824,2391,2392],{},"c",[808,2394,2395,2397,2400,2403,2406,2409,2412,2414],{},[824,2396,1716],{},[824,2398,2399],{},"EOT",[824,2401,2402],{},"36",[824,2404,2405],{},"$",[824,2407,2408],{},"68",[824,2410,2411],{},"D",[824,2413,285],{},[824,2415,2416],{},"d",[808,2418,2419,2421,2424,2427,2430,2433,2436,2439],{},[824,2420,1741],{},[824,2422,2423],{},"ENQ",[824,2425,2426],{},"37",[824,2428,2429],{},"%",[824,2431,2432],{},"69",[824,2434,2435],{},"E",[824,2437,2438],{},"101",[824,2440,2192],{},[808,2442,2443,2446,2449,2452,2455,2458,2461,2464],{},[824,2444,2445],{},"6",[824,2447,2448],{},"ACK",[824,2450,2451],{},"38",[824,2453,2454],{},"&",[824,2456,2457],{},"70",[824,2459,2460],{},"F",[824,2462,2463],{},"102",[824,2465,2172],{},[808,2467,2468,2471,2474,2477,2480,2483,2486,2489],{},[824,2469,2470],{},"7",[824,2472,2473],{},"BEL",[824,2475,2476],{},"39",[824,2478,2479],{},",",[824,2481,2482],{},"71",[824,2484,2485],{},"G",[824,2487,2488],{},"103",[824,2490,2491],{},"g",[808,2493,2494,2497,2500,2502,2504,2507,2510,2513],{},[824,2495,2496],{},"8",[824,2498,2499],{},"BS",[824,2501,302],{},[824,2503,789],{},[824,2505,2506],{},"72",[824,2508,2509],{},"H",[824,2511,2512],{},"104",[824,2514,2515],{},"h",[808,2517,2518,2521,2524,2527,2530,2533,2536,2539],{},[824,2519,2520],{},"9",[824,2522,2523],{},"HT",[824,2525,2526],{},"41",[824,2528,2529],{},")",[824,2531,2532],{},"73",[824,2534,2535],{},"I",[824,2537,2538],{},"105",[824,2540,2541],{},"i",[808,2543,2544,2547,2550,2552,2555,2558,2561,2564],{},[824,2545,2546],{},"10",[824,2548,2549],{},"LF",[824,2551,643],{},[824,2553,2554],{},"*",[824,2556,2557],{},"74",[824,2559,2560],{},"J",[824,2562,2563],{},"106",[824,2565,2566],{},"j",[808,2568,2569,2572,2575,2578,2581,2584,2587,2590],{},[824,2570,2571],{},"11",[824,2573,2574],{},"VT",[824,2576,2577],{},"43",[824,2579,2580],{},"+",[824,2582,2583],{},"75",[824,2585,2586],{},"K",[824,2588,2589],{},"107",[824,2591,2592],{},"k",[808,2594,2595,2598,2601,2604,2606,2609,2612,2615],{},[824,2596,2597],{},"12",[824,2599,2600],{},"FF",[824,2602,2603],{},"44",[824,2605,2479],{},[824,2607,2608],{},"76",[824,2610,2611],{},"L",[824,2613,2614],{},"108",[824,2616,2617],{},"l",[808,2619,2620,2623,2626,2629,2632,2635,2638,2641],{},[824,2621,2622],{},"13",[824,2624,2625],{},"CR",[824,2627,2628],{},"45",[824,2630,2631],{},"-",[824,2633,2634],{},"77",[824,2636,2637],{},"M",[824,2639,2640],{},"109",[824,2642,2643],{},"m",[808,2645,2646,2649,2652,2655,2658,2661,2664,2667],{},[824,2647,2648],{},"14",[824,2650,2651],{},"SO",[824,2653,2654],{},"46",[824,2656,2657],{},".",[824,2659,2660],{},"78",[824,2662,2663],{},"N",[824,2665,2666],{},"110",[824,2668,2669],{},"n",[808,2671,2672,2675,2678,2681,2684,2687,2690,2693],{},[824,2673,2674],{},"15",[824,2676,2677],{},"SI",[824,2679,2680],{},"47",[824,2682,2683],{},"\u002F",[824,2685,2686],{},"79",[824,2688,2689],{},"O",[824,2691,2692],{},"111",[824,2694,2695],{},"o",[808,2697,2698,2701,2704,2707,2709,2711,2714,2717],{},[824,2699,2700],{},"16",[824,2702,2703],{},"DLE",[824,2705,2706],{},"48",[824,2708,1274],{},[824,2710,386],{},[824,2712,2713],{},"P",[824,2715,2716],{},"112",[824,2718,19],{},[808,2720,2721,2724,2727,2730,2732,2735,2738,2741],{},[824,2722,2723],{},"17",[824,2725,2726],{},"DCI",[824,2728,2729],{},"49",[824,2731,1643],{},[824,2733,2734],{},"81",[824,2736,2737],{},"Q",[824,2739,2740],{},"113",[824,2742,2743],{},"q",[808,2745,2746,2749,2752,2755,2757,2760,2763,2766],{},[824,2747,2748],{},"18",[824,2750,2751],{},"DC2",[824,2753,2754],{},"50",[824,2756,1668],{},[824,2758,2759],{},"82",[824,2761,2762],{},"R",[824,2764,2765],{},"114",[824,2767,2768],{},"r",[808,2770,2771,2774,2777,2780,2782,2785,2788,2791],{},[824,2772,2773],{},"19",[824,2775,2776],{},"DC3",[824,2778,2779],{},"51",[824,2781,1692],{},[824,2783,2784],{},"83",[824,2786,2787],{},"S",[824,2789,2790],{},"115",[824,2792,2793],{},"s",[808,2795,2796,2798,2801,2804,2806,2809,2812,2815],{},[824,2797,1000],{},[824,2799,2800],{},"DC4",[824,2802,2803],{},"52",[824,2805,1716],{},[824,2807,2808],{},"84",[824,2810,2811],{},"T",[824,2813,2814],{},"116",[824,2816,2817],{},"t",[808,2819,2820,2823,2826,2829,2831,2834,2837,2840],{},[824,2821,2822],{},"21",[824,2824,2825],{},"NAK",[824,2827,2828],{},"53",[824,2830,1741],{},[824,2832,2833],{},"85",[824,2835,2836],{},"U",[824,2838,2839],{},"117",[824,2841,2842],{},"u",[808,2844,2845,2848,2851,2854,2856,2859,2862,2865],{},[824,2846,2847],{},"22",[824,2849,2850],{},"SYN",[824,2852,2853],{},"54",[824,2855,2445],{},[824,2857,2858],{},"86",[824,2860,2861],{},"V",[824,2863,2864],{},"118",[824,2866,2867],{},"v",[808,2869,2870,2873,2876,2879,2881,2884,2887,2890],{},[824,2871,2872],{},"23",[824,2874,2875],{},"TB",[824,2877,2878],{},"55",[824,2880,2470],{},[824,2882,2883],{},"87",[824,2885,2886],{},"W",[824,2888,2889],{},"119",[824,2891,2892],{},"w",[808,2894,2895,2898,2901,2904,2906,2909,2912,2914],{},[824,2896,2897],{},"24",[824,2899,2900],{},"CAN",[824,2902,2903],{},"56",[824,2905,2496],{},[824,2907,2908],{},"88",[824,2910,2911],{},"X",[824,2913,1575],{},[824,2915,2916],{},"x",[808,2918,2919,2922,2925,2928,2930,2933,2936,2939],{},[824,2920,2921],{},"25",[824,2923,2924],{},"EM",[824,2926,2927],{},"57",[824,2929,2520],{},[824,2931,2932],{},"89",[824,2934,2935],{},"Y",[824,2937,2938],{},"121",[824,2940,2941],{},"y",[808,2943,2944,2947,2950,2952,2955,2958,2961,2964],{},[824,2945,2946],{},"26",[824,2948,2949],{},"SUB",[824,2951,1588],{},[824,2953,2954],{},":",[824,2956,2957],{},"90",[824,2959,2960],{},"Z",[824,2962,2963],{},"122",[824,2965,2966],{},"z",[808,2968,2969,2972,2975,2978,2980,2983,2986,2989],{},[824,2970,2971],{},"27",[824,2973,2974],{},"ESC",[824,2976,2977],{},"59",[824,2979,2175],{},[824,2981,2982],{},"91",[824,2984,2985],{},"[",[824,2987,2988],{},"123",[824,2990,2991],{},"{",[808,2993,2994,2997,3000,3003,3005,3008,3010,3013],{},[824,2995,2996],{},"28",[824,2998,2999],{},"FS",[824,3001,3002],{},"60",[824,3004,431],{},[824,3006,3007],{},"92",[824,3009,2683],{},[824,3011,3012],{},"124",[824,3014,3015],{},"|",[808,3017,3018,3021,3024,3027,3029,3032,3035,3038],{},[824,3019,3020],{},"29",[824,3022,3023],{},"GS",[824,3025,3026],{},"61",[824,3028,440],{},[824,3030,3031],{},"93",[824,3033,3034],{},"]",[824,3036,3037],{},"125",[824,3039,3040],{},"}",[808,3042,3043,3045,3048,3051,3054,3057,3060,3063],{},[824,3044,399],{},[824,3046,3047],{},"RS",[824,3049,3050],{},"62",[824,3052,3053],{},">",[824,3055,3056],{},"94",[824,3058,3059],{},"^",[824,3061,3062],{},"126",[824,3064,3065],{},"`",[808,3067,3068,3071,3074,3077,3080,3083,3086,3089],{},[824,3069,3070],{},"31",[824,3072,3073],{},"US",[824,3075,3076],{},"63",[824,3078,3079],{},"?",[824,3081,3082],{},"95",[824,3084,3085],{},"_",[824,3087,3088],{},"127",[824,3090,3091],{},"DEL",[19,3093,3094,3095,3098],{},"ASCII 码大致由以下",[68,3096,3097],{},"两部分组","成：",[3100,3101,3102,3109],"ul",{},[1829,3103,3104,3105,3108],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[68,3106,3107],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[1829,3110,3111,3112,3115],{},"ASCII 打印字符：数字 ",[68,3113,3114],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[32,3117,3119],{"id":3118},"_134转义字符","1.3.4转义字符",[231,3121,3123],{"className":2112,"code":3122,"language":2114,"meta":236,"style":236},"\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",[23,3124,3125,3130,3146,3160,3165,3178,3183],{"__ignoreMap":236},[240,3126,3127],{"class":242,"line":243},[240,3128,3129],{"class":246},"\u002F\u002F换行符\n",[240,3131,3132,3135,3138,3141,3143],{"class":242,"line":250},[240,3133,3134],{"class":257},"cout ",[240,3136,3137],{"class":288},"\u003C\u003C",[240,3139,3140],{"class":443},"\"hello world\u002Fn\"",[240,3142,2175],{"class":257},[240,3144,3145],{"class":246}," \u002F\u002F就等同于如下：\n",[240,3147,3148,3150,3152,3155,3157],{"class":242,"line":261},[240,3149,3134],{"class":257},[240,3151,3137],{"class":288},[240,3153,3154],{"class":443},"\"hello world\"",[240,3156,3137],{"class":288},[240,3158,3159],{"class":257},"endl;\n",[240,3161,3162],{"class":242,"line":277},[240,3163,3164],{"class":246},"\u002F\u002F反斜杠\n",[240,3166,3167,3169,3171,3174,3176],{"class":242,"line":294},[240,3168,3134],{"class":257},[240,3170,3137],{"class":288},[240,3172,3173],{"class":443},"\"\u002F\u002F\"",[240,3175,3137],{"class":288},[240,3177,3159],{"class":257},[240,3179,3180],{"class":242,"line":309},[240,3181,3182],{"class":246},"\u002F\u002F水平制表符\n",[240,3184,3185,3187,3189,3192,3195,3198,3200,3203],{"class":242,"line":529},[240,3186,3134],{"class":257},[240,3188,3137],{"class":288},[240,3190,3191],{"class":443},"\"aaaa",[240,3193,3194],{"class":264},"\\t",[240,3196,3197],{"class":443},"helloworld\"",[240,3199,3137],{"class":288},[240,3201,3202],{"class":257},"endl;",[240,3204,3205],{"class":246}," \u002F\u002F输出窗口时有对齐效果\n",[32,3207,3209],{"id":3208},"_135字符串型","1.3.5字符串型",[19,3211,3212,3213,3215],{},"char 变量名",[240,3214],{},"=\"字符串值\"",[231,3217,3219],{"className":2112,"code":3218,"language":2114,"meta":236,"style":236},"\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",[23,3220,3221,3226,3231,3236,3241,3254,3267,3272,3277,3288],{"__ignoreMap":236},[240,3222,3223],{"class":242,"line":243},[240,3224,3225],{"class":246},"\u002F\u002Fc风格字符串\n",[240,3227,3228],{"class":242,"line":250},[240,3229,3230],{"class":246},"\u002F\u002F注意事项：\n",[240,3232,3233],{"class":242,"line":261},[240,3234,3235],{"class":246},"\u002F\u002F1.char字符串名[]\n",[240,3237,3238],{"class":242,"line":277},[240,3239,3240],{"class":246},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[240,3242,3243,3245,3248,3250,3252],{"class":242,"line":294},[240,3244,2213],{"class":288},[240,3246,3247],{"class":257}," str[]",[240,3249,440],{"class":288},[240,3251,3154],{"class":443},[240,3253,274],{"class":257},[240,3255,3256,3258,3260,3263,3265],{"class":242,"line":309},[240,3257,3134],{"class":257},[240,3259,3137],{"class":288},[240,3261,3262],{"class":257},"str",[240,3264,3137],{"class":288},[240,3266,3159],{"class":257},[240,3268,3269],{"class":242,"line":529},[240,3270,3271],{"class":246},"\u002F\u002Fc++风格字符串\n",[240,3273,3274],{"class":242,"line":549},[240,3275,3276],{"class":246},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[240,3278,3279,3282,3284,3286],{"class":242,"line":569},[240,3280,3281],{"class":257},"string str2",[240,3283,440],{"class":288},[240,3285,3154],{"class":443},[240,3287,274],{"class":257},[240,3289,3290,3292,3294,3297,3299],{"class":242,"line":589},[240,3291,3134],{"class":257},[240,3293,3137],{"class":288},[240,3295,3296],{"class":257},"str2",[240,3298,3137],{"class":288},[240,3300,3159],{"class":257},[32,3302,3304],{"id":3303},"_136布尔类型bool","1.3.6布尔类型bool",[231,3306,3308],{"className":2112,"code":3307,"language":2114,"meta":236,"style":236},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[23,3309,3310,3325],{"__ignoreMap":236},[240,3311,3312,3315,3318,3320,3323],{"class":242,"line":243},[240,3313,3314],{"class":288},"bool",[240,3316,3317],{"class":257}," flag",[240,3319,440],{"class":288},[240,3321,3322],{"class":264},"true",[240,3324,274],{"class":257},[240,3326,3327,3330,3333,3336,3338,3340],{"class":242,"line":250},[240,3328,3329],{"class":257},"cout",[240,3331,3332],{"class":288},"\u003C\u003Csizeof",[240,3334,3335],{"class":257},"(flag)",[240,3337,3137],{"class":288},[240,3339,3202],{"class":257},[240,3341,3342],{"class":246}," \u002F\u002F查看布尔占内存空间\n",[14,3344,3346],{"id":3345},"_14键盘输入cin","1.4键盘输入cin",[231,3348,3350],{"className":2112,"code":3349,"language":2114,"meta":236,"style":236},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[23,3351,3352,3364,3381,3392],{"__ignoreMap":236},[240,3353,3354,3356,3358,3360,3362],{"class":242,"line":243},[240,3355,2126],{"class":288},[240,3357,609],{"class":257},[240,3359,440],{"class":288},[240,3361,1274],{"class":264},[240,3363,274],{"class":257},[240,3365,3366,3368,3370,3373,3375,3377,3379],{"class":242,"line":250},[240,3367,3329],{"class":257},[240,3369,3137],{"class":288},[240,3371,3372],{"class":443},"\"请给整型变量a赋值\"",[240,3374,3137],{"class":288},[240,3376,254],{"class":257},[240,3378,3137],{"class":288},[240,3380,3159],{"class":257},[240,3382,3383,3386,3389],{"class":242,"line":261},[240,3384,3385],{"class":257},"cin ",[240,3387,3388],{"class":288},">>",[240,3390,3391],{"class":257}," a;\n",[240,3393,3394,3396,3398,3401,3404,3406,3408],{"class":242,"line":277},[240,3395,3134],{"class":257},[240,3397,3137],{"class":288},[240,3399,3400],{"class":443}," \"整型变量a=\"",[240,3402,3403],{"class":288}," \u003C\u003C",[240,3405,254],{"class":257},[240,3407,3137],{"class":288},[240,3409,3159],{"class":257},[14,3411,3413],{"id":3412},"_15运算符","1.5运算符",[32,3415,3417],{"id":3416},"_151算术运算符","1.5.1算术运算符",[19,3419,3420,3423],{},[219,3421],{"alt":236,"src":3422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[1826,3425,3426,3429,3432],{},[1829,3427,3428],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[1829,3430,3431],{},"两个小数不可以做取模运算",[1829,3433,3434],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[32,3436,3438],{"id":3437},"_152赋值运算符","1.5.2赋值运算符",[19,3440,3441],{},[219,3442],{"alt":236,"src":3443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[32,3445,3447],{"id":3446},"_153比较运算符","1.5.3比较运算符",[19,3449,3450],{},[219,3451],{"alt":236,"src":3452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[32,3454,3456],{"id":3455},"_154逻辑运算符","1.5.4逻辑运算符",[19,3458,3459],{},[219,3460],{"alt":236,"src":3461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[14,3463,3465],{"id":3464},"_16程序流程结构","1.6程序流程结构",[32,3467,3469],{"id":3468},"_161选择结构","1.6.1选择结构",[1826,3471,3472],{},[1829,3473,3474],{},"if语句\n单行、多行、多条件if语句",[231,3476,3478],{"className":2112,"code":3477,"language":2114,"meta":236,"style":236},"\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",[23,3479,3480,3485,3500,3505,3519,3523,3528,3537,3550,3554,3567,3571,3576,3580,3594,3599,3605,3626,3631,3645,3650,3679,3684,3701,3706,3711,3716,3730,3735],{"__ignoreMap":236},[240,3481,3482],{"class":242,"line":243},[240,3483,3484],{"class":246},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[240,3486,3487,3490,3493,3495,3498],{"class":242,"line":250},[240,3488,3489],{"class":288},"if",[240,3491,3492],{"class":257},"(score",[240,3494,3053],{"class":288},[240,3496,3497],{"class":264},"600",[240,3499,2129],{"class":257},[240,3501,3502],{"class":242,"line":261},[240,3503,3504],{"class":257},"{\n",[240,3506,3507,3510,3512,3515,3517],{"class":242,"line":277},[240,3508,3509],{"class":257},"    cout",[240,3511,3137],{"class":288},[240,3513,3514],{"class":443},"'这是单行if语句'",[240,3516,3137],{"class":288},[240,3518,3159],{"class":257},[240,3520,3521],{"class":242,"line":294},[240,3522,312],{"class":257},[240,3524,3525],{"class":242,"line":309},[240,3526,3527],{"class":246},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[240,3529,3530,3532,3534],{"class":242,"line":529},[240,3531,3385],{"class":257},[240,3533,3388],{"class":288},[240,3535,3536],{"class":257}," score\n",[240,3538,3539,3541,3543,3546,3548],{"class":242,"line":549},[240,3540,3489],{"class":288},[240,3542,3492],{"class":257},[240,3544,3545],{"class":288},"\u003C=",[240,3547,3497],{"class":264},[240,3549,2129],{"class":257},[240,3551,3552],{"class":242,"line":569},[240,3553,3504],{"class":257},[240,3555,3556,3558,3560,3563,3565],{"class":242,"line":589},[240,3557,3509],{"class":257},[240,3559,3388],{"class":288},[240,3561,3562],{"class":443},"\"小于等于600\"",[240,3564,3137],{"class":288},[240,3566,3159],{"class":257},[240,3568,3569],{"class":242,"line":715},[240,3570,312],{"class":257},[240,3572,3573],{"class":242,"line":727},[240,3574,3575],{"class":288},"else\n",[240,3577,3578],{"class":242,"line":1730},[240,3579,3504],{"class":257},[240,3581,3583,3585,3587,3590,3592],{"class":242,"line":3582},14,[240,3584,3509],{"class":257},[240,3586,3388],{"class":288},[240,3588,3589],{"class":443},"\"大于600\"",[240,3591,3388],{"class":288},[240,3593,3159],{"class":257},[240,3595,3597],{"class":242,"line":3596},15,[240,3598,312],{"class":257},[240,3600,3602],{"class":242,"line":3601},16,[240,3603,3604],{"class":246},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[240,3606,3608,3610,3613,3615,3617,3620,3622,3624],{"class":242,"line":3607},17,[240,3609,3489],{"class":288},[240,3611,3612],{"class":257}," (",[240,3614,1274],{"class":264},[240,3616,431],{"class":288},[240,3618,3619],{"class":257},"num",[240,3621,431],{"class":288},[240,3623,285],{"class":264},[240,3625,2129],{"class":257},[240,3627,3629],{"class":242,"line":3628},18,[240,3630,3504],{"class":257},[240,3632,3634,3636,3638,3641,3643],{"class":242,"line":3633},19,[240,3635,3509],{"class":257},[240,3637,3137],{"class":288},[240,3639,3640],{"class":443},"\"小于100\"",[240,3642,3137],{"class":288},[240,3644,3159],{"class":257},[240,3646,3648],{"class":242,"line":3647},20,[240,3649,312],{"class":257},[240,3651,3653,3656,3659,3662,3665,3667,3670,3672,3674,3677],{"class":242,"line":3652},21,[240,3654,3655],{"class":288},"else",[240,3657,3658],{"class":288}," if",[240,3660,3661],{"class":257}," (nmu",[240,3663,3664],{"class":288},">=",[240,3666,285],{"class":264},[240,3668,3669],{"class":288},"&&",[240,3671,3619],{"class":257},[240,3673,431],{"class":288},[240,3675,3676],{"class":264},"200",[240,3678,2129],{"class":257},[240,3680,3682],{"class":242,"line":3681},22,[240,3683,3504],{"class":257},[240,3685,3687,3689,3691,3694,3696,3698],{"class":242,"line":3686},23,[240,3688,3509],{"class":257},[240,3690,3137],{"class":288},[240,3692,3693],{"class":443},"\"不小于100且小于200\"",[240,3695,3137],{"class":288},[240,3697,3202],{"class":257},[240,3699,3700],{"class":246}," \u002F\u002F可以无限else if,python中是elif：\n",[240,3702,3704],{"class":242,"line":3703},24,[240,3705,312],{"class":257},[240,3707,3709],{"class":242,"line":3708},25,[240,3710,3575],{"class":288},[240,3712,3714],{"class":242,"line":3713},26,[240,3715,3504],{"class":257},[240,3717,3719,3721,3723,3726,3728],{"class":242,"line":3718},27,[240,3720,3509],{"class":257},[240,3722,3137],{"class":288},[240,3724,3725],{"class":443},"\"不小于200\"",[240,3727,3137],{"class":288},[240,3729,3159],{"class":257},[240,3731,3733],{"class":242,"line":3732},28,[240,3734,312],{"class":257},[240,3736,3738],{"class":242,"line":3737},29,[240,3739,3740],{"class":246},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[1826,3742,3743],{"start":250},[1829,3744,3745],{},"三目运算符",[231,3747,3749],{"className":2112,"code":3748,"language":2114,"meta":236,"style":236},"\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",[23,3750,3751,3756,3761,3787,3809,3826,3831,3854,3869],{"__ignoreMap":236},[240,3752,3753],{"class":242,"line":243},[240,3754,3755],{"class":246},"\u002F\u002F创建三个变量a,b,c\n",[240,3757,3758],{"class":242,"line":250},[240,3759,3760],{"class":246},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[240,3762,3763,3765,3767,3769,3771,3774,3776,3778,3781,3783,3785],{"class":242,"line":261},[240,3764,2126],{"class":288},[240,3766,609],{"class":257},[240,3768,440],{"class":288},[240,3770,1000],{"class":264},[240,3772,3773],{"class":257},",b",[240,3775,440],{"class":288},[240,3777,2546],{"class":264},[240,3779,3780],{"class":257},",c",[240,3782,440],{"class":288},[240,3784,1274],{"class":264},[240,3786,274],{"class":257},[240,3788,3789,3791,3793,3796,3798,3800,3802,3804,3806],{"class":242,"line":277},[240,3790,2392],{"class":257},[240,3792,440],{"class":288},[240,3794,3795],{"class":257},"(a",[240,3797,3053],{"class":288},[240,3799,2367],{"class":257},[240,3801,3079],{"class":288},[240,3803,254],{"class":257},[240,3805,2954],{"class":288},[240,3807,3808],{"class":257},"b)\n",[240,3810,3811,3813,3815,3818,3820,3822,3824],{"class":242,"line":294},[240,3812,3329],{"class":257},[240,3814,3137],{"class":288},[240,3816,3817],{"class":443},"\"c=\"",[240,3819,3137],{"class":288},[240,3821,2392],{"class":257},[240,3823,3137],{"class":288},[240,3825,3159],{"class":257},[240,3827,3828],{"class":242,"line":309},[240,3829,3830],{"class":246},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[240,3832,3833,3835,3837,3839,3841,3843,3845,3848,3850,3852],{"class":242,"line":529},[240,3834,3795],{"class":257},[240,3836,3053],{"class":288},[240,3838,2367],{"class":257},[240,3840,3079],{"class":288},[240,3842,254],{"class":257},[240,3844,2954],{"class":288},[240,3846,3847],{"class":257},"b)",[240,3849,440],{"class":288},[240,3851,285],{"class":264},[240,3853,274],{"class":257},[240,3855,3856,3858,3860,3862,3864,3866],{"class":242,"line":549},[240,3857,3329],{"class":257},[240,3859,3137],{"class":288},[240,3861,254],{"class":257},[240,3863,3137],{"class":288},[240,3865,3202],{"class":257},[240,3867,3868],{"class":246}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[240,3870,3871,3873,3875,3877,3879,3881],{"class":242,"line":569},[240,3872,3329],{"class":257},[240,3874,3137],{"class":288},[240,3876,2367],{"class":257},[240,3878,3137],{"class":288},[240,3880,3202],{"class":257},[240,3882,3883],{"class":246}," \u002F\u002F10   a>b,b还是原值\n",[1826,3885,3886],{"start":261},[1829,3887,3888],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[231,3890,3892],{"className":2112,"code":3891,"language":2114,"meta":236,"style":236},"\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",[23,3893,3894,3899,3907,3920,3930,3934,3948,3961,3971,3979,3984,4009,4030,4052,4073,4095,4116,4136,4141],{"__ignoreMap":236},[240,3895,3896],{"class":242,"line":243},[240,3897,3898],{"class":246},"\u002F\u002F案例-电影打分\n",[240,3900,3901,3904],{"class":242,"line":250},[240,3902,3903],{"class":288},"#include",[240,3905,3906],{"class":443},"\u003Ciostream>\n",[240,3908,3909,3912,3915,3918],{"class":242,"line":261},[240,3910,3911],{"class":288},"using",[240,3913,3914],{"class":288}," namespace",[240,3916,3917],{"class":436}," std",[240,3919,274],{"class":257},[240,3921,3922,3924,3927],{"class":242,"line":277},[240,3923,2126],{"class":288},[240,3925,3926],{"class":436}," main",[240,3928,3929],{"class":257},"()\n",[240,3931,3932],{"class":242,"line":294},[240,3933,3504],{"class":257},[240,3935,3936,3939,3942,3944,3946],{"class":242,"line":309},[240,3937,3938],{"class":288},"    int",[240,3940,3941],{"class":257}," score",[240,3943,440],{"class":288},[240,3945,1274],{"class":264},[240,3947,274],{"class":257},[240,3949,3950,3952,3954,3957,3959],{"class":242,"line":529},[240,3951,3509],{"class":257},[240,3953,3137],{"class":288},[240,3955,3956],{"class":443},"\"电影打分：\"",[240,3958,3137],{"class":288},[240,3960,3159],{"class":257},[240,3962,3963,3966,3968],{"class":242,"line":549},[240,3964,3965],{"class":257},"    cin",[240,3967,3388],{"class":288},[240,3969,3970],{"class":257},"score;\n",[240,3972,3973,3976],{"class":242,"line":569},[240,3974,3975],{"class":288},"    switch",[240,3977,3978],{"class":257},"(score)\n",[240,3980,3981],{"class":242,"line":589},[240,3982,3983],{"class":257},"    {\n",[240,3985,3986,3989,3992,3995,3997,4000,4002,4004,4007],{"class":242,"line":715},[240,3987,3988],{"class":288},"        case",[240,3990,3991],{"class":264}," 10",[240,3993,3994],{"class":257},":cout",[240,3996,3137],{"class":288},[240,3998,3999],{"class":443},"\"经典\"",[240,4001,3137],{"class":288},[240,4003,3202],{"class":257},[240,4005,4006],{"class":288},"break",[240,4008,274],{"class":257},[240,4010,4011,4013,4016,4018,4020,4022,4024,4026,4028],{"class":242,"line":727},[240,4012,3988],{"class":288},[240,4014,4015],{"class":264}," 9",[240,4017,3994],{"class":257},[240,4019,3137],{"class":288},[240,4021,3999],{"class":443},[240,4023,3137],{"class":288},[240,4025,3202],{"class":257},[240,4027,4006],{"class":288},[240,4029,274],{"class":257},[240,4031,4032,4034,4037,4039,4041,4044,4046,4048,4050],{"class":242,"line":1730},[240,4033,3988],{"class":288},[240,4035,4036],{"class":264}," 8",[240,4038,3994],{"class":257},[240,4040,3137],{"class":288},[240,4042,4043],{"class":443},"\"非常好\"",[240,4045,3137],{"class":288},[240,4047,3202],{"class":257},[240,4049,4006],{"class":288},[240,4051,274],{"class":257},[240,4053,4054,4056,4059,4061,4063,4065,4067,4069,4071],{"class":242,"line":3582},[240,4055,3988],{"class":288},[240,4057,4058],{"class":264}," 7",[240,4060,3994],{"class":257},[240,4062,3137],{"class":288},[240,4064,4043],{"class":443},[240,4066,3137],{"class":288},[240,4068,3202],{"class":257},[240,4070,4006],{"class":288},[240,4072,274],{"class":257},[240,4074,4075,4077,4080,4082,4084,4087,4089,4091,4093],{"class":242,"line":3596},[240,4076,3988],{"class":288},[240,4078,4079],{"class":264}," 6",[240,4081,3994],{"class":257},[240,4083,3137],{"class":288},[240,4085,4086],{"class":443},"\"一般\"",[240,4088,3137],{"class":288},[240,4090,3202],{"class":257},[240,4092,4006],{"class":288},[240,4094,274],{"class":257},[240,4096,4097,4099,4102,4104,4106,4108,4110,4112,4114],{"class":242,"line":3601},[240,4098,3988],{"class":288},[240,4100,4101],{"class":264}," 5",[240,4103,3994],{"class":257},[240,4105,3137],{"class":288},[240,4107,4086],{"class":443},[240,4109,3137],{"class":288},[240,4111,3202],{"class":257},[240,4113,4006],{"class":288},[240,4115,274],{"class":257},[240,4117,4118,4121,4123,4125,4128,4130,4132,4134],{"class":242,"line":3607},[240,4119,4120],{"class":288},"        default",[240,4122,3994],{"class":257},[240,4124,3137],{"class":288},[240,4126,4127],{"class":443},"\"烂片\"",[240,4129,3137],{"class":288},[240,4131,3202],{"class":257},[240,4133,4006],{"class":288},[240,4135,274],{"class":257},[240,4137,4138],{"class":242,"line":3628},[240,4139,4140],{"class":257},"    }\n",[240,4142,4143],{"class":242,"line":3633},[240,4144,312],{"class":257},[19,4146,4147],{},"if和switch区别：",[3100,4149,4150,4153],{},[1829,4151,4152],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[1829,4154,4155],{},"switch优点：结构清晰，执行效率高",[32,4157,4159],{"id":4158},"_162循环结构","1.6.2循环结构",[1826,4161,4162],{},[1829,4163,4164],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[231,4166,4168],{"className":2112,"code":4167,"language":2114,"meta":236,"style":236},"\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",[23,4169,4170,4175,4183,4187,4200,4214,4218,4238,4248,4252,4264],{"__ignoreMap":236},[240,4171,4172],{"class":242,"line":243},[240,4173,4174],{"class":246},"\u002F\u002F打印0-9数字\n",[240,4176,4177,4179,4181],{"class":242,"line":250},[240,4178,2126],{"class":288},[240,4180,3926],{"class":436},[240,4182,3929],{"class":257},[240,4184,4185],{"class":242,"line":261},[240,4186,3504],{"class":257},[240,4188,4189,4191,4194,4196,4198],{"class":242,"line":277},[240,4190,3938],{"class":288},[240,4192,4193],{"class":257}," num",[240,4195,440],{"class":288},[240,4197,1274],{"class":264},[240,4199,274],{"class":257},[240,4201,4202,4205,4208,4210,4212],{"class":242,"line":294},[240,4203,4204],{"class":288},"    while",[240,4206,4207],{"class":257},"(num",[240,4209,431],{"class":288},[240,4211,2546],{"class":264},[240,4213,2129],{"class":257},[240,4215,4216],{"class":242,"line":309},[240,4217,3983],{"class":257},[240,4219,4220,4223,4226,4228,4230,4232,4235],{"class":242,"line":529},[240,4221,4222],{"class":436},"       std",[240,4224,4225],{"class":257},"::cout",[240,4227,3137],{"class":288},[240,4229,3619],{"class":257},[240,4231,3137],{"class":288},[240,4233,4234],{"class":436},"std",[240,4236,4237],{"class":257},"::endl;\n",[240,4239,4240,4243,4246],{"class":242,"line":549},[240,4241,4242],{"class":257},"        num",[240,4244,4245],{"class":288},"++",[240,4247,274],{"class":257},[240,4249,4250],{"class":242,"line":569},[240,4251,4140],{"class":257},[240,4253,4254,4257,4259,4262],{"class":242,"line":589},[240,4255,4256],{"class":436},"    system",[240,4258,789],{"class":257},[240,4260,4261],{"class":443},"\"pause\"",[240,4263,2129],{"class":257},[240,4265,4266],{"class":242,"line":715},[240,4267,312],{"class":257},[19,4269,4270],{},"注意：写好循环条件，避免死循环情况",[231,4272,4274],{"className":2112,"code":4273,"language":2114,"meta":236,"style":236},"\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",[23,4275,4276,4281,4288,4295,4305,4313,4317,4322,4349,4354,4359,4367,4394,4399,4404,4417,4427,4431,4441,4446,4459,4464,4478,4483,4498,4502,4515,4519,4524,4528,4542,4550,4555,4561,4567,4572],{"__ignoreMap":236},[240,4277,4278],{"class":242,"line":243},[240,4279,4280],{"class":246},"\u002F\u002F循环结构-猜数字\n",[240,4282,4283,4285],{"class":242,"line":250},[240,4284,3903],{"class":288},[240,4286,4287],{"class":443}," \u003Ciostream>\n",[240,4289,4290,4292],{"class":242,"line":261},[240,4291,3903],{"class":288},[240,4293,4294],{"class":443}," \u003Cctime>\n",[240,4296,4297,4299,4301,4303],{"class":242,"line":277},[240,4298,3911],{"class":288},[240,4300,3914],{"class":288},[240,4302,3917],{"class":436},[240,4304,274],{"class":257},[240,4306,4307,4309,4311],{"class":242,"line":294},[240,4308,2126],{"class":288},[240,4310,3926],{"class":436},[240,4312,3929],{"class":257},[240,4314,4315],{"class":242,"line":309},[240,4316,3504],{"class":257},[240,4318,4319],{"class":242,"line":529},[240,4320,4321],{"class":246},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[240,4323,4324,4327,4330,4333,4336,4338,4341,4343,4346],{"class":242,"line":549},[240,4325,4326],{"class":436},"    srand",[240,4328,4329],{"class":257},"((",[240,4331,4332],{"class":288},"unsigned",[240,4334,4335],{"class":288}," int",[240,4337,2529],{"class":257},[240,4339,4340],{"class":436},"time",[240,4342,789],{"class":257},[240,4344,4345],{"class":264},"NULL",[240,4347,4348],{"class":257},"));\n",[240,4350,4351],{"class":242,"line":569},[240,4352,4353],{"emptyLinePlaceholder":2051},"\n",[240,4355,4356],{"class":242,"line":589},[240,4357,4358],{"class":246},"    \u002F\u002F1.系统生成随机数\n",[240,4360,4361,4364],{"class":242,"line":715},[240,4362,4363],{"class":246},"    \u002F\u002Frand()%100",[240,4365,4366],{"class":246}," \u002F\u002F生成0-99的随机数\n",[240,4368,4369,4371,4373,4375,4378,4381,4383,4385,4387,4389,4391],{"class":242,"line":727},[240,4370,3938],{"class":288},[240,4372,4193],{"class":257},[240,4374,440],{"class":288},[240,4376,4377],{"class":436},"rand",[240,4379,4380],{"class":257},"()",[240,4382,2429],{"class":288},[240,4384,285],{"class":264},[240,4386,2580],{"class":288},[240,4388,1643],{"class":264},[240,4390,2175],{"class":257},[240,4392,4393],{"class":246}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[240,4395,4396],{"class":242,"line":1730},[240,4397,4398],{"class":246},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[240,4400,4401],{"class":242,"line":3582},[240,4402,4403],{"class":246},"    \u002F\u002F2.玩家猜测\n",[240,4405,4406,4408,4411,4413,4415],{"class":242,"line":3596},[240,4407,3938],{"class":288},[240,4409,4410],{"class":257}," val",[240,4412,440],{"class":288},[240,4414,1274],{"class":264},[240,4416,274],{"class":257},[240,4418,4419,4421,4423,4425],{"class":242,"line":3601},[240,4420,4204],{"class":288},[240,4422,3612],{"class":257},[240,4424,1643],{"class":264},[240,4426,2129],{"class":257},[240,4428,4429],{"class":242,"line":3607},[240,4430,3983],{"class":257},[240,4432,4433,4436,4438],{"class":242,"line":3628},[240,4434,4435],{"class":257},"        cin",[240,4437,3388],{"class":288},[240,4439,4440],{"class":257},"val;\n",[240,4442,4443],{"class":242,"line":3633},[240,4444,4445],{"class":246},"        \u002F\u002F3.判断玩家猜测\n",[240,4447,4448,4451,4454,4456],{"class":242,"line":3647},[240,4449,4450],{"class":288},"        if",[240,4452,4453],{"class":257},"(val",[240,4455,431],{"class":288},[240,4457,4458],{"class":257},"num) \n",[240,4460,4461],{"class":242,"line":3652},[240,4462,4463],{"class":257},"        {\n",[240,4465,4466,4469,4471,4474,4476],{"class":242,"line":3681},[240,4467,4468],{"class":257},"            cout",[240,4470,3137],{"class":288},[240,4472,4473],{"class":443},"\"猜小了！\"",[240,4475,3137],{"class":288},[240,4477,3159],{"class":257},[240,4479,4480],{"class":242,"line":3686},[240,4481,4482],{"class":257},"        }\n",[240,4484,4485,4488,4490,4493,4495],{"class":242,"line":3703},[240,4486,4487],{"class":288},"        else",[240,4489,3658],{"class":288},[240,4491,4492],{"class":257}," (val",[240,4494,3053],{"class":288},[240,4496,4497],{"class":257},"num)\n",[240,4499,4500],{"class":242,"line":3708},[240,4501,4463],{"class":257},[240,4503,4504,4506,4508,4511,4513],{"class":242,"line":3713},[240,4505,4468],{"class":257},[240,4507,3137],{"class":288},[240,4509,4510],{"class":443},"\"猜大了！\"",[240,4512,3137],{"class":288},[240,4514,3159],{"class":257},[240,4516,4517],{"class":242,"line":3718},[240,4518,4482],{"class":257},[240,4520,4521],{"class":242,"line":3732},[240,4522,4523],{"class":288},"        else\n",[240,4525,4526],{"class":242,"line":3737},[240,4527,4463],{"class":257},[240,4529,4531,4533,4535,4538,4540],{"class":242,"line":4530},30,[240,4532,4468],{"class":257},[240,4534,3137],{"class":288},[240,4536,4537],{"class":443},"\"猜对了！\"",[240,4539,3137],{"class":288},[240,4541,3159],{"class":257},[240,4543,4545,4548],{"class":242,"line":4544},31,[240,4546,4547],{"class":288},"            break",[240,4549,274],{"class":257},[240,4551,4553],{"class":242,"line":4552},32,[240,4554,4482],{"class":257},[240,4556,4558],{"class":242,"line":4557},33,[240,4559,4560],{"class":246},"        \u002F\u002F猜对 退出游戏\n",[240,4562,4564],{"class":242,"line":4563},34,[240,4565,4566],{"class":246},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[240,4568,4570],{"class":242,"line":4569},35,[240,4571,4140],{"class":257},[240,4573,4575],{"class":242,"line":4574},36,[240,4576,312],{"class":257},[1826,4578,4579],{"start":250},[1829,4580,4581,4582,4585],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[68,4583,4584],{},"do...while会先执行一次循环语句","，在判断循环语句",[231,4587,4589],{"className":2112,"code":4588,"language":2114,"meta":236,"style":236},"\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",[23,4590,4591,4596,4604,4608,4620,4628,4632,4649,4656,4660,4672,4682],{"__ignoreMap":236},[240,4592,4593],{"class":242,"line":243},[240,4594,4595],{"class":246},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[240,4597,4598,4600,4602],{"class":242,"line":250},[240,4599,2126],{"class":288},[240,4601,3926],{"class":436},[240,4603,3929],{"class":257},[240,4605,4606],{"class":242,"line":261},[240,4607,3504],{"class":257},[240,4609,4610,4612,4614,4616,4618],{"class":242,"line":277},[240,4611,3938],{"class":288},[240,4613,4193],{"class":257},[240,4615,440],{"class":288},[240,4617,1274],{"class":264},[240,4619,274],{"class":257},[240,4621,4622,4625],{"class":242,"line":294},[240,4623,4624],{"class":288},"    do",[240,4626,4627],{"class":257}," \n",[240,4629,4630],{"class":242,"line":309},[240,4631,3983],{"class":257},[240,4633,4634,4637,4639,4641,4643,4645,4647],{"class":242,"line":529},[240,4635,4636],{"class":436},"        std",[240,4638,4225],{"class":257},[240,4640,3137],{"class":288},[240,4642,3619],{"class":257},[240,4644,3137],{"class":288},[240,4646,4234],{"class":436},[240,4648,4237],{"class":257},[240,4650,4651,4653],{"class":242,"line":549},[240,4652,4242],{"class":257},[240,4654,4655],{"class":288},"++\n",[240,4657,4658],{"class":242,"line":569},[240,4659,4140],{"class":257},[240,4661,4662,4664,4666,4668,4670],{"class":242,"line":589},[240,4663,4204],{"class":288},[240,4665,4207],{"class":257},[240,4667,431],{"class":288},[240,4669,2546],{"class":264},[240,4671,796],{"class":257},[240,4673,4674,4676,4678,4680],{"class":242,"line":715},[240,4675,4256],{"class":436},[240,4677,789],{"class":257},[240,4679,4261],{"class":443},[240,4681,796],{"class":257},[240,4683,4684],{"class":242,"line":727},[240,4685,312],{"class":257},[19,4687,4688],{},"案例-水仙花数",[19,4690,4691],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[19,4693,4694],{},"例如：1^3+5^3+3^3=153",[19,4696,4697],{},"请用do...while语句，求出所有3位数的水仙花数",[231,4699,4701],{"className":2112,"code":4700,"language":2114,"meta":236,"style":236},"#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",[23,4702,4703,4709,4719,4727,4731,4736,4748,4754,4758,4763,4779,4795,4811,4826,4845,4860,4908,4912,4924,4928,4936,4940,4954],{"__ignoreMap":236},[240,4704,4705,4707],{"class":242,"line":243},[240,4706,3903],{"class":288},[240,4708,4287],{"class":443},[240,4710,4711,4713,4715,4717],{"class":242,"line":250},[240,4712,3911],{"class":288},[240,4714,3914],{"class":288},[240,4716,3917],{"class":436},[240,4718,274],{"class":257},[240,4720,4721,4723,4725],{"class":242,"line":261},[240,4722,2126],{"class":288},[240,4724,3926],{"class":436},[240,4726,3929],{"class":257},[240,4728,4729],{"class":242,"line":277},[240,4730,3504],{"class":257},[240,4732,4733],{"class":242,"line":294},[240,4734,4735],{"class":246},"    \u002F\u002F1.先打印所有三位数字\n",[240,4737,4738,4740,4742,4744,4746],{"class":242,"line":309},[240,4739,3938],{"class":288},[240,4741,4193],{"class":257},[240,4743,440],{"class":288},[240,4745,285],{"class":264},[240,4747,274],{"class":257},[240,4749,4750,4752],{"class":242,"line":529},[240,4751,4624],{"class":288},[240,4753,4627],{"class":257},[240,4755,4756],{"class":242,"line":549},[240,4757,3983],{"class":257},[240,4759,4760],{"class":242,"line":569},[240,4761,4762],{"class":246},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[240,4764,4765,4768,4770,4772,4774,4776],{"class":242,"line":589},[240,4766,4767],{"class":288},"        int",[240,4769,609],{"class":257},[240,4771,440],{"class":288},[240,4773,1274],{"class":264},[240,4775,2175],{"class":257},[240,4777,4778],{"class":246}," \u002F\u002F个位\n",[240,4780,4781,4783,4786,4788,4790,4792],{"class":242,"line":715},[240,4782,4767],{"class":288},[240,4784,4785],{"class":257}," b",[240,4787,440],{"class":288},[240,4789,1274],{"class":264},[240,4791,2175],{"class":257},[240,4793,4794],{"class":246}," \u002F\u002F十位\n",[240,4796,4797,4799,4802,4804,4806,4808],{"class":242,"line":727},[240,4798,4767],{"class":288},[240,4800,4801],{"class":257}," c",[240,4803,440],{"class":288},[240,4805,1274],{"class":264},[240,4807,2175],{"class":257},[240,4809,4810],{"class":246}," \u002F\u002F百位\n",[240,4812,4813,4816,4818,4820,4822,4824],{"class":242,"line":1730},[240,4814,4815],{"class":257},"        a",[240,4817,440],{"class":288},[240,4819,3619],{"class":257},[240,4821,2429],{"class":288},[240,4823,2546],{"class":264},[240,4825,274],{"class":257},[240,4827,4828,4831,4833,4835,4837,4839,4841,4843],{"class":242,"line":3582},[240,4829,4830],{"class":257},"        b",[240,4832,440],{"class":288},[240,4834,3619],{"class":257},[240,4836,2683],{"class":288},[240,4838,2546],{"class":264},[240,4840,2429],{"class":288},[240,4842,2546],{"class":264},[240,4844,274],{"class":257},[240,4846,4847,4850,4852,4854,4856,4858],{"class":242,"line":3596},[240,4848,4849],{"class":257},"        c",[240,4851,440],{"class":288},[240,4853,3619],{"class":257},[240,4855,2683],{"class":288},[240,4857,285],{"class":264},[240,4859,274],{"class":257},[240,4861,4862,4864,4866,4868,4870,4872,4874,4876,4878,4880,4882,4884,4886,4888,4890,4892,4894,4896,4899,4902,4905],{"class":242,"line":3601},[240,4863,4450],{"class":288},[240,4865,3795],{"class":257},[240,4867,2554],{"class":288},[240,4869,254],{"class":257},[240,4871,2554],{"class":288},[240,4873,254],{"class":257},[240,4875,2580],{"class":288},[240,4877,2367],{"class":257},[240,4879,2554],{"class":288},[240,4881,2367],{"class":257},[240,4883,2554],{"class":288},[240,4885,2367],{"class":257},[240,4887,2580],{"class":288},[240,4889,2392],{"class":257},[240,4891,2554],{"class":288},[240,4893,2392],{"class":257},[240,4895,2554],{"class":288},[240,4897,4898],{"class":257},"c ",[240,4900,4901],{"class":288},"==",[240,4903,4904],{"class":257}," num)",[240,4906,4907],{"class":246}," \u002F\u002F如果是水仙花数，才打印\n",[240,4909,4910],{"class":242,"line":3607},[240,4911,4463],{"class":257},[240,4913,4914,4916,4918,4920,4922],{"class":242,"line":3628},[240,4915,4468],{"class":257},[240,4917,3137],{"class":288},[240,4919,3619],{"class":257},[240,4921,3137],{"class":288},[240,4923,3159],{"class":257},[240,4925,4926],{"class":242,"line":3633},[240,4927,4482],{"class":257},[240,4929,4930,4932,4934],{"class":242,"line":3647},[240,4931,4242],{"class":257},[240,4933,4245],{"class":288},[240,4935,274],{"class":257},[240,4937,4938],{"class":242,"line":3652},[240,4939,4140],{"class":257},[240,4941,4942,4944,4947,4949,4952],{"class":242,"line":3681},[240,4943,4204],{"class":288},[240,4945,4946],{"class":257}," (num ",[240,4948,431],{"class":288},[240,4950,4951],{"class":264}," 1000",[240,4953,796],{"class":257},[240,4955,4956],{"class":242,"line":3686},[240,4957,312],{"class":257},[1826,4959,4960],{"start":261},[1829,4961,4962],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[231,4964,4966],{"className":2112,"code":4965,"language":2114,"meta":236,"style":236},"\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",[23,4967,4968,4973,5002,5006,5018,5022,5027,5038,5045,5049,5063,5067,5074,5078,5090,5099],{"__ignoreMap":236},[240,4969,4970],{"class":242,"line":243},[240,4971,4972],{"class":246},"\u002F\u002F从数字0-9打印\n",[240,4974,4975,4978,4980,4982,4985,4987,4989,4992,4994,4996,4998,5000],{"class":242,"line":250},[240,4976,4977],{"class":288},"for",[240,4979,789],{"class":257},[240,4981,2126],{"class":288},[240,4983,4984],{"class":257}," i",[240,4986,440],{"class":288},[240,4988,1274],{"class":264},[240,4990,4991],{"class":257},";i",[240,4993,431],{"class":288},[240,4995,2546],{"class":264},[240,4997,4991],{"class":257},[240,4999,4245],{"class":288},[240,5001,2129],{"class":257},[240,5003,5004],{"class":242,"line":261},[240,5005,3504],{"class":257},[240,5007,5008,5010,5012,5014,5016],{"class":242,"line":277},[240,5009,3509],{"class":257},[240,5011,3137],{"class":288},[240,5013,2541],{"class":257},[240,5015,3137],{"class":288},[240,5017,3159],{"class":257},[240,5019,5020],{"class":242,"line":294},[240,5021,312],{"class":257},[240,5023,5024],{"class":242,"line":309},[240,5025,5026],{"class":246},"\u002F\u002F上式可以进行拆分\n",[240,5028,5029,5031,5033,5035],{"class":242,"line":529},[240,5030,2126],{"class":288},[240,5032,4984],{"class":257},[240,5034,440],{"class":288},[240,5036,5037],{"class":264},"0\n",[240,5039,5040,5042],{"class":242,"line":549},[240,5041,4977],{"class":288},[240,5043,5044],{"class":257},"(;;;)\n",[240,5046,5047],{"class":242,"line":569},[240,5048,3504],{"class":257},[240,5050,5051,5054,5057,5059,5061],{"class":242,"line":589},[240,5052,5053],{"class":288},"    if",[240,5055,5056],{"class":257},"(i",[240,5058,3664],{"class":288},[240,5060,2546],{"class":264},[240,5062,2129],{"class":257},[240,5064,5065],{"class":242,"line":715},[240,5066,3983],{"class":257},[240,5068,5069,5072],{"class":242,"line":727},[240,5070,5071],{"class":288},"        break",[240,5073,274],{"class":257},[240,5075,5076],{"class":242,"line":1730},[240,5077,4140],{"class":257},[240,5079,5080,5082,5084,5086,5088],{"class":242,"line":3582},[240,5081,3509],{"class":257},[240,5083,3137],{"class":288},[240,5085,2541],{"class":257},[240,5087,3137],{"class":288},[240,5089,3159],{"class":257},[240,5091,5092,5095,5097],{"class":242,"line":3596},[240,5093,5094],{"class":257},"    i",[240,5096,4245],{"class":288},[240,5098,274],{"class":257},[240,5100,5101],{"class":242,"line":3601},[240,5102,312],{"class":257},[19,5104,5105],{},"小练习",[231,5107,5109],{"className":2112,"code":5108,"language":2114,"meta":236,"style":236},"#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",[23,5110,5111,5117,5127,5135,5139,5144,5149,5177,5181,5186,5191,5232,5236,5249,5253,5257,5261,5273,5277,5281],{"__ignoreMap":236},[240,5112,5113,5115],{"class":242,"line":243},[240,5114,3903],{"class":288},[240,5116,3906],{"class":443},[240,5118,5119,5121,5123,5125],{"class":242,"line":250},[240,5120,3911],{"class":288},[240,5122,3914],{"class":288},[240,5124,3917],{"class":436},[240,5126,274],{"class":257},[240,5128,5129,5131,5133],{"class":242,"line":261},[240,5130,2126],{"class":288},[240,5132,3926],{"class":436},[240,5134,3929],{"class":257},[240,5136,5137],{"class":242,"line":277},[240,5138,3504],{"class":257},[240,5140,5141],{"class":242,"line":294},[240,5142,5143],{"class":246},"    \u002F\u002F敲桌子案例\n",[240,5145,5146],{"class":242,"line":309},[240,5147,5148],{"class":246},"    \u002F\u002F1.先输出1-100的数字\n",[240,5150,5151,5154,5156,5158,5160,5162,5164,5167,5169,5171,5173,5175],{"class":242,"line":529},[240,5152,5153],{"class":288},"    for",[240,5155,789],{"class":257},[240,5157,2126],{"class":288},[240,5159,4984],{"class":257},[240,5161,440],{"class":288},[240,5163,1643],{"class":264},[240,5165,5166],{"class":257},"; i",[240,5168,3545],{"class":288},[240,5170,285],{"class":264},[240,5172,5166],{"class":257},[240,5174,4245],{"class":288},[240,5176,2129],{"class":257},[240,5178,5179],{"class":242,"line":549},[240,5180,3983],{"class":257},[240,5182,5183],{"class":242,"line":569},[240,5184,5185],{"class":246},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[240,5187,5188],{"class":242,"line":589},[240,5189,5190],{"class":246},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[240,5192,5193,5195,5197,5199,5201,5203,5205,5208,5210,5212,5214,5216,5218,5220,5222,5224,5226,5228,5230],{"class":242,"line":715},[240,5194,4450],{"class":288},[240,5196,5056],{"class":257},[240,5198,2429],{"class":288},[240,5200,2470],{"class":264},[240,5202,4901],{"class":288},[240,5204,1274],{"class":264},[240,5206,5207],{"class":288}," ||",[240,5209,4984],{"class":257},[240,5211,2429],{"class":288},[240,5213,2546],{"class":264},[240,5215,4901],{"class":288},[240,5217,2470],{"class":264},[240,5219,5207],{"class":288},[240,5221,4984],{"class":257},[240,5223,2683],{"class":288},[240,5225,2546],{"class":264},[240,5227,4901],{"class":288},[240,5229,2470],{"class":264},[240,5231,2129],{"class":257},[240,5233,5234],{"class":242,"line":727},[240,5235,4463],{"class":257},[240,5237,5238,5240,5242,5245,5247],{"class":242,"line":1730},[240,5239,4468],{"class":257},[240,5241,3137],{"class":288},[240,5243,5244],{"class":443},"\"敲桌子\"",[240,5246,3137],{"class":288},[240,5248,3159],{"class":257},[240,5250,5251],{"class":242,"line":3582},[240,5252,4482],{"class":257},[240,5254,5255],{"class":242,"line":3596},[240,5256,4523],{"class":288},[240,5258,5259],{"class":242,"line":3601},[240,5260,4463],{"class":257},[240,5262,5263,5265,5267,5269,5271],{"class":242,"line":3607},[240,5264,4468],{"class":257},[240,5266,3137],{"class":288},[240,5268,2541],{"class":257},[240,5270,3137],{"class":288},[240,5272,3159],{"class":257},[240,5274,5275],{"class":242,"line":3628},[240,5276,4482],{"class":257},[240,5278,5279],{"class":242,"line":3633},[240,5280,4140],{"class":257},[240,5282,5283],{"class":242,"line":3647},[240,5284,312],{"class":257},[19,5286,5287],{},"嵌套实现星图",[231,5289,5291],{"className":2112,"code":5290,"language":2114,"meta":236,"style":236},"#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",[23,5292,5293,5299,5309,5317,5321,5347,5351,5380,5384,5395,5399,5408,5412],{"__ignoreMap":236},[240,5294,5295,5297],{"class":242,"line":243},[240,5296,3903],{"class":288},[240,5298,3906],{"class":443},[240,5300,5301,5303,5305,5307],{"class":242,"line":250},[240,5302,3911],{"class":288},[240,5304,3914],{"class":288},[240,5306,3917],{"class":436},[240,5308,274],{"class":257},[240,5310,5311,5313,5315],{"class":242,"line":261},[240,5312,2126],{"class":288},[240,5314,3926],{"class":436},[240,5316,3929],{"class":257},[240,5318,5319],{"class":242,"line":277},[240,5320,3504],{"class":257},[240,5322,5323,5325,5327,5329,5331,5333,5335,5337,5339,5341,5343,5345],{"class":242,"line":294},[240,5324,5153],{"class":288},[240,5326,3612],{"class":257},[240,5328,2126],{"class":288},[240,5330,4984],{"class":257},[240,5332,440],{"class":288},[240,5334,1274],{"class":264},[240,5336,4991],{"class":257},[240,5338,431],{"class":288},[240,5340,2546],{"class":264},[240,5342,4991],{"class":257},[240,5344,4245],{"class":288},[240,5346,2129],{"class":257},[240,5348,5349],{"class":242,"line":309},[240,5350,3983],{"class":257},[240,5352,5353,5356,5358,5360,5363,5365,5367,5370,5372,5374,5376,5378],{"class":242,"line":529},[240,5354,5355],{"class":288},"        for",[240,5357,3612],{"class":257},[240,5359,2126],{"class":288},[240,5361,5362],{"class":257}," j",[240,5364,440],{"class":288},[240,5366,1274],{"class":264},[240,5368,5369],{"class":257},";j",[240,5371,431],{"class":288},[240,5373,2546],{"class":264},[240,5375,5369],{"class":257},[240,5377,4245],{"class":288},[240,5379,2129],{"class":257},[240,5381,5382],{"class":242,"line":549},[240,5383,4463],{"class":257},[240,5385,5386,5388,5390,5393],{"class":242,"line":569},[240,5387,4468],{"class":257},[240,5389,3137],{"class":288},[240,5391,5392],{"class":443},"\"*\"",[240,5394,274],{"class":257},[240,5396,5397],{"class":242,"line":589},[240,5398,4482],{"class":257},[240,5400,5401,5404,5406],{"class":242,"line":715},[240,5402,5403],{"class":257},"        cout",[240,5405,3137],{"class":288},[240,5407,3159],{"class":257},[240,5409,5410],{"class":242,"line":727},[240,5411,4140],{"class":257},[240,5413,5414],{"class":242,"line":1730},[240,5415,312],{"class":257},[19,5417,5418],{},"乘法口诀表",[231,5420,5422],{"className":2112,"code":5421,"language":2114,"meta":236,"style":236},"#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",[23,5423,5424,5430,5440,5448,5452,5478,5482,5507,5511,5551,5555,5563,5567],{"__ignoreMap":236},[240,5425,5426,5428],{"class":242,"line":243},[240,5427,3903],{"class":288},[240,5429,4287],{"class":443},[240,5431,5432,5434,5436,5438],{"class":242,"line":250},[240,5433,3911],{"class":288},[240,5435,3914],{"class":288},[240,5437,3917],{"class":436},[240,5439,274],{"class":257},[240,5441,5442,5444,5446],{"class":242,"line":261},[240,5443,2126],{"class":288},[240,5445,3926],{"class":436},[240,5447,3929],{"class":257},[240,5449,5450],{"class":242,"line":277},[240,5451,3504],{"class":257},[240,5453,5454,5456,5458,5460,5462,5464,5466,5468,5470,5472,5474,5476],{"class":242,"line":294},[240,5455,5153],{"class":288},[240,5457,789],{"class":257},[240,5459,2126],{"class":288},[240,5461,4984],{"class":257},[240,5463,440],{"class":288},[240,5465,1643],{"class":264},[240,5467,4991],{"class":257},[240,5469,431],{"class":288},[240,5471,2546],{"class":264},[240,5473,4991],{"class":257},[240,5475,4245],{"class":288},[240,5477,2129],{"class":257},[240,5479,5480],{"class":242,"line":309},[240,5481,3983],{"class":257},[240,5483,5484,5486,5488,5490,5492,5494,5496,5498,5500,5503,5505],{"class":242,"line":529},[240,5485,5355],{"class":288},[240,5487,789],{"class":257},[240,5489,2126],{"class":288},[240,5491,5362],{"class":257},[240,5493,440],{"class":288},[240,5495,1643],{"class":264},[240,5497,5369],{"class":257},[240,5499,3545],{"class":288},[240,5501,5502],{"class":257},"i;j",[240,5504,4245],{"class":288},[240,5506,2129],{"class":257},[240,5508,5509],{"class":242,"line":549},[240,5510,4463],{"class":257},[240,5512,5513,5515,5517,5519,5521,5523,5525,5527,5529,5532,5534,5536,5538,5540,5542,5545,5547,5549],{"class":242,"line":569},[240,5514,4468],{"class":257},[240,5516,3137],{"class":288},[240,5518,2566],{"class":257},[240,5520,3137],{"class":288},[240,5522,5392],{"class":443},[240,5524,3137],{"class":288},[240,5526,2541],{"class":257},[240,5528,3137],{"class":288},[240,5530,5531],{"class":443},"\"=\"",[240,5533,3137],{"class":288},[240,5535,2541],{"class":257},[240,5537,2554],{"class":288},[240,5539,2566],{"class":257},[240,5541,3137],{"class":288},[240,5543,5544],{"class":443},"'",[240,5546,3194],{"class":264},[240,5548,5544],{"class":443},[240,5550,274],{"class":257},[240,5552,5553],{"class":242,"line":589},[240,5554,4482],{"class":257},[240,5556,5557,5559,5561],{"class":242,"line":715},[240,5558,5403],{"class":257},[240,5560,3137],{"class":288},[240,5562,3159],{"class":257},[240,5564,5565],{"class":242,"line":727},[240,5566,4140],{"class":257},[240,5568,5569],{"class":242,"line":1730},[240,5570,312],{"class":257},[32,5572,5574],{"id":5573},"_163跳出语句","1.6.3跳出语句",[1826,5576,5577],{},[1829,5578,5579],{},"break语句\n作用：用于跳出选择结构或者循环结构",[19,5581,5582],{},"break使用时机：",[3100,5584,5585,5588,5591],{},[1829,5586,5587],{},"出现在switch条件语句中，作用是终止case并跳出switch",[1829,5589,5590],{},"出现在循环结构中，作用是跳出当前的循环结构",[1829,5592,5593],{},"出现在嵌套循环中，跳出最近的内层循环语句",[1826,5595,5596,5599],{"start":250},[1829,5597,5598],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[1829,5600,5601],{},"goto语句\n语法：goto 标记;",[19,5603,5604],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[231,5606,5608],{"className":2112,"code":5607,"language":2114,"meta":236,"style":236},"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",[23,5609,5610,5618,5622,5635,5645,5658,5671,5684,5692,5708],{"__ignoreMap":236},[240,5611,5612,5614,5616],{"class":242,"line":243},[240,5613,2126],{"class":288},[240,5615,3926],{"class":436},[240,5617,3929],{"class":257},[240,5619,5620],{"class":242,"line":250},[240,5621,3504],{"class":257},[240,5623,5624,5626,5628,5631,5633],{"class":242,"line":261},[240,5625,3509],{"class":257},[240,5627,3137],{"class":288},[240,5629,5630],{"class":443},"\"1\"",[240,5632,3137],{"class":288},[240,5634,3159],{"class":257},[240,5636,5637,5640,5643],{"class":242,"line":277},[240,5638,5639],{"class":288},"    goto",[240,5641,5642],{"class":436}," FLAG",[240,5644,274],{"class":257},[240,5646,5647,5649,5651,5654,5656],{"class":242,"line":294},[240,5648,3509],{"class":257},[240,5650,3137],{"class":288},[240,5652,5653],{"class":443},"\"2\"",[240,5655,3137],{"class":288},[240,5657,3159],{"class":257},[240,5659,5660,5662,5664,5667,5669],{"class":242,"line":309},[240,5661,3509],{"class":257},[240,5663,3137],{"class":288},[240,5665,5666],{"class":443},"\"3\"",[240,5668,3137],{"class":288},[240,5670,3159],{"class":257},[240,5672,5673,5675,5677,5680,5682],{"class":242,"line":529},[240,5674,3509],{"class":257},[240,5676,3137],{"class":288},[240,5678,5679],{"class":443},"\"4\"",[240,5681,3137],{"class":288},[240,5683,3159],{"class":257},[240,5685,5686,5689],{"class":242,"line":549},[240,5687,5688],{"class":436},"    FLAG",[240,5690,5691],{"class":257},":\n",[240,5693,5694,5696,5698,5701,5703,5705],{"class":242,"line":569},[240,5695,3509],{"class":257},[240,5697,3137],{"class":288},[240,5699,5700],{"class":443},"\"5\"",[240,5702,3137],{"class":288},[240,5704,3202],{"class":257},[240,5706,5707],{"class":246},"\u002F\u002F跳过了2,3,4,直接到5\n",[240,5709,5710],{"class":242,"line":589},[240,5711,312],{"class":257},[14,5713,5715],{"id":5714},"_17数组","1.7数组",[32,5717,5719],{"id":5718},"_171一维数组","1.7.1一维数组",[1826,5721,5722],{},[1829,5723,5724],{},"一维数组定义方式",[802,5726,5727,5737],{},[805,5728,5729],{},[808,5730,5731,5734],{},[811,5732,5733],{},"方式",[811,5735,5736],{},"注意事项",[819,5738,5739,5753,5763],{},[808,5740,5741,5747],{},[824,5742,5743,5744,2175],{},"数据类型 数组名",[240,5745,5746],{},"数组长度",[824,5748,5749,5750,5752],{},"这种方式是先定义再arr",[240,5751,2541],{},"赋值",[808,5754,5755,5760],{},[824,5756,5743,5757,5759],{},[240,5758,5746],{},"={值1,值2....};",[824,5761,5762],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[808,5764,5765,5769],{},[824,5766,5743,5767,5759],{},[240,5768],{},[824,5770,5771,5772,5774],{},"int arr",[240,5773],{},";这是不正确的，按照这样的方式定义必须有初始长度",[1826,5776,5777],{"start":250},[1829,5778,5779],{},"一维数组数组名\n用途：",[3100,5781,5782],{},[1829,5783,5784],{},"1.可以统计整个数组在内存中的长度：",[231,5786,5788],{"className":2112,"code":5787,"language":2114,"meta":236,"style":236},"sizeof(arr);\nsizeof(arr[0]);\n",[23,5789,5790,5797],{"__ignoreMap":236},[240,5791,5792,5794],{"class":242,"line":243},[240,5793,2121],{"class":288},[240,5795,5796],{"class":257},"(arr);\n",[240,5798,5799,5801,5804,5806],{"class":242,"line":250},[240,5800,2121],{"class":288},[240,5802,5803],{"class":257},"(arr[",[240,5805,1274],{"class":264},[240,5807,5808],{"class":257},"]);\n",[3100,5810,5811],{},[1829,5812,5813],{},"2.可以获取数组在内存中的首地址:",[231,5815,5817],{"className":2112,"code":5816,"language":2114,"meta":236,"style":236},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[23,5818,5819,5824,5837,5842],{"__ignoreMap":236},[240,5820,5821],{"class":242,"line":243},[240,5822,5823],{"class":246},"\u002F\u002F查看16进制的首地址\n",[240,5825,5826,5828,5830,5833,5835],{"class":242,"line":250},[240,5827,3329],{"class":257},[240,5829,3137],{"class":288},[240,5831,5832],{"class":257},"arr",[240,5834,3137],{"class":288},[240,5836,3159],{"class":257},[240,5838,5839],{"class":242,"line":261},[240,5840,5841],{"class":246},"\u002F\u002F看10进制数\n",[240,5843,5844,5846,5848,5850,5852,5854,5856,5859,5861,5863,5865],{"class":242,"line":277},[240,5845,3329],{"class":257},[240,5847,3137],{"class":288},[240,5849,789],{"class":257},[240,5851,2126],{"class":288},[240,5853,2529],{"class":257},[240,5855,2454],{"class":288},[240,5857,5858],{"class":257},"arr[",[240,5860,1274],{"class":264},[240,5862,3034],{"class":257},[240,5864,3137],{"class":288},[240,5866,3159],{"class":257},[19,5868,5869],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[3100,5871,5872],{},[1829,5873,5874],{},"1️⃣五只小猪称体重",[231,5876,5878],{"className":2112,"code":5877,"language":2114,"meta":236,"style":236},"#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",[23,5879,5880,5886,5896,5904,5908,5948,5961,5987,5991,6003,6007,6017,6021,6025,6038,6048],{"__ignoreMap":236},[240,5881,5882,5884],{"class":242,"line":243},[240,5883,3903],{"class":288},[240,5885,3906],{"class":443},[240,5887,5888,5890,5892,5894],{"class":242,"line":250},[240,5889,3911],{"class":288},[240,5891,3914],{"class":288},[240,5893,3917],{"class":436},[240,5895,274],{"class":257},[240,5897,5898,5900,5902],{"class":242,"line":261},[240,5899,2126],{"class":288},[240,5901,3926],{"class":436},[240,5903,3929],{"class":257},[240,5905,5906],{"class":242,"line":277},[240,5907,3504],{"class":257},[240,5909,5910,5912,5915,5917,5919,5921,5923,5926,5928,5931,5933,5935,5937,5940,5942,5945],{"class":242,"line":294},[240,5911,3938],{"class":288},[240,5913,5914],{"class":257}," arr[",[240,5916,1741],{"class":264},[240,5918,3034],{"class":257},[240,5920,440],{"class":288},[240,5922,2991],{"class":257},[240,5924,5925],{"class":264},"300",[240,5927,2479],{"class":257},[240,5929,5930],{"class":264},"350",[240,5932,2479],{"class":257},[240,5934,3676],{"class":264},[240,5936,2479],{"class":257},[240,5938,5939],{"class":264},"400",[240,5941,2479],{"class":257},[240,5943,5944],{"class":264},"250",[240,5946,5947],{"class":257},"};\n",[240,5949,5950,5952,5955,5957,5959],{"class":242,"line":309},[240,5951,3938],{"class":288},[240,5953,5954],{"class":257}," tmp",[240,5956,440],{"class":288},[240,5958,1274],{"class":264},[240,5960,274],{"class":257},[240,5962,5963,5965,5967,5969,5971,5973,5975,5977,5979,5981,5983,5985],{"class":242,"line":529},[240,5964,5153],{"class":288},[240,5966,3612],{"class":257},[240,5968,2126],{"class":288},[240,5970,4984],{"class":257},[240,5972,440],{"class":288},[240,5974,1274],{"class":264},[240,5976,4991],{"class":257},[240,5978,431],{"class":288},[240,5980,1741],{"class":264},[240,5982,4991],{"class":257},[240,5984,4245],{"class":288},[240,5986,2129],{"class":257},[240,5988,5989],{"class":242,"line":549},[240,5990,3983],{"class":257},[240,5992,5993,5995,5998,6000],{"class":242,"line":569},[240,5994,4450],{"class":288},[240,5996,5997],{"class":257},"(tmp",[240,5999,431],{"class":288},[240,6001,6002],{"class":257},"arr[i])\n",[240,6004,6005],{"class":242,"line":589},[240,6006,4463],{"class":257},[240,6008,6009,6012,6014],{"class":242,"line":715},[240,6010,6011],{"class":257},"            tmp",[240,6013,440],{"class":288},[240,6015,6016],{"class":257},"arr[i];\n",[240,6018,6019],{"class":242,"line":727},[240,6020,4482],{"class":257},[240,6022,6023],{"class":242,"line":1730},[240,6024,4140],{"class":257},[240,6026,6027,6029,6031,6034,6036],{"class":242,"line":3582},[240,6028,3509],{"class":257},[240,6030,3137],{"class":288},[240,6032,6033],{"class":257},"tmp",[240,6035,3137],{"class":288},[240,6037,3159],{"class":257},[240,6039,6040,6043,6046],{"class":242,"line":3596},[240,6041,6042],{"class":288},"    return",[240,6044,6045],{"class":264}," 0",[240,6047,274],{"class":257},[240,6049,6050],{"class":242,"line":3601},[240,6051,312],{"class":257},[3100,6053,6054],{},[1829,6055,6056],{},"2️⃣数组元素逆置",[231,6058,6060],{"className":2112,"code":6059,"language":2114,"meta":236,"style":236},"\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",[23,6061,6062,6067,6073,6083,6091,6095,6130,6146,6178,6191,6196,6201,6213,6223,6233,6238,6247,6257,6262,6267,6294,6298,6314,6318,6329,6338],{"__ignoreMap":236},[240,6063,6064],{"class":242,"line":243},[240,6065,6066],{"class":246},"\u002F\u002F元素逆置\n",[240,6068,6069,6071],{"class":242,"line":250},[240,6070,3903],{"class":288},[240,6072,3906],{"class":443},[240,6074,6075,6077,6079,6081],{"class":242,"line":261},[240,6076,3911],{"class":288},[240,6078,3914],{"class":288},[240,6080,3917],{"class":436},[240,6082,274],{"class":257},[240,6084,6085,6087,6089],{"class":242,"line":277},[240,6086,2126],{"class":288},[240,6088,3926],{"class":436},[240,6090,3929],{"class":257},[240,6092,6093],{"class":242,"line":294},[240,6094,3504],{"class":257},[240,6096,6097,6100,6102,6104,6106,6108,6110,6112,6114,6116,6118,6120,6122,6124,6126,6128],{"class":242,"line":309},[240,6098,6099],{"class":288},"   int",[240,6101,5914],{"class":257},[240,6103,1741],{"class":264},[240,6105,3034],{"class":257},[240,6107,440],{"class":288},[240,6109,2991],{"class":257},[240,6111,1643],{"class":264},[240,6113,2479],{"class":257},[240,6115,1668],{"class":264},[240,6117,2479],{"class":257},[240,6119,1692],{"class":264},[240,6121,2479],{"class":257},[240,6123,1716],{"class":264},[240,6125,2479],{"class":257},[240,6127,1741],{"class":264},[240,6129,5947],{"class":257},[240,6131,6132,6134,6137,6139,6141,6143],{"class":242,"line":529},[240,6133,6099],{"class":288},[240,6135,6136],{"class":257}," start",[240,6138,440],{"class":288},[240,6140,1274],{"class":264},[240,6142,2175],{"class":257},[240,6144,6145],{"class":246},"\u002F\u002F起始下标\n",[240,6147,6148,6150,6153,6156,6159,6162,6164,6166,6169,6171,6173,6175],{"class":242,"line":549},[240,6149,6099],{"class":288},[240,6151,6152],{"class":257}," end",[240,6154,6155],{"class":288},"=sizeof",[240,6157,6158],{"class":257},"(arr)",[240,6160,6161],{"class":288},"\u002Fsizeof",[240,6163,5803],{"class":257},[240,6165,1274],{"class":264},[240,6167,6168],{"class":257},"])",[240,6170,2631],{"class":288},[240,6172,1643],{"class":264},[240,6174,2175],{"class":257},[240,6176,6177],{"class":246},"\u002F\u002F结束下标\n",[240,6179,6180,6183,6186,6188],{"class":242,"line":569},[240,6181,6182],{"class":288},"   while",[240,6184,6185],{"class":257}," (start",[240,6187,431],{"class":288},[240,6189,6190],{"class":257},"end)\n",[240,6192,6193],{"class":242,"line":589},[240,6194,6195],{"class":257},"   {\n",[240,6197,6198],{"class":242,"line":715},[240,6199,6200],{"class":246},"    \u002F\u002F实现元素互换代码\n",[240,6202,6203,6205,6208,6210],{"class":242,"line":727},[240,6204,3938],{"class":288},[240,6206,6207],{"class":257}," temp",[240,6209,440],{"class":288},[240,6211,6212],{"class":257},"arr[start];\n",[240,6214,6215,6218,6220],{"class":242,"line":1730},[240,6216,6217],{"class":257},"    arr[start]",[240,6219,440],{"class":288},[240,6221,6222],{"class":257},"arr[end];\n",[240,6224,6225,6228,6230],{"class":242,"line":3582},[240,6226,6227],{"class":257},"    arr[end]",[240,6229,440],{"class":288},[240,6231,6232],{"class":257},"temp;\n",[240,6234,6235],{"class":242,"line":3596},[240,6236,6237],{"class":246},"    \u002F\u002F下标更新\n",[240,6239,6240,6243,6245],{"class":242,"line":3601},[240,6241,6242],{"class":257},"    start",[240,6244,4245],{"class":288},[240,6246,274],{"class":257},[240,6248,6249,6252,6255],{"class":242,"line":3607},[240,6250,6251],{"class":257},"    end",[240,6253,6254],{"class":288},"--",[240,6256,274],{"class":257},[240,6258,6259],{"class":242,"line":3628},[240,6260,6261],{"class":257},"   }\n",[240,6263,6264],{"class":242,"line":3633},[240,6265,6266],{"class":246},"   \u002F\u002F输出逆置后的数组\n",[240,6268,6269,6272,6274,6276,6278,6280,6282,6284,6286,6288,6290,6292],{"class":242,"line":3647},[240,6270,6271],{"class":288},"   for",[240,6273,3612],{"class":257},[240,6275,2126],{"class":288},[240,6277,4984],{"class":257},[240,6279,440],{"class":288},[240,6281,1274],{"class":264},[240,6283,4991],{"class":257},[240,6285,431],{"class":288},[240,6287,1741],{"class":264},[240,6289,4991],{"class":257},[240,6291,4245],{"class":288},[240,6293,2129],{"class":257},[240,6295,6296],{"class":242,"line":3652},[240,6297,6195],{"class":257},[240,6299,6300,6302,6304,6307,6309,6312],{"class":242,"line":3681},[240,6301,3509],{"class":257},[240,6303,3137],{"class":288},[240,6305,6306],{"class":257},"arr[i]",[240,6308,3137],{"class":288},[240,6310,6311],{"class":443},"\" \"",[240,6313,274],{"class":257},[240,6315,6316],{"class":242,"line":3686},[240,6317,6261],{"class":257},[240,6319,6320,6323,6325,6327],{"class":242,"line":3703},[240,6321,6322],{"class":436},"   system",[240,6324,789],{"class":257},[240,6326,4261],{"class":443},[240,6328,796],{"class":257},[240,6330,6331,6334,6336],{"class":242,"line":3708},[240,6332,6333],{"class":288},"   return",[240,6335,6045],{"class":264},[240,6337,274],{"class":257},[240,6339,6340],{"class":242,"line":3713},[240,6341,312],{"class":257},[3100,6343,6344],{},[1829,6345,6346],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[231,6348,6350],{"className":2112,"code":6349,"language":2114,"meta":236,"style":236},"\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",[23,6351,6352,6357,6363,6373,6381,6385,6437,6450,6476,6480,6494,6498,6503,6508,6538,6542,6547,6581,6585,6590,6610,6615,6627,6643,6658,6663,6667,6671,6684,6710,6714,6728,6732,6740],{"__ignoreMap":236},[240,6353,6354],{"class":242,"line":243},[240,6355,6356],{"class":246},"\u002F\u002F冒泡排序,升序\n",[240,6358,6359,6361],{"class":242,"line":250},[240,6360,3903],{"class":288},[240,6362,3906],{"class":443},[240,6364,6365,6367,6369,6371],{"class":242,"line":261},[240,6366,3911],{"class":288},[240,6368,3914],{"class":288},[240,6370,3917],{"class":436},[240,6372,274],{"class":257},[240,6374,6375,6377,6379],{"class":242,"line":277},[240,6376,2126],{"class":288},[240,6378,3926],{"class":436},[240,6380,3929],{"class":257},[240,6382,6383],{"class":242,"line":294},[240,6384,3504],{"class":257},[240,6386,6387,6389,6391,6393,6396,6398,6401,6403,6405,6407,6409,6411,6413,6415,6417,6419,6421,6423,6425,6427,6429,6431,6433,6435],{"class":242,"line":309},[240,6388,3938],{"class":288},[240,6390,5914],{"class":257},[240,6392,2520],{"class":264},[240,6394,6395],{"class":257},"] ",[240,6397,440],{"class":288},[240,6399,6400],{"class":257}," {",[240,6402,1716],{"class":264},[240,6404,2479],{"class":257},[240,6406,1668],{"class":264},[240,6408,2479],{"class":257},[240,6410,2496],{"class":264},[240,6412,2479],{"class":257},[240,6414,1274],{"class":264},[240,6416,2479],{"class":257},[240,6418,1741],{"class":264},[240,6420,2479],{"class":257},[240,6422,2470],{"class":264},[240,6424,2479],{"class":257},[240,6426,1643],{"class":264},[240,6428,2479],{"class":257},[240,6430,1692],{"class":264},[240,6432,2479],{"class":257},[240,6434,2520],{"class":264},[240,6436,5947],{"class":257},[240,6438,6439,6441,6443,6446,6448],{"class":242,"line":529},[240,6440,3509],{"class":257},[240,6442,3137],{"class":288},[240,6444,6445],{"class":443},"\"排序前：\"",[240,6447,3137],{"class":288},[240,6449,3159],{"class":257},[240,6451,6452,6454,6456,6458,6460,6462,6464,6466,6468,6470,6472,6474],{"class":242,"line":549},[240,6453,5153],{"class":288},[240,6455,3612],{"class":257},[240,6457,2126],{"class":288},[240,6459,4984],{"class":257},[240,6461,440],{"class":288},[240,6463,1274],{"class":264},[240,6465,4991],{"class":257},[240,6467,431],{"class":288},[240,6469,2520],{"class":264},[240,6471,4991],{"class":257},[240,6473,4245],{"class":288},[240,6475,2129],{"class":257},[240,6477,6478],{"class":242,"line":569},[240,6479,3983],{"class":257},[240,6481,6482,6484,6486,6488,6490,6492],{"class":242,"line":589},[240,6483,5403],{"class":257},[240,6485,3137],{"class":288},[240,6487,6306],{"class":257},[240,6489,3137],{"class":288},[240,6491,6311],{"class":443},[240,6493,274],{"class":257},[240,6495,6496],{"class":242,"line":715},[240,6497,4140],{"class":257},[240,6499,6500],{"class":242,"line":727},[240,6501,6502],{"class":246},"    \u002F\u002F开始冒泡排序\n",[240,6504,6505],{"class":242,"line":1730},[240,6506,6507],{"class":246},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[240,6509,6510,6512,6514,6516,6518,6520,6522,6524,6526,6528,6530,6532,6534,6536],{"class":242,"line":3582},[240,6511,5153],{"class":288},[240,6513,3612],{"class":257},[240,6515,2126],{"class":288},[240,6517,4984],{"class":257},[240,6519,440],{"class":288},[240,6521,1274],{"class":264},[240,6523,4991],{"class":257},[240,6525,431],{"class":288},[240,6527,2520],{"class":264},[240,6529,2631],{"class":288},[240,6531,1643],{"class":264},[240,6533,4991],{"class":257},[240,6535,4245],{"class":288},[240,6537,2129],{"class":257},[240,6539,6540],{"class":242,"line":3596},[240,6541,3983],{"class":257},[240,6543,6544],{"class":242,"line":3601},[240,6545,6546],{"class":246},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[240,6548,6549,6551,6553,6555,6557,6559,6561,6563,6565,6567,6569,6571,6573,6575,6577,6579],{"class":242,"line":3607},[240,6550,5355],{"class":288},[240,6552,3612],{"class":257},[240,6554,2126],{"class":288},[240,6556,5362],{"class":257},[240,6558,440],{"class":288},[240,6560,1274],{"class":264},[240,6562,5369],{"class":257},[240,6564,431],{"class":288},[240,6566,2520],{"class":264},[240,6568,2631],{"class":288},[240,6570,2541],{"class":257},[240,6572,2631],{"class":288},[240,6574,1643],{"class":264},[240,6576,5369],{"class":257},[240,6578,4245],{"class":288},[240,6580,2129],{"class":257},[240,6582,6583],{"class":242,"line":3628},[240,6584,4463],{"class":257},[240,6586,6587],{"class":242,"line":3633},[240,6588,6589],{"class":246},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[240,6591,6592,6595,6598,6600,6603,6605,6607],{"class":242,"line":3647},[240,6593,6594],{"class":288},"            if",[240,6596,6597],{"class":257},"(arr[j]",[240,6599,3053],{"class":288},[240,6601,6602],{"class":257},"arr[j",[240,6604,2580],{"class":288},[240,6606,1643],{"class":264},[240,6608,6609],{"class":257},"])\n",[240,6611,6612],{"class":242,"line":3652},[240,6613,6614],{"class":257},"            {\n",[240,6616,6617,6620,6622,6624],{"class":242,"line":3681},[240,6618,6619],{"class":288},"                int",[240,6621,6207],{"class":257},[240,6623,440],{"class":288},[240,6625,6626],{"class":257},"arr[j];\n",[240,6628,6629,6632,6634,6636,6638,6640],{"class":242,"line":3686},[240,6630,6631],{"class":257},"                arr[j]",[240,6633,440],{"class":288},[240,6635,6602],{"class":257},[240,6637,2580],{"class":288},[240,6639,1643],{"class":264},[240,6641,6642],{"class":257},"];\n",[240,6644,6645,6648,6650,6652,6654,6656],{"class":242,"line":3703},[240,6646,6647],{"class":257},"                arr[j",[240,6649,2580],{"class":288},[240,6651,1643],{"class":264},[240,6653,3034],{"class":257},[240,6655,440],{"class":288},[240,6657,6232],{"class":257},[240,6659,6660],{"class":242,"line":3708},[240,6661,6662],{"class":257},"            }\n",[240,6664,6665],{"class":242,"line":3713},[240,6666,4482],{"class":257},[240,6668,6669],{"class":242,"line":3718},[240,6670,4140],{"class":257},[240,6672,6673,6675,6677,6680,6682],{"class":242,"line":3732},[240,6674,3509],{"class":257},[240,6676,3137],{"class":288},[240,6678,6679],{"class":443},"\"排序后：\"",[240,6681,3137],{"class":288},[240,6683,3159],{"class":257},[240,6685,6686,6688,6690,6692,6694,6696,6698,6700,6702,6704,6706,6708],{"class":242,"line":3737},[240,6687,5153],{"class":288},[240,6689,3612],{"class":257},[240,6691,2126],{"class":288},[240,6693,4984],{"class":257},[240,6695,440],{"class":288},[240,6697,1274],{"class":264},[240,6699,4991],{"class":257},[240,6701,431],{"class":288},[240,6703,2520],{"class":264},[240,6705,4991],{"class":257},[240,6707,4245],{"class":288},[240,6709,2129],{"class":257},[240,6711,6712],{"class":242,"line":4530},[240,6713,3983],{"class":257},[240,6715,6716,6718,6720,6722,6724,6726],{"class":242,"line":4544},[240,6717,5403],{"class":257},[240,6719,3137],{"class":288},[240,6721,6306],{"class":257},[240,6723,3137],{"class":288},[240,6725,6311],{"class":443},[240,6727,274],{"class":257},[240,6729,6730],{"class":242,"line":4552},[240,6731,4140],{"class":257},[240,6733,6734,6736,6738],{"class":242,"line":4557},[240,6735,6042],{"class":288},[240,6737,6045],{"class":264},[240,6739,274],{"class":257},[240,6741,6742],{"class":242,"line":4563},[240,6743,312],{"class":257},[32,6745,6747],{"id":6746},"_172二维数组","1.7.2二维数组",[1826,6749,6750],{},[1829,6751,6752],{},"二维数组的四种定义方式",[802,6754,6755,6764],{},[805,6756,6757],{},[808,6758,6759,6762],{},[811,6760,6761],{},"序号",[811,6763,5733],{},[819,6765,6766,6776,6785,6794,6803],{},[808,6767,6768,6770],{},[824,6769,1643],{},[824,6771,6772,6773,2175],{},"数据类型 数组名[行数]",[240,6774,6775],{},"列数",[808,6777,6778,6780],{},[824,6779,1668],{},[824,6781,6772,6782,6784],{},[240,6783,6775],{},"={ {数据1,数据2}，{数据3，数据4}... }",[808,6786,6787,6789],{},[824,6788,1692],{},[824,6790,6772,6791,6793],{},[240,6792,6775],{},"={数据1,数据2,数据3...}",[808,6795,6796,6798],{},[824,6797,1716],{},[824,6799,6800,6801,6793],{},"数据类型 数组名[]",[240,6802,6775],{},[808,6804,6805,6808],{},[824,6806,6807],{},"注意：不能只省略列数",[824,6809],{},[1826,6811,6812],{"start":250},[1829,6813,6814],{},"二维数组数组名",[3100,6816,6817,6820],{},[1829,6818,6819],{},"1.查看二维数组所占内存空间",[1829,6821,6822],{},"2.获取二维数组首地址",[19,6824,6825],{},"已知二维数组，求二维数组的行数与列数",[231,6827,6829],{"className":2112,"code":6828,"language":2114,"meta":236,"style":236},"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",[23,6830,6831,6839,6843,6861,6865,6883,6899,6904,6929,6962],{"__ignoreMap":236},[240,6832,6833,6835,6837],{"class":242,"line":243},[240,6834,2126],{"class":288},[240,6836,3926],{"class":436},[240,6838,3929],{"class":257},[240,6840,6841],{"class":242,"line":250},[240,6842,3504],{"class":257},[240,6844,6845,6847,6849,6851,6854,6856,6858],{"class":242,"line":261},[240,6846,3938],{"class":288},[240,6848,5914],{"class":257},[240,6850,1668],{"class":264},[240,6852,6853],{"class":257},"][",[240,6855,1692],{"class":264},[240,6857,3034],{"class":257},[240,6859,6860],{"class":288},"=\n",[240,6862,6863],{"class":242,"line":277},[240,6864,3983],{"class":257},[240,6866,6867,6870,6872,6874,6876,6878,6880],{"class":242,"line":294},[240,6868,6869],{"class":257},"        {",[240,6871,1643],{"class":264},[240,6873,2479],{"class":257},[240,6875,1668],{"class":264},[240,6877,2479],{"class":257},[240,6879,1692],{"class":264},[240,6881,6882],{"class":257},"},\n",[240,6884,6885,6887,6889,6891,6893,6895,6897],{"class":242,"line":309},[240,6886,6869],{"class":257},[240,6888,1716],{"class":264},[240,6890,2479],{"class":257},[240,6892,1741],{"class":264},[240,6894,2479],{"class":257},[240,6896,2445],{"class":264},[240,6898,312],{"class":257},[240,6900,6901],{"class":242,"line":529},[240,6902,6903],{"class":257},"    };\n",[240,6905,6906,6908,6910,6913,6915,6917,6919,6921,6923,6925,6927],{"class":242,"line":549},[240,6907,3509],{"class":257},[240,6909,3137],{"class":288},[240,6911,6912],{"class":443},"\"二维数组的行数\"",[240,6914,3332],{"class":288},[240,6916,6158],{"class":257},[240,6918,6161],{"class":288},[240,6920,5803],{"class":257},[240,6922,1274],{"class":264},[240,6924,6168],{"class":257},[240,6926,3137],{"class":288},[240,6928,3159],{"class":257},[240,6930,6931,6933,6935,6938,6940,6942,6944,6946,6948,6950,6952,6954,6956,6958,6960],{"class":242,"line":569},[240,6932,3509],{"class":257},[240,6934,3137],{"class":288},[240,6936,6937],{"class":443},"\"二维数组的列数\"",[240,6939,3332],{"class":288},[240,6941,5803],{"class":257},[240,6943,1274],{"class":264},[240,6945,6168],{"class":257},[240,6947,6161],{"class":288},[240,6949,5803],{"class":257},[240,6951,1274],{"class":264},[240,6953,6853],{"class":257},[240,6955,1274],{"class":264},[240,6957,6168],{"class":257},[240,6959,3137],{"class":288},[240,6961,3159],{"class":257},[240,6963,6964],{"class":242,"line":589},[240,6965,312],{"class":257},[19,6967,6968],{},"查看二维数组首地址",[231,6970,6972],{"className":2112,"code":6971,"language":2114,"meta":236,"style":236},"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",[23,6973,6974,6991,7017,7042],{"__ignoreMap":236},[240,6975,6976,6978,6980,6983,6985,6987,6989],{"class":242,"line":243},[240,6977,3329],{"class":257},[240,6979,3137],{"class":288},[240,6981,6982],{"class":443},"\"二维数组首地址：\"",[240,6984,3137],{"class":288},[240,6986,5832],{"class":257},[240,6988,3137],{"class":288},[240,6990,3159],{"class":257},[240,6992,6993,6995,6997,7000,7002,7004,7006,7009,7011,7013,7015],{"class":242,"line":250},[240,6994,3329],{"class":257},[240,6996,3137],{"class":288},[240,6998,6999],{"class":443},"\"二维数组第一行的首地址：\"",[240,7001,3137],{"class":288},[240,7003,789],{"class":257},[240,7005,2126],{"class":288},[240,7007,7008],{"class":257},")arr[",[240,7010,1274],{"class":264},[240,7012,3034],{"class":257},[240,7014,3137],{"class":288},[240,7016,3159],{"class":257},[240,7018,7019,7021,7023,7026,7028,7030,7032,7034,7036,7038,7040],{"class":242,"line":261},[240,7020,3329],{"class":257},[240,7022,3137],{"class":288},[240,7024,7025],{"class":443},"\"二维数组第二行的首地址：\"",[240,7027,3137],{"class":288},[240,7029,789],{"class":257},[240,7031,2126],{"class":288},[240,7033,7008],{"class":257},[240,7035,1643],{"class":264},[240,7037,3034],{"class":257},[240,7039,3137],{"class":288},[240,7041,3159],{"class":257},[240,7043,7044,7046,7048,7051,7053,7055,7057,7059,7061,7063,7065,7067,7069,7071,7073,7075],{"class":242,"line":277},[240,7045,3329],{"class":257},[240,7047,3137],{"class":288},[240,7049,7050],{"class":443},"\"二维数组第一个元素的首地址:\"",[240,7052,3137],{"class":288},[240,7054,789],{"class":257},[240,7056,2126],{"class":288},[240,7058,2529],{"class":257},[240,7060,2454],{"class":288},[240,7062,5858],{"class":257},[240,7064,1274],{"class":264},[240,7066,6853],{"class":257},[240,7068,1274],{"class":264},[240,7070,3034],{"class":257},[240,7072,3137],{"class":288},[240,7074,3202],{"class":257},[240,7076,7077],{"class":246},"\u002F\u002F对于数，要加取址符\n",[2019,7079,7080],{},"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":236,"searchDepth":250,"depth":250,"links":7082},[7083,7084,7085,7093,7094,7100,7105],{"id":2067,"depth":250,"text":2068},{"id":2074,"depth":250,"text":2075},{"id":2089,"depth":250,"text":2090,"children":7086},[7087,7088,7089,7090,7091,7092],{"id":2093,"depth":261,"text":2094},{"id":2139,"depth":261,"text":2140},{"id":2202,"depth":261,"text":2203},{"id":3118,"depth":261,"text":3119},{"id":3208,"depth":261,"text":3209},{"id":3303,"depth":261,"text":3304},{"id":3345,"depth":250,"text":3346},{"id":3412,"depth":250,"text":3413,"children":7095},[7096,7097,7098,7099],{"id":3416,"depth":261,"text":3417},{"id":3437,"depth":261,"text":3438},{"id":3446,"depth":261,"text":3447},{"id":3455,"depth":261,"text":3456},{"id":3464,"depth":250,"text":3465,"children":7101},[7102,7103,7104],{"id":3468,"depth":261,"text":3469},{"id":4158,"depth":261,"text":4159},{"id":5573,"depth":261,"text":5574},{"id":5714,"depth":250,"text":5715,"children":7106},[7107,7108],{"id":5718,"depth":261,"text":5719},{"id":6746,"depth":261,"text":6747},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":2059,"description":236},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":7115,"title":7116,"body":7117,"description":236,"extension":2049,"meta":8216,"navigation":2051,"path":8217,"seo":8218,"stem":8219,"__hash__":8220},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":7118,"toc":8208},[7119,7122,7126,7134,7142,7145,7210,7214,7217,7293,7297,7300,7303,7306,7519,7523,7528,7592,7597,7664,7669,7760,7763,7868,7872,7875,7881,8025,8029,8032,8046,8049,8094,8097,8205],[10,7120,7116],{"id":7121},"_2函数",[14,7123,7125],{"id":7124},"_21函数概述","2.1函数概述",[1826,7127,7128,7131],{},[1829,7129,7130],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[1829,7132,7133],{},"语法：",[231,7135,7140],{"className":7136,"code":7138,"language":7139,"meta":236},[7137],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[23,7141,7138],{"__ignoreMap":236},[19,7143,7144],{},"小案例",[231,7146,7148],{"className":2112,"code":7147,"language":2114,"meta":236,"style":236},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[23,7149,7150,7155,7178,7182,7199,7206],{"__ignoreMap":236},[240,7151,7152],{"class":242,"line":243},[240,7153,7154],{"class":246},"\u002F\u002Fnum1,num2形参\n",[240,7156,7157,7159,7162,7164,7166,7169,7171,7173,7176],{"class":242,"line":250},[240,7158,2126],{"class":288},[240,7160,7161],{"class":436}," add",[240,7163,789],{"class":257},[240,7165,2126],{"class":288},[240,7167,7168],{"class":792}," num1",[240,7170,2479],{"class":257},[240,7172,2126],{"class":288},[240,7174,7175],{"class":792}," num2",[240,7177,2129],{"class":257},[240,7179,7180],{"class":242,"line":261},[240,7181,3504],{"class":257},[240,7183,7184,7186,7189,7191,7194,7196],{"class":242,"line":277},[240,7185,3938],{"class":288},[240,7187,7188],{"class":257}," sum",[240,7190,440],{"class":288},[240,7192,7193],{"class":257},"num1",[240,7195,2580],{"class":288},[240,7197,7198],{"class":257},"num2;\n",[240,7200,7201,7203],{"class":242,"line":294},[240,7202,6042],{"class":288},[240,7204,7205],{"class":257}," sum;\n",[240,7207,7208],{"class":242,"line":309},[240,7209,312],{"class":257},[14,7211,7213],{"id":7212},"_22函数调用","2.2函数调用",[19,7215,7216],{},"调用刚刚写的求和函数",[231,7218,7220],{"className":2112,"code":7219,"language":2114,"meta":236,"style":236},"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",[23,7221,7222,7230,7234,7239,7251,7263,7272,7277,7289],{"__ignoreMap":236},[240,7223,7224,7226,7228],{"class":242,"line":243},[240,7225,2126],{"class":288},[240,7227,3926],{"class":436},[240,7229,3929],{"class":257},[240,7231,7232],{"class":242,"line":250},[240,7233,3504],{"class":257},[240,7235,7236],{"class":242,"line":261},[240,7237,7238],{"class":246},"    \u002F\u002Fa,b实参\n",[240,7240,7241,7243,7245,7247,7249],{"class":242,"line":277},[240,7242,3938],{"class":288},[240,7244,609],{"class":257},[240,7246,440],{"class":288},[240,7248,1274],{"class":264},[240,7250,274],{"class":257},[240,7252,7253,7255,7257,7259,7261],{"class":242,"line":294},[240,7254,3938],{"class":288},[240,7256,4785],{"class":257},[240,7258,440],{"class":288},[240,7260,1274],{"class":264},[240,7262,274],{"class":257},[240,7264,7265,7267,7269],{"class":242,"line":309},[240,7266,3965],{"class":257},[240,7268,3388],{"class":288},[240,7270,7271],{"class":257},"a,b;\n",[240,7273,7274],{"class":242,"line":529},[240,7275,7276],{"class":246},"    \u002F\u002F调用函数时，实参值传给了形参\n",[240,7278,7279,7281,7283,7286],{"class":242,"line":549},[240,7280,3509],{"class":257},[240,7282,3137],{"class":288},[240,7284,7285],{"class":436},"add",[240,7287,7288],{"class":257},"(a,b);\n",[240,7290,7291],{"class":242,"line":569},[240,7292,312],{"class":257},[14,7294,7296],{"id":7295},"_23值传递","2.3值传递",[19,7298,7299],{},"值传递就是函数调用时实参将数值传给形参",[19,7301,7302],{},"值传递时，如果形参发生任何改变，不会影响实参",[19,7304,7305],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[231,7307,7309],{"className":2112,"code":7308,"language":2114,"meta":236,"style":236},"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",[23,7310,7311,7333,7337,7350,7367,7385,7396,7405,7414,7427,7443,7459,7468,7472,7480,7484,7496,7508,7515],{"__ignoreMap":236},[240,7312,7313,7316,7319,7321,7323,7325,7327,7329,7331],{"class":242,"line":243},[240,7314,7315],{"class":288},"void",[240,7317,7318],{"class":436}," swap",[240,7320,789],{"class":257},[240,7322,2126],{"class":288},[240,7324,7168],{"class":792},[240,7326,2479],{"class":257},[240,7328,2126],{"class":288},[240,7330,7175],{"class":792},[240,7332,2129],{"class":257},[240,7334,7335],{"class":242,"line":250},[240,7336,3504],{"class":257},[240,7338,7339,7341,7343,7346,7348],{"class":242,"line":261},[240,7340,3509],{"class":257},[240,7342,3137],{"class":288},[240,7344,7345],{"class":443},"\"交换前：\"",[240,7347,3137],{"class":288},[240,7349,3159],{"class":257},[240,7351,7352,7354,7356,7359,7361,7363,7365],{"class":242,"line":277},[240,7353,3509],{"class":257},[240,7355,3137],{"class":288},[240,7357,7358],{"class":443},"\"num1=\"",[240,7360,3137],{"class":288},[240,7362,7193],{"class":257},[240,7364,3137],{"class":288},[240,7366,3159],{"class":257},[240,7368,7369,7371,7373,7376,7378,7381,7383],{"class":242,"line":294},[240,7370,3509],{"class":257},[240,7372,3137],{"class":288},[240,7374,7375],{"class":443},"\"num2=\"",[240,7377,3137],{"class":288},[240,7379,7380],{"class":257},"num2",[240,7382,3137],{"class":288},[240,7384,3159],{"class":257},[240,7386,7387,7389,7391,7393],{"class":242,"line":309},[240,7388,3938],{"class":288},[240,7390,6207],{"class":257},[240,7392,440],{"class":288},[240,7394,7395],{"class":257},"num1;\n",[240,7397,7398,7401,7403],{"class":242,"line":529},[240,7399,7400],{"class":257},"    num1",[240,7402,440],{"class":288},[240,7404,7198],{"class":257},[240,7406,7407,7410,7412],{"class":242,"line":549},[240,7408,7409],{"class":257},"    num2",[240,7411,440],{"class":288},[240,7413,6232],{"class":257},[240,7415,7416,7418,7420,7423,7425],{"class":242,"line":569},[240,7417,3509],{"class":257},[240,7419,3137],{"class":288},[240,7421,7422],{"class":443},"\"交换后：\"",[240,7424,3137],{"class":288},[240,7426,3159],{"class":257},[240,7428,7429,7431,7433,7435,7437,7439,7441],{"class":242,"line":589},[240,7430,3509],{"class":257},[240,7432,3137],{"class":288},[240,7434,7358],{"class":443},[240,7436,3137],{"class":288},[240,7438,7193],{"class":257},[240,7440,3137],{"class":288},[240,7442,3159],{"class":257},[240,7444,7445,7447,7449,7451,7453,7455,7457],{"class":242,"line":715},[240,7446,3509],{"class":257},[240,7448,3137],{"class":288},[240,7450,7375],{"class":443},[240,7452,3137],{"class":288},[240,7454,7380],{"class":257},[240,7456,3137],{"class":288},[240,7458,3159],{"class":257},[240,7460,7461,7463,7465],{"class":242,"line":727},[240,7462,6042],{"class":288},[240,7464,2175],{"class":257},[240,7466,7467],{"class":246},"\u002F\u002F或者不写\n",[240,7469,7470],{"class":242,"line":1730},[240,7471,312],{"class":257},[240,7473,7474,7476,7478],{"class":242,"line":3582},[240,7475,2126],{"class":288},[240,7477,3926],{"class":436},[240,7479,3929],{"class":257},[240,7481,7482],{"class":242,"line":3596},[240,7483,3504],{"class":257},[240,7485,7486,7488,7490,7492,7494],{"class":242,"line":3601},[240,7487,3938],{"class":288},[240,7489,609],{"class":257},[240,7491,440],{"class":288},[240,7493,2546],{"class":264},[240,7495,274],{"class":257},[240,7497,7498,7500,7502,7504,7506],{"class":242,"line":3607},[240,7499,3938],{"class":288},[240,7501,4785],{"class":257},[240,7503,440],{"class":288},[240,7505,1000],{"class":264},[240,7507,274],{"class":257},[240,7509,7510,7513],{"class":242,"line":3628},[240,7511,7512],{"class":436},"    swap",[240,7514,7288],{"class":257},[240,7516,7517],{"class":242,"line":3633},[240,7518,312],{"class":257},[14,7520,7522],{"id":7521},"_24函数的常见形式","2.4函数的常见形式",[1826,7524,7525],{},[1829,7526,7527],{},"无参无返",[231,7529,7531],{"className":2112,"code":7530,"language":2114,"meta":236,"style":236},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[23,7532,7533,7542,7546,7559,7563,7571,7575,7580,7588],{"__ignoreMap":236},[240,7534,7535,7537,7540],{"class":242,"line":243},[240,7536,7315],{"class":288},[240,7538,7539],{"class":436}," test01",[240,7541,3929],{"class":257},[240,7543,7544],{"class":242,"line":250},[240,7545,3504],{"class":257},[240,7547,7548,7550,7552,7555,7557],{"class":242,"line":261},[240,7549,3509],{"class":257},[240,7551,3137],{"class":288},[240,7553,7554],{"class":443},"\"你好\"",[240,7556,3137],{"class":288},[240,7558,3159],{"class":257},[240,7560,7561],{"class":242,"line":277},[240,7562,312],{"class":257},[240,7564,7565,7567,7569],{"class":242,"line":294},[240,7566,2126],{"class":288},[240,7568,3926],{"class":436},[240,7570,3929],{"class":257},[240,7572,7573],{"class":242,"line":309},[240,7574,3504],{"class":257},[240,7576,7577],{"class":242,"line":529},[240,7578,7579],{"class":246},"    \u002F\u002F函数调用\n",[240,7581,7582,7585],{"class":242,"line":549},[240,7583,7584],{"class":436},"    test01",[240,7586,7587],{"class":257},"();\n",[240,7589,7590],{"class":242,"line":569},[240,7591,312],{"class":257},[1826,7593,7594],{"start":250},[1829,7595,7596],{},"有参无返",[231,7598,7600],{"className":2112,"code":7599,"language":2114,"meta":236,"style":236},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[23,7601,7602,7617,7621,7633,7637,7645,7649,7660],{"__ignoreMap":236},[240,7603,7604,7606,7609,7611,7613,7615],{"class":242,"line":243},[240,7605,7315],{"class":288},[240,7607,7608],{"class":436}," test02",[240,7610,789],{"class":257},[240,7612,2126],{"class":288},[240,7614,609],{"class":792},[240,7616,2129],{"class":257},[240,7618,7619],{"class":242,"line":250},[240,7620,3504],{"class":257},[240,7622,7623,7625,7627,7629,7631],{"class":242,"line":261},[240,7624,3509],{"class":257},[240,7626,3137],{"class":288},[240,7628,7554],{"class":443},[240,7630,3137],{"class":288},[240,7632,3159],{"class":257},[240,7634,7635],{"class":242,"line":277},[240,7636,312],{"class":257},[240,7638,7639,7641,7643],{"class":242,"line":294},[240,7640,2126],{"class":288},[240,7642,3926],{"class":436},[240,7644,3929],{"class":257},[240,7646,7647],{"class":242,"line":309},[240,7648,3504],{"class":257},[240,7650,7651,7654,7656,7658],{"class":242,"line":529},[240,7652,7653],{"class":436},"    test02",[240,7655,789],{"class":257},[240,7657,285],{"class":264},[240,7659,796],{"class":257},[240,7661,7662],{"class":242,"line":549},[240,7663,312],{"class":257},[1826,7665,7666],{"start":261},[1829,7667,7668],{},"无参有返",[231,7670,7672],{"className":2112,"code":7671,"language":2114,"meta":236,"style":236},"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",[23,7673,7674,7683,7687,7699,7708,7712,7720,7724,7737,7756],{"__ignoreMap":236},[240,7675,7676,7678,7681],{"class":242,"line":243},[240,7677,2126],{"class":288},[240,7679,7680],{"class":436}," test03",[240,7682,3929],{"class":257},[240,7684,7685],{"class":242,"line":250},[240,7686,3504],{"class":257},[240,7688,7689,7691,7693,7695,7697],{"class":242,"line":261},[240,7690,3509],{"class":257},[240,7692,3137],{"class":288},[240,7694,7554],{"class":443},[240,7696,3137],{"class":288},[240,7698,3159],{"class":257},[240,7700,7701,7703,7706],{"class":242,"line":277},[240,7702,6042],{"class":288},[240,7704,7705],{"class":264}," 100",[240,7707,274],{"class":257},[240,7709,7710],{"class":242,"line":294},[240,7711,312],{"class":257},[240,7713,7714,7716,7718],{"class":242,"line":309},[240,7715,2126],{"class":288},[240,7717,3926],{"class":436},[240,7719,3929],{"class":257},[240,7721,7722],{"class":242,"line":529},[240,7723,3504],{"class":257},[240,7725,7726,7728,7730,7732,7735],{"class":242,"line":549},[240,7727,3938],{"class":288},[240,7729,7168],{"class":257},[240,7731,440],{"class":288},[240,7733,7734],{"class":436},"test03",[240,7736,7587],{"class":257},[240,7738,7739,7741,7743,7745,7747,7749,7751,7753],{"class":242,"line":569},[240,7740,3509],{"class":257},[240,7742,3137],{"class":288},[240,7744,7358],{"class":443},[240,7746,3137],{"class":288},[240,7748,7193],{"class":257},[240,7750,3137],{"class":288},[240,7752,3202],{"class":257},[240,7754,7755],{"class":246}," \u002F\u002F100\n",[240,7757,7758],{"class":242,"line":589},[240,7759,312],{"class":257},[19,7761,7762],{},"4.有参有返",[231,7764,7766],{"className":2112,"code":7765,"language":2114,"meta":236,"style":236},"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",[23,7767,7768,7783,7787,7800,7806,7810,7819,7823,7835,7849,7864],{"__ignoreMap":236},[240,7769,7770,7772,7775,7777,7779,7781],{"class":242,"line":243},[240,7771,2126],{"class":288},[240,7773,7774],{"class":436}," test04",[240,7776,789],{"class":257},[240,7778,2126],{"class":288},[240,7780,609],{"class":792},[240,7782,2129],{"class":257},[240,7784,7785],{"class":242,"line":250},[240,7786,3504],{"class":257},[240,7788,7789,7791,7793,7796,7798],{"class":242,"line":261},[240,7790,3509],{"class":257},[240,7792,3137],{"class":288},[240,7794,7795],{"class":443},"\"hello\"",[240,7797,3137],{"class":288},[240,7799,3159],{"class":257},[240,7801,7802,7804],{"class":242,"line":277},[240,7803,6042],{"class":288},[240,7805,3391],{"class":257},[240,7807,7808],{"class":242,"line":294},[240,7809,312],{"class":257},[240,7811,7812,7814,7817],{"class":242,"line":309},[240,7813,2126],{"class":288},[240,7815,7816],{"class":436}," mian",[240,7818,3929],{"class":257},[240,7820,7821],{"class":242,"line":529},[240,7822,3504],{"class":257},[240,7824,7825,7827,7829,7831,7833],{"class":242,"line":549},[240,7826,3938],{"class":288},[240,7828,4785],{"class":257},[240,7830,440],{"class":288},[240,7832,1643],{"class":264},[240,7834,274],{"class":257},[240,7836,7837,7839,7841,7843,7846],{"class":242,"line":569},[240,7838,3938],{"class":288},[240,7840,4801],{"class":257},[240,7842,440],{"class":288},[240,7844,7845],{"class":436},"test04",[240,7847,7848],{"class":257},"(b);\n",[240,7850,7851,7853,7855,7857,7859,7861],{"class":242,"line":589},[240,7852,3509],{"class":257},[240,7854,3137],{"class":288},[240,7856,2392],{"class":257},[240,7858,3137],{"class":288},[240,7860,3202],{"class":257},[240,7862,7863],{"class":246}," \u002F\u002F1\n",[240,7865,7866],{"class":242,"line":715},[240,7867,312],{"class":257},[14,7869,7871],{"id":7870},"_25函数的声明","2.5函数的声明",[19,7873,7874],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[19,7876,7877,7878],{},"函数的",[68,7879,7880],{},"声明可以多次，但是函数的定义只能有一次",[231,7882,7884],{"className":2112,"code":7883,"language":2114,"meta":236,"style":236},"\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",[23,7885,7886,7891,7896,7921,7930,7934,7946,7958,7974,7978,7998,8002,8021],{"__ignoreMap":236},[240,7887,7888],{"class":242,"line":243},[240,7889,7890],{"class":246},"\u002F\u002F函数声明\n",[240,7892,7893],{"class":242,"line":250},[240,7894,7895],{"class":246},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[240,7897,7898,7900,7903,7905,7907,7909,7911,7913,7915,7918],{"class":242,"line":261},[240,7899,2126],{"class":288},[240,7901,7902],{"class":436}," max",[240,7904,789],{"class":257},[240,7906,2126],{"class":288},[240,7908,609],{"class":792},[240,7910,2479],{"class":257},[240,7912,2126],{"class":288},[240,7914,4785],{"class":792},[240,7916,7917],{"class":257},");",[240,7919,7920],{"class":246},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[240,7922,7923,7925,7927],{"class":242,"line":277},[240,7924,2126],{"class":288},[240,7926,3926],{"class":436},[240,7928,7929],{"class":257},"() \n",[240,7931,7932],{"class":242,"line":294},[240,7933,3504],{"class":257},[240,7935,7936,7938,7940,7942,7944],{"class":242,"line":309},[240,7937,3938],{"class":288},[240,7939,609],{"class":257},[240,7941,440],{"class":288},[240,7943,2546],{"class":264},[240,7945,274],{"class":257},[240,7947,7948,7950,7952,7954,7956],{"class":242,"line":529},[240,7949,3938],{"class":288},[240,7951,4785],{"class":257},[240,7953,440],{"class":288},[240,7955,1000],{"class":264},[240,7957,274],{"class":257},[240,7959,7960,7962,7964,7967,7970,7972],{"class":242,"line":549},[240,7961,3509],{"class":257},[240,7963,3137],{"class":288},[240,7965,7966],{"class":436},"max",[240,7968,7969],{"class":257},"(a,b)",[240,7971,3137],{"class":288},[240,7973,3159],{"class":257},[240,7975,7976],{"class":242,"line":569},[240,7977,312],{"class":257},[240,7979,7980,7982,7984,7986,7988,7990,7992,7994,7996],{"class":242,"line":589},[240,7981,2126],{"class":288},[240,7983,7902],{"class":436},[240,7985,789],{"class":257},[240,7987,2126],{"class":288},[240,7989,609],{"class":792},[240,7991,2479],{"class":257},[240,7993,2126],{"class":288},[240,7995,4785],{"class":792},[240,7997,2129],{"class":257},[240,7999,8000],{"class":242,"line":715},[240,8001,3504],{"class":257},[240,8003,8004,8006,8008,8010,8012,8014,8016,8018],{"class":242,"line":727},[240,8005,6042],{"class":288},[240,8007,609],{"class":257},[240,8009,3053],{"class":288},[240,8011,2367],{"class":257},[240,8013,3079],{"class":288},[240,8015,254],{"class":257},[240,8017,2954],{"class":288},[240,8019,8020],{"class":257},"b;\n",[240,8022,8023],{"class":242,"line":1730},[240,8024,312],{"class":257},[14,8026,8028],{"id":8027},"_26函数的分文件编写","2.6函数的分文件编写",[19,8030,8031],{},"4个步骤：",[3100,8033,8034,8037,8040,8043],{},[1829,8035,8036],{},"1.创建后缀名为.h的头文件",[1829,8038,8039],{},"2.创建后缀名为.cpp的源文件",[1829,8041,8042],{},"3.在头文件中写函数的定义",[1829,8044,8045],{},"4.在源文件中写函数的定义\n示例：",[19,8047,8048],{},"头文件：swap.h",[231,8050,8052],{"className":2112,"code":8051,"language":2114,"meta":236,"style":236},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[23,8053,8054,8060,8070,8074],{"__ignoreMap":236},[240,8055,8056,8058],{"class":242,"line":243},[240,8057,3903],{"class":288},[240,8059,3906],{"class":443},[240,8061,8062,8064,8066,8068],{"class":242,"line":250},[240,8063,3911],{"class":288},[240,8065,3914],{"class":288},[240,8067,3917],{"class":436},[240,8069,274],{"class":257},[240,8071,8072],{"class":242,"line":261},[240,8073,7890],{"class":246},[240,8075,8076,8078,8080,8082,8084,8086,8088,8090,8092],{"class":242,"line":277},[240,8077,7315],{"class":288},[240,8079,7318],{"class":436},[240,8081,789],{"class":257},[240,8083,2126],{"class":288},[240,8085,609],{"class":792},[240,8087,2479],{"class":257},[240,8089,2126],{"class":288},[240,8091,4785],{"class":792},[240,8093,796],{"class":257},[19,8095,8096],{},"源文件：swap.cpp",[231,8098,8100],{"className":2112,"code":8099,"language":2114,"meta":236,"style":236},"#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",[23,8101,8102,8109,8114,8134,8138,8149,8158,8167,8184,8201],{"__ignoreMap":236},[240,8103,8104,8106],{"class":242,"line":243},[240,8105,3903],{"class":288},[240,8107,8108],{"class":443}," \"swap.h\"\n",[240,8110,8111],{"class":242,"line":250},[240,8112,8113],{"class":246},"\u002F\u002F函数的定义\n",[240,8115,8116,8118,8120,8122,8124,8126,8128,8130,8132],{"class":242,"line":261},[240,8117,7315],{"class":288},[240,8119,7318],{"class":436},[240,8121,789],{"class":257},[240,8123,2126],{"class":288},[240,8125,609],{"class":792},[240,8127,2479],{"class":257},[240,8129,2126],{"class":288},[240,8131,4785],{"class":792},[240,8133,2129],{"class":257},[240,8135,8136],{"class":242,"line":277},[240,8137,3504],{"class":257},[240,8139,8140,8142,8144,8146],{"class":242,"line":294},[240,8141,3938],{"class":288},[240,8143,6207],{"class":257},[240,8145,440],{"class":288},[240,8147,8148],{"class":257},"a;\n",[240,8150,8151,8154,8156],{"class":242,"line":309},[240,8152,8153],{"class":257},"    a",[240,8155,440],{"class":288},[240,8157,8020],{"class":257},[240,8159,8160,8163,8165],{"class":242,"line":529},[240,8161,8162],{"class":257},"    b",[240,8164,440],{"class":288},[240,8166,6232],{"class":257},[240,8168,8169,8171,8173,8176,8178,8180,8182],{"class":242,"line":549},[240,8170,3509],{"class":257},[240,8172,3137],{"class":288},[240,8174,8175],{"class":443},"\"a=\"",[240,8177,3137],{"class":288},[240,8179,254],{"class":257},[240,8181,3137],{"class":288},[240,8183,3159],{"class":257},[240,8185,8186,8188,8190,8193,8195,8197,8199],{"class":242,"line":569},[240,8187,3509],{"class":257},[240,8189,3137],{"class":288},[240,8191,8192],{"class":443},"\"b=\"",[240,8194,3137],{"class":288},[240,8196,2367],{"class":257},[240,8198,3137],{"class":288},[240,8200,3159],{"class":257},[240,8202,8203],{"class":242,"line":589},[240,8204,312],{"class":257},[2019,8206,8207],{},"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":236,"searchDepth":250,"depth":250,"links":8209},[8210,8211,8212,8213,8214,8215],{"id":7124,"depth":250,"text":7125},{"id":7212,"depth":250,"text":7213},{"id":7295,"depth":250,"text":7296},{"id":7521,"depth":250,"text":7522},{"id":7870,"depth":250,"text":7871},{"id":8027,"depth":250,"text":8028},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":7116,"description":236},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":8222,"title":8223,"body":8224,"description":8231,"extension":2049,"meta":9636,"navigation":2051,"path":9637,"seo":9638,"stem":9639,"__hash__":9640},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":8225,"toc":9626},[8226,8229,8232,8236,8398,8402,8405,8408,8411,8414,8554,8558,8561,8564,8567,8632,8636,8641,8708,8711,8715,8718,8729,8734,8754,8757,8762,8781,8784,8788,8807,8810,8814,9049,9053,9056,9059,9062,9224,9227,9231,9234,9240,9623],[10,8227,8223],{"id":8228},"_3指针",[19,8230,8231],{},"通过指针保存一个地址，指针就是个地址",[14,8233,8235],{"id":8234},"_31定义指针","3.1定义指针",[231,8237,8239],{"className":2112,"code":8238,"language":2114,"meta":236,"style":236},"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",[23,8240,8241,8249,8253,8258,8270,8275,8283,8293,8311,8331,8335,8340,8345,8350,8364,8380,8394],{"__ignoreMap":236},[240,8242,8243,8245,8247],{"class":242,"line":243},[240,8244,2126],{"class":288},[240,8246,3926],{"class":436},[240,8248,3929],{"class":257},[240,8250,8251],{"class":242,"line":250},[240,8252,3504],{"class":257},[240,8254,8255],{"class":242,"line":261},[240,8256,8257],{"class":246},"    \u002F\u002F1.定义指针\n",[240,8259,8260,8262,8264,8266,8268],{"class":242,"line":277},[240,8261,3938],{"class":288},[240,8263,609],{"class":257},[240,8265,440],{"class":288},[240,8267,2546],{"class":264},[240,8269,274],{"class":257},[240,8271,8272],{"class":242,"line":294},[240,8273,8274],{"class":246},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[240,8276,8277,8280],{"class":242,"line":309},[240,8278,8279],{"class":288},"    int*",[240,8281,8282],{"class":257},"p;\n",[240,8284,8285,8288,8291],{"class":242,"line":529},[240,8286,8287],{"class":257},"    p",[240,8289,8290],{"class":288},"=&",[240,8292,8148],{"class":257},[240,8294,8295,8297,8299,8302,8305,8307,8309],{"class":242,"line":549},[240,8296,3509],{"class":257},[240,8298,3137],{"class":288},[240,8300,8301],{"class":443},"\"a的地址为：\"",[240,8303,8304],{"class":288},"\u003C\u003C&",[240,8306,254],{"class":257},[240,8308,3137],{"class":288},[240,8310,3159],{"class":257},[240,8312,8313,8315,8317,8320,8322,8324,8326,8328],{"class":242,"line":569},[240,8314,3509],{"class":257},[240,8316,3137],{"class":288},[240,8318,8319],{"class":443},"\"指针p为：\"",[240,8321,3137],{"class":288},[240,8323,19],{"class":257},[240,8325,3137],{"class":288},[240,8327,3202],{"class":257},[240,8329,8330],{"class":246},"\u002F\u002F指针p表示的就是a的地址\n",[240,8332,8333],{"class":242,"line":589},[240,8334,4353],{"emptyLinePlaceholder":2051},[240,8336,8337],{"class":242,"line":715},[240,8338,8339],{"class":246},"    \u002F\u002F2.使用指针\n",[240,8341,8342],{"class":242,"line":727},[240,8343,8344],{"class":246},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[240,8346,8347],{"class":242,"line":1730},[240,8348,8349],{"class":246},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[240,8351,8352,8355,8357,8359,8362],{"class":242,"line":3582},[240,8353,8354],{"class":288},"    *",[240,8356,19],{"class":257},[240,8358,440],{"class":288},[240,8360,8361],{"class":264},"1000",[240,8363,274],{"class":257},[240,8365,8366,8368,8371,8373,8375,8377],{"class":242,"line":3596},[240,8367,3509],{"class":257},[240,8369,8370],{"class":288},"\u003C\u003C*",[240,8372,19],{"class":257},[240,8374,3137],{"class":288},[240,8376,3202],{"class":257},[240,8378,8379],{"class":246},"\u002F\u002F1000\n",[240,8381,8382,8384,8386,8388,8390,8392],{"class":242,"line":3601},[240,8383,3509],{"class":257},[240,8385,3137],{"class":288},[240,8387,254],{"class":257},[240,8389,3137],{"class":288},[240,8391,3202],{"class":257},[240,8393,8379],{"class":246},[240,8395,8396],{"class":242,"line":3607},[240,8397,312],{"class":257},[14,8399,8401],{"id":8400},"_32指针所占的内存空间","3.2指针所占的内存空间",[19,8403,8404],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[19,8406,8407],{},"在32位操作系统下：占用4个字节空间",[19,8409,8410],{},"在64位操作系统下：占用8个字节空间",[19,8412,8413],{},"上方是不管啥数据类型的",[231,8415,8417],{"className":2112,"code":8416,"language":2114,"meta":236,"style":236},"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",[23,8418,8419,8427,8431,8436,8448,8453,8458,8463,8476,8498,8524,8550],{"__ignoreMap":236},[240,8420,8421,8423,8425],{"class":242,"line":243},[240,8422,2126],{"class":288},[240,8424,3926],{"class":436},[240,8426,3929],{"class":257},[240,8428,8429],{"class":242,"line":250},[240,8430,3504],{"class":257},[240,8432,8433],{"class":242,"line":261},[240,8434,8435],{"class":246},"    \u002F\u002F指针所占内存空间\n",[240,8437,8438,8440,8442,8444,8446],{"class":242,"line":277},[240,8439,3938],{"class":288},[240,8441,609],{"class":257},[240,8443,440],{"class":288},[240,8445,2546],{"class":264},[240,8447,274],{"class":257},[240,8449,8450],{"class":242,"line":294},[240,8451,8452],{"class":246},"    \u002F\u002Fint *p;\n",[240,8454,8455],{"class":242,"line":309},[240,8456,8457],{"class":246},"    \u002F\u002Fp=&a;\n",[240,8459,8460],{"class":242,"line":529},[240,8461,8462],{"class":246},"    \u002F\u002F上述可以写为以下：\n",[240,8464,8465,8467,8470,8472,8474],{"class":242,"line":549},[240,8466,3938],{"class":288},[240,8468,8469],{"class":288}," *",[240,8471,19],{"class":257},[240,8473,8290],{"class":288},[240,8475,8148],{"class":257},[240,8477,8478,8481,8483,8486,8488,8491,8493,8495],{"class":242,"line":569},[240,8479,8480],{"class":257},"    cout ",[240,8482,3137],{"class":288},[240,8484,8485],{"class":443},"\"sizeof(int *)\"",[240,8487,3332],{"class":288},[240,8489,8490],{"class":257},"(p)",[240,8492,3137],{"class":288},[240,8494,3202],{"class":257},[240,8496,8497],{"class":246},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[240,8499,8500,8502,8504,8506,8508,8510,8512,8514,8516,8518,8521],{"class":242,"line":589},[240,8501,8480],{"class":257},[240,8503,3137],{"class":288},[240,8505,8485],{"class":443},[240,8507,3332],{"class":288},[240,8509,789],{"class":257},[240,8511,2126],{"class":288},[240,8513,8469],{"class":288},[240,8515,2529],{"class":257},[240,8517,3137],{"class":288},[240,8519,8520],{"class":257},"endl",[240,8522,8523],{"class":246},"  \u002F\u002F4字节(32位的话)\n",[240,8525,8526,8528,8530,8533,8535,8537,8539,8541,8543,8545,8547],{"class":242,"line":715},[240,8527,8480],{"class":257},[240,8529,3137],{"class":288},[240,8531,8532],{"class":443},"\"sizeof(char *)\"",[240,8534,3332],{"class":288},[240,8536,789],{"class":257},[240,8538,2213],{"class":288},[240,8540,8469],{"class":288},[240,8542,2529],{"class":257},[240,8544,3137],{"class":288},[240,8546,3202],{"class":257},[240,8548,8549],{"class":246}," \u002F\u002F4字节(32位的话)\n",[240,8551,8552],{"class":242,"line":727},[240,8553,312],{"class":257},[14,8555,8557],{"id":8556},"_33空指针","3.3空指针",[19,8559,8560],{},"空指针：指针变量指向内存中编号为0的空间",[19,8562,8563],{},"用途：初始化指针变量",[19,8565,8566],{},"注意：空指针指向的内存是不可以访问的",[231,8568,8570],{"className":2112,"code":8569,"language":2114,"meta":236,"style":236},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[23,8571,8572,8580,8584,8589,8603,8608,8623,8628],{"__ignoreMap":236},[240,8573,8574,8576,8578],{"class":242,"line":243},[240,8575,2126],{"class":288},[240,8577,3926],{"class":436},[240,8579,3929],{"class":257},[240,8581,8582],{"class":242,"line":250},[240,8583,3504],{"class":257},[240,8585,8586],{"class":242,"line":261},[240,8587,8588],{"class":246},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[240,8590,8591,8593,8595,8597,8599,8601],{"class":242,"line":277},[240,8592,3938],{"class":288},[240,8594,8469],{"class":288},[240,8596,19],{"class":257},[240,8598,440],{"class":288},[240,8600,4345],{"class":264},[240,8602,274],{"class":257},[240,8604,8605],{"class":242,"line":294},[240,8606,8607],{"class":246},"    \u002F\u002F2.空指针不能进行访问\n",[240,8609,8610,8612,8614,8616,8618,8620],{"class":242,"line":309},[240,8611,8354],{"class":288},[240,8613,19],{"class":257},[240,8615,440],{"class":288},[240,8617,285],{"class":264},[240,8619,2175],{"class":257},[240,8621,8622],{"class":246},"\u002F\u002F直接报错，压根不能访问\n",[240,8624,8625],{"class":242,"line":529},[240,8626,8627],{"class":246},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[240,8629,8630],{"class":242,"line":549},[240,8631,312],{"class":257},[14,8633,8635],{"id":8634},"_34野指针","3.4野指针",[19,8637,8638],{},[68,8639,8640],{},"指针变量指向非法的内存空间",[231,8642,8644],{"className":2112,"code":8643,"language":2114,"meta":236,"style":236},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[23,8645,8646,8654,8658,8687,8692,8704],{"__ignoreMap":236},[240,8647,8648,8650,8652],{"class":242,"line":243},[240,8649,2126],{"class":288},[240,8651,3926],{"class":436},[240,8653,3929],{"class":257},[240,8655,8656],{"class":242,"line":250},[240,8657,3504],{"class":257},[240,8659,8660,8662,8664,8666,8668,8670,8672,8674,8676,8679,8682,8684],{"class":242,"line":261},[240,8661,3938],{"class":288},[240,8663,8469],{"class":288},[240,8665,19],{"class":257},[240,8667,440],{"class":288},[240,8669,789],{"class":257},[240,8671,2126],{"class":288},[240,8673,8469],{"class":288},[240,8675,2529],{"class":257},[240,8677,8678],{"class":288},"0x",[240,8680,8681],{"class":264},"1100",[240,8683,2175],{"class":257},[240,8685,8686],{"class":246}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[240,8688,8689],{"class":242,"line":277},[240,8690,8691],{"class":246},"    \u002F\u002F访问野指针报错\n",[240,8693,8694,8696,8698,8700,8702],{"class":242,"line":294},[240,8695,3509],{"class":257},[240,8697,8370],{"class":288},[240,8699,19],{"class":257},[240,8701,3137],{"class":288},[240,8703,3159],{"class":257},[240,8705,8706],{"class":242,"line":309},[240,8707,312],{"class":257},[19,8709,8710],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[14,8712,8714],{"id":8713},"_35const修饰指针","3.5const修饰指针",[19,8716,8717],{},"三种情况：",[3100,8719,8720,8723,8726],{},[1829,8721,8722],{},"const修饰指针 常量指针",[1829,8724,8725],{},"const修饰常量 指针常量",[1829,8727,8728],{},"const即修饰指针，又修饰常量",[1826,8730,8731],{},[1829,8732,8733],{},"常量指针",[231,8735,8737],{"className":2112,"code":8736,"language":2114,"meta":236,"style":236},"const int *p=&a;\n",[23,8738,8739],{"__ignoreMap":236},[240,8740,8741,8744,8746,8748,8750,8752],{"class":242,"line":243},[240,8742,8743],{"class":288},"const",[240,8745,4335],{"class":288},[240,8747,8469],{"class":288},[240,8749,19],{"class":257},[240,8751,8290],{"class":288},[240,8753,8148],{"class":257},[19,8755,8756],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[1826,8758,8759],{"start":250},[1829,8760,8761],{},"指针常量",[231,8763,8765],{"className":2112,"code":8764,"language":2114,"meta":236,"style":236},"int *const p=&a;\n",[23,8766,8767],{"__ignoreMap":236},[240,8768,8769,8771,8774,8777,8779],{"class":242,"line":243},[240,8770,2126],{"class":288},[240,8772,8773],{"class":288}," *const",[240,8775,8776],{"class":257}," p",[240,8778,8290],{"class":288},[240,8780,8148],{"class":257},[19,8782,8783],{},"指针的指向不可以改，指针指向的值可以改",[1826,8785,8786],{"start":261},[1829,8787,8728],{},[231,8789,8791],{"className":2112,"code":8790,"language":2114,"meta":236,"style":236},"const int *const p=&a;\n",[23,8792,8793],{"__ignoreMap":236},[240,8794,8795,8797,8799,8801,8803,8805],{"class":242,"line":243},[240,8796,8743],{"class":288},[240,8798,4335],{"class":288},[240,8800,8773],{"class":288},[240,8802,8776],{"class":257},[240,8804,8290],{"class":288},[240,8806,8148],{"class":257},[19,8808,8809],{},"指针的指向和指针指向的值都不可以改变",[14,8811,8813],{"id":8812},"_36指针和数组","3.6指针和数组",[231,8815,8817],{"className":2112,"code":8816,"language":2114,"meta":236,"style":236},"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",[23,8818,8819,8827,8831,8836,8890,8911,8927,8943,8954,8971,8976,8990,9016,9020,9032,9041,9045],{"__ignoreMap":236},[240,8820,8821,8823,8825],{"class":242,"line":243},[240,8822,2126],{"class":288},[240,8824,3926],{"class":436},[240,8826,3929],{"class":257},[240,8828,8829],{"class":242,"line":250},[240,8830,3504],{"class":257},[240,8832,8833],{"class":242,"line":261},[240,8834,8835],{"class":246},"    \u002F\u002F利用指针访问数组中的元素\n",[240,8837,8838,8840,8842,8844,8846,8848,8850,8852,8854,8856,8858,8860,8862,8864,8866,8868,8870,8872,8874,8876,8878,8880,8882,8884,8886,8888],{"class":242,"line":277},[240,8839,3938],{"class":288},[240,8841,5914],{"class":257},[240,8843,2546],{"class":264},[240,8845,3034],{"class":257},[240,8847,440],{"class":288},[240,8849,2991],{"class":257},[240,8851,1643],{"class":264},[240,8853,2479],{"class":257},[240,8855,1668],{"class":264},[240,8857,2479],{"class":257},[240,8859,1692],{"class":264},[240,8861,2479],{"class":257},[240,8863,1716],{"class":264},[240,8865,2479],{"class":257},[240,8867,1741],{"class":264},[240,8869,2479],{"class":257},[240,8871,2445],{"class":264},[240,8873,2479],{"class":257},[240,8875,2470],{"class":264},[240,8877,2479],{"class":257},[240,8879,2496],{"class":264},[240,8881,2479],{"class":257},[240,8883,2520],{"class":264},[240,8885,2479],{"class":257},[240,8887,2546],{"class":264},[240,8889,5947],{"class":257},[240,8891,8892,8894,8896,8899,8901,8903,8905,8907,8909],{"class":242,"line":294},[240,8893,3509],{"class":257},[240,8895,3137],{"class":288},[240,8897,8898],{"class":443},"\"数组的第一个元素为：\"",[240,8900,3137],{"class":288},[240,8902,5858],{"class":257},[240,8904,1274],{"class":264},[240,8906,3034],{"class":257},[240,8908,3137],{"class":288},[240,8910,3159],{"class":257},[240,8912,8913,8915,8917,8919,8921,8924],{"class":242,"line":309},[240,8914,3938],{"class":288},[240,8916,8469],{"class":288},[240,8918,19],{"class":257},[240,8920,440],{"class":288},[240,8922,8923],{"class":257},"arr;",[240,8925,8926],{"class":246},"\u002F\u002F注意数才要加取地址符号&\n",[240,8928,8929,8931,8933,8935,8937,8939,8941],{"class":242,"line":529},[240,8930,3509],{"class":257},[240,8932,3137],{"class":288},[240,8934,8898],{"class":443},[240,8936,8370],{"class":288},[240,8938,19],{"class":257},[240,8940,3137],{"class":288},[240,8942,3159],{"class":257},[240,8944,8945,8947,8949,8951],{"class":242,"line":549},[240,8946,8287],{"class":257},[240,8948,4245],{"class":288},[240,8950,2175],{"class":257},[240,8952,8953],{"class":246}," \u002F\u002F让指针向后偏移4个字节\n",[240,8955,8956,8958,8960,8963,8965,8967,8969],{"class":242,"line":569},[240,8957,3509],{"class":257},[240,8959,3137],{"class":288},[240,8961,8962],{"class":443},"\"数组的第二个元素为：\"",[240,8964,8370],{"class":288},[240,8966,19],{"class":257},[240,8968,3137],{"class":288},[240,8970,3159],{"class":257},[240,8972,8973],{"class":242,"line":589},[240,8974,8975],{"class":246},"    \u002F\u002F利用指针遍历数组\n",[240,8977,8978,8980,8982,8985,8987],{"class":242,"line":715},[240,8979,3938],{"class":288},[240,8981,8469],{"class":288},[240,8983,8984],{"class":257},"p2",[240,8986,440],{"class":288},[240,8988,8989],{"class":257},"arr;\n",[240,8991,8992,8994,8996,8998,9000,9002,9004,9006,9008,9010,9012,9014],{"class":242,"line":727},[240,8993,5153],{"class":288},[240,8995,3612],{"class":257},[240,8997,2126],{"class":288},[240,8999,4984],{"class":257},[240,9001,440],{"class":288},[240,9003,1274],{"class":264},[240,9005,4991],{"class":257},[240,9007,431],{"class":288},[240,9009,2546],{"class":264},[240,9011,4991],{"class":257},[240,9013,4245],{"class":288},[240,9015,2129],{"class":257},[240,9017,9018],{"class":242,"line":1730},[240,9019,3983],{"class":257},[240,9021,9022,9024,9026,9028,9030],{"class":242,"line":3582},[240,9023,5403],{"class":257},[240,9025,8370],{"class":288},[240,9027,8984],{"class":257},[240,9029,3137],{"class":288},[240,9031,3159],{"class":257},[240,9033,9034,9037,9039],{"class":242,"line":3596},[240,9035,9036],{"class":257},"        p2",[240,9038,4245],{"class":288},[240,9040,274],{"class":257},[240,9042,9043],{"class":242,"line":3601},[240,9044,4140],{"class":257},[240,9046,9047],{"class":242,"line":3607},[240,9048,312],{"class":257},[14,9050,9052],{"id":9051},"_37指针和函数","3.7指针和函数",[19,9054,9055],{},"利用指针做函数参数，可以修改实参的值",[19,9057,9058],{},"值传递：只改变形参，不改变实参",[19,9060,9061],{},"地址传递：",[231,9063,9065],{"className":2112,"code":9064,"language":2114,"meta":236,"style":236},"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",[23,9066,9067,9092,9096,9108,9119,9129,9133,9141,9145,9157,9169,9174,9190,9205,9220],{"__ignoreMap":236},[240,9068,9069,9071,9073,9075,9077,9079,9082,9084,9086,9088,9090],{"class":242,"line":243},[240,9070,7315],{"class":288},[240,9072,7318],{"class":436},[240,9074,789],{"class":257},[240,9076,2126],{"class":288},[240,9078,8469],{"class":288},[240,9080,9081],{"class":792},"p1",[240,9083,2479],{"class":257},[240,9085,2126],{"class":288},[240,9087,8469],{"class":288},[240,9089,8984],{"class":792},[240,9091,2129],{"class":257},[240,9093,9094],{"class":242,"line":250},[240,9095,3504],{"class":257},[240,9097,9098,9100,9102,9105],{"class":242,"line":261},[240,9099,3938],{"class":288},[240,9101,6207],{"class":257},[240,9103,9104],{"class":288},"=*",[240,9106,9107],{"class":257},"p1;\n",[240,9109,9110,9112,9114,9116],{"class":242,"line":277},[240,9111,8354],{"class":288},[240,9113,9081],{"class":257},[240,9115,9104],{"class":288},[240,9117,9118],{"class":257},"p2;\n",[240,9120,9121,9123,9125,9127],{"class":242,"line":294},[240,9122,8354],{"class":288},[240,9124,8984],{"class":257},[240,9126,440],{"class":288},[240,9128,6232],{"class":257},[240,9130,9131],{"class":242,"line":309},[240,9132,312],{"class":257},[240,9134,9135,9137,9139],{"class":242,"line":529},[240,9136,2126],{"class":288},[240,9138,3926],{"class":436},[240,9140,3929],{"class":257},[240,9142,9143],{"class":242,"line":549},[240,9144,3504],{"class":257},[240,9146,9147,9149,9151,9153,9155],{"class":242,"line":569},[240,9148,3938],{"class":288},[240,9150,609],{"class":257},[240,9152,440],{"class":288},[240,9154,2546],{"class":264},[240,9156,274],{"class":257},[240,9158,9159,9161,9163,9165,9167],{"class":242,"line":589},[240,9160,3938],{"class":288},[240,9162,4785],{"class":257},[240,9164,440],{"class":288},[240,9166,1000],{"class":264},[240,9168,274],{"class":257},[240,9170,9171],{"class":242,"line":715},[240,9172,9173],{"class":246},"    \u002F\u002F地址传递\n",[240,9175,9176,9178,9180,9182,9185,9187],{"class":242,"line":727},[240,9177,7512],{"class":436},[240,9179,789],{"class":257},[240,9181,2454],{"class":288},[240,9183,9184],{"class":257},"a,",[240,9186,2454],{"class":288},[240,9188,9189],{"class":257},"b);\n",[240,9191,9192,9194,9196,9198,9200,9202],{"class":242,"line":1730},[240,9193,3509],{"class":257},[240,9195,3137],{"class":288},[240,9197,254],{"class":257},[240,9199,3137],{"class":288},[240,9201,3202],{"class":257},[240,9203,9204],{"class":246},"\u002F\u002F20\n",[240,9206,9207,9209,9211,9213,9215,9217],{"class":242,"line":3582},[240,9208,3509],{"class":257},[240,9210,3137],{"class":288},[240,9212,2367],{"class":257},[240,9214,3137],{"class":288},[240,9216,3202],{"class":257},[240,9218,9219],{"class":246},"\u002F\u002F10\n",[240,9221,9222],{"class":242,"line":3596},[240,9223,312],{"class":257},[19,9225,9226],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[14,9228,9230],{"id":9229},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[19,9232,9233],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[19,9235,9236,9237,9239],{},"例如数组：int arr",[240,9238,2546],{},"={4,3,6,9,1,2,10,8,7,5}",[231,9241,9243],{"className":2112,"code":9242,"language":2114,"meta":236,"style":236},"#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",[23,9244,9245,9251,9261,9285,9289,9320,9324,9358,9362,9380,9384,9395,9410,9425,9429,9433,9437,9441,9445,9453,9457,9462,9516,9528,9540,9545,9553,9557,9562,9587,9591,9606,9615,9619],{"__ignoreMap":236},[240,9246,9247,9249],{"class":242,"line":243},[240,9248,3903],{"class":288},[240,9250,3906],{"class":443},[240,9252,9253,9255,9257,9259],{"class":242,"line":250},[240,9254,3911],{"class":288},[240,9256,3914],{"class":288},[240,9258,3917],{"class":436},[240,9260,274],{"class":257},[240,9262,9263,9265,9268,9270,9272,9274,9276,9278,9280,9283],{"class":242,"line":261},[240,9264,7315],{"class":288},[240,9266,9267],{"class":436}," bubbleSort",[240,9269,789],{"class":257},[240,9271,2126],{"class":288},[240,9273,8469],{"class":288},[240,9275,19],{"class":792},[240,9277,2479],{"class":257},[240,9279,2126],{"class":288},[240,9281,9282],{"class":792}," len",[240,9284,2129],{"class":257},[240,9286,9287],{"class":242,"line":277},[240,9288,3504],{"class":257},[240,9290,9291,9293,9295,9297,9299,9301,9303,9305,9307,9310,9312,9314,9316,9318],{"class":242,"line":294},[240,9292,5153],{"class":288},[240,9294,789],{"class":257},[240,9296,2126],{"class":288},[240,9298,4984],{"class":257},[240,9300,440],{"class":288},[240,9302,1274],{"class":264},[240,9304,4991],{"class":257},[240,9306,431],{"class":288},[240,9308,9309],{"class":257},"len",[240,9311,2631],{"class":288},[240,9313,1643],{"class":264},[240,9315,4991],{"class":257},[240,9317,4245],{"class":288},[240,9319,2129],{"class":257},[240,9321,9322],{"class":242,"line":309},[240,9323,3983],{"class":257},[240,9325,9326,9328,9330,9332,9334,9336,9338,9340,9342,9344,9346,9348,9350,9352,9354,9356],{"class":242,"line":529},[240,9327,5355],{"class":288},[240,9329,789],{"class":257},[240,9331,2126],{"class":288},[240,9333,5362],{"class":257},[240,9335,440],{"class":288},[240,9337,1274],{"class":264},[240,9339,5369],{"class":257},[240,9341,431],{"class":288},[240,9343,9309],{"class":257},[240,9345,2631],{"class":288},[240,9347,2541],{"class":257},[240,9349,2631],{"class":288},[240,9351,1643],{"class":264},[240,9353,5369],{"class":257},[240,9355,4245],{"class":288},[240,9357,2129],{"class":257},[240,9359,9360],{"class":242,"line":549},[240,9361,4463],{"class":257},[240,9363,9364,9366,9369,9371,9374,9376,9378],{"class":242,"line":569},[240,9365,6594],{"class":288},[240,9367,9368],{"class":257},"(p[j]",[240,9370,3053],{"class":288},[240,9372,9373],{"class":257},"p[j",[240,9375,2580],{"class":288},[240,9377,1643],{"class":264},[240,9379,6609],{"class":257},[240,9381,9382],{"class":242,"line":589},[240,9383,6614],{"class":257},[240,9385,9386,9388,9390,9392],{"class":242,"line":715},[240,9387,6619],{"class":288},[240,9389,6207],{"class":257},[240,9391,440],{"class":288},[240,9393,9394],{"class":257},"p[j];\n",[240,9396,9397,9400,9402,9404,9406,9408],{"class":242,"line":727},[240,9398,9399],{"class":257},"                p[j]",[240,9401,440],{"class":288},[240,9403,9373],{"class":257},[240,9405,2580],{"class":288},[240,9407,1643],{"class":264},[240,9409,6642],{"class":257},[240,9411,9412,9415,9417,9419,9421,9423],{"class":242,"line":1730},[240,9413,9414],{"class":257},"                p[j",[240,9416,2580],{"class":288},[240,9418,1643],{"class":264},[240,9420,3034],{"class":257},[240,9422,440],{"class":288},[240,9424,6232],{"class":257},[240,9426,9427],{"class":242,"line":3582},[240,9428,6662],{"class":257},[240,9430,9431],{"class":242,"line":3596},[240,9432,4482],{"class":257},[240,9434,9435],{"class":242,"line":3601},[240,9436,4140],{"class":257},[240,9438,9439],{"class":242,"line":3607},[240,9440,312],{"class":257},[240,9442,9443],{"class":242,"line":3628},[240,9444,4353],{"emptyLinePlaceholder":2051},[240,9446,9447,9449,9451],{"class":242,"line":3633},[240,9448,2126],{"class":288},[240,9450,3926],{"class":436},[240,9452,3929],{"class":257},[240,9454,9455],{"class":242,"line":3647},[240,9456,3504],{"class":257},[240,9458,9459],{"class":242,"line":3652},[240,9460,9461],{"class":246},"    \u002F\u002F 1.创建数组\n",[240,9463,9464,9466,9468,9470,9472,9474,9476,9478,9480,9482,9484,9486,9488,9490,9492,9494,9496,9498,9500,9502,9504,9506,9508,9510,9512,9514],{"class":242,"line":3681},[240,9465,3938],{"class":288},[240,9467,5914],{"class":257},[240,9469,2546],{"class":264},[240,9471,3034],{"class":257},[240,9473,440],{"class":288},[240,9475,2991],{"class":257},[240,9477,1716],{"class":264},[240,9479,2479],{"class":257},[240,9481,1692],{"class":264},[240,9483,2479],{"class":257},[240,9485,2445],{"class":264},[240,9487,2479],{"class":257},[240,9489,2520],{"class":264},[240,9491,2479],{"class":257},[240,9493,1643],{"class":264},[240,9495,2479],{"class":257},[240,9497,1668],{"class":264},[240,9499,2479],{"class":257},[240,9501,2546],{"class":264},[240,9503,2479],{"class":257},[240,9505,2496],{"class":264},[240,9507,2479],{"class":257},[240,9509,2470],{"class":264},[240,9511,2479],{"class":257},[240,9513,1741],{"class":264},[240,9515,5947],{"class":257},[240,9517,9518,9520,9522,9524,9526],{"class":242,"line":3686},[240,9519,3938],{"class":288},[240,9521,9282],{"class":257},[240,9523,440],{"class":288},[240,9525,2546],{"class":264},[240,9527,274],{"class":257},[240,9529,9530,9532,9534,9536,9538],{"class":242,"line":3703},[240,9531,3938],{"class":288},[240,9533,8469],{"class":288},[240,9535,19],{"class":257},[240,9537,440],{"class":288},[240,9539,8989],{"class":257},[240,9541,9542],{"class":242,"line":3708},[240,9543,9544],{"class":246},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[240,9546,9547,9550],{"class":242,"line":3713},[240,9548,9549],{"class":436},"    bubbleSort",[240,9551,9552],{"class":257},"(p,len);\n",[240,9554,9555],{"class":242,"line":3718},[240,9556,4353],{"emptyLinePlaceholder":2051},[240,9558,9559],{"class":242,"line":3732},[240,9560,9561],{"class":246},"    \u002F\u002F 3.打印排序后的数组\n",[240,9563,9564,9566,9568,9570,9572,9574,9576,9578,9580,9583,9585],{"class":242,"line":3737},[240,9565,5153],{"class":288},[240,9567,3612],{"class":257},[240,9569,2126],{"class":288},[240,9571,4984],{"class":257},[240,9573,440],{"class":288},[240,9575,1274],{"class":264},[240,9577,5166],{"class":257},[240,9579,431],{"class":288},[240,9581,9582],{"class":257},"len; i",[240,9584,4245],{"class":288},[240,9586,2129],{"class":257},[240,9588,9589],{"class":242,"line":4530},[240,9590,3983],{"class":257},[240,9592,9593,9595,9597,9599,9601,9604],{"class":242,"line":4544},[240,9594,5403],{"class":257},[240,9596,8370],{"class":288},[240,9598,19],{"class":257},[240,9600,3137],{"class":288},[240,9602,9603],{"class":443},"\"\"",[240,9605,274],{"class":257},[240,9607,9608,9611,9613],{"class":242,"line":4552},[240,9609,9610],{"class":257},"        p",[240,9612,4245],{"class":288},[240,9614,274],{"class":257},[240,9616,9617],{"class":242,"line":4557},[240,9618,4140],{"class":257},[240,9620,9621],{"class":242,"line":4563},[240,9622,312],{"class":257},[2019,9624,9625],{},"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":236,"searchDepth":250,"depth":250,"links":9627},[9628,9629,9630,9631,9632,9633,9634,9635],{"id":8234,"depth":250,"text":8235},{"id":8400,"depth":250,"text":8401},{"id":8556,"depth":250,"text":8557},{"id":8634,"depth":250,"text":8635},{"id":8713,"depth":250,"text":8714},{"id":8812,"depth":250,"text":8813},{"id":9051,"depth":250,"text":9052},{"id":9229,"depth":250,"text":9230},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":8223,"description":8231},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":9642,"title":9643,"body":9644,"description":9651,"extension":2049,"meta":12625,"navigation":2051,"path":12626,"seo":12627,"stem":12628,"__hash__":12629},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":9645,"toc":12616},[9646,9649,9652,9656,9659,9662,9673,10011,10014,10018,10021,10028,10283,10287,10290,10293,10448,10452,10455,10458,10664,10668,10671,10974,10977,10985,10989,10992,11143,11145,11156,11213,11217,11222,11879,11887,11890,11984,11987,12607,12613],[10,9647,9643],{"id":9648},"_4结构体",[19,9650,9651],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[14,9653,9655],{"id":9654},"_41结构体定义与使用","4.1结构体定义与使用",[19,9657,9658],{},"语法：struct 结构体名 {结构体成员列表}；",[19,9660,9661],{},"通过结构体创建变量的方式：",[3100,9663,9664,9667,9670],{},[1829,9665,9666],{},"struct 结构体名 变量名",[1829,9668,9669],{},"struct 结构体名 变量名={成员1值，成员2值...}",[1829,9671,9672],{},"定义结构体时顺便创建变量",[231,9674,9676],{"className":2112,"code":9675,"language":2114,"meta":236,"style":236},"#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",[23,9677,9678,9684,9694,9701,9706,9714,9718,9723,9727,9732,9737,9742,9749,9754,9761,9765,9772,9776,9780,9784,9788,9792,9796,9802,9806,9812,9820,9828,9832,9837,9842,9853,9858,9870,9881,9892,9897,9921,9926,9932,9959,9964,9970,9982,9994,10006],{"__ignoreMap":236},[240,9679,9680,9682],{"class":242,"line":243},[240,9681,3903],{"class":288},[240,9683,3906],{"class":443},[240,9685,9686,9688,9690,9692],{"class":242,"line":250},[240,9687,3911],{"class":288},[240,9689,3914],{"class":288},[240,9691,3917],{"class":436},[240,9693,274],{"class":257},[240,9695,9696,9698],{"class":242,"line":261},[240,9697,3903],{"class":288},[240,9699,9700],{"class":443},"\u003Cstring>\n",[240,9702,9703],{"class":242,"line":277},[240,9704,9705],{"class":246},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[240,9707,9708,9711],{"class":242,"line":294},[240,9709,9710],{"class":288},"struct",[240,9712,9713],{"class":436}," Student\n",[240,9715,9716],{"class":242,"line":309},[240,9717,3504],{"class":257},[240,9719,9720],{"class":242,"line":529},[240,9721,9722],{"class":246},"    \u002F\u002F成员列表\n",[240,9724,9725],{"class":242,"line":549},[240,9726,4353],{"emptyLinePlaceholder":2051},[240,9728,9729],{"class":242,"line":569},[240,9730,9731],{"class":246},"    \u002F\u002F姓名\n",[240,9733,9734],{"class":242,"line":589},[240,9735,9736],{"class":257},"    string name;\n",[240,9738,9739],{"class":242,"line":715},[240,9740,9741],{"class":246},"    \u002F\u002F年龄\n",[240,9743,9744,9746],{"class":242,"line":727},[240,9745,3938],{"class":288},[240,9747,9748],{"class":257}," age;\n",[240,9750,9751],{"class":242,"line":1730},[240,9752,9753],{"class":246},"    \u002F\u002F分数\n",[240,9755,9756,9758],{"class":242,"line":3582},[240,9757,3938],{"class":288},[240,9759,9760],{"class":257}," score;\n",[240,9762,9763],{"class":242,"line":3596},[240,9764,5947],{"class":257},[240,9766,9767,9769],{"class":242,"line":3601},[240,9768,9710],{"class":288},[240,9770,9771],{"class":436}," School\n",[240,9773,9774],{"class":242,"line":3607},[240,9775,3504],{"class":257},[240,9777,9778],{"class":242,"line":3628},[240,9779,9722],{"class":246},[240,9781,9782],{"class":242,"line":3633},[240,9783,4353],{"emptyLinePlaceholder":2051},[240,9785,9786],{"class":242,"line":3647},[240,9787,9731],{"class":246},[240,9789,9790],{"class":242,"line":3652},[240,9791,9736],{"class":257},[240,9793,9794],{"class":242,"line":3681},[240,9795,9741],{"class":246},[240,9797,9798,9800],{"class":242,"line":3686},[240,9799,3938],{"class":288},[240,9801,9748],{"class":257},[240,9803,9804],{"class":242,"line":3703},[240,9805,9753],{"class":246},[240,9807,9808,9810],{"class":242,"line":3708},[240,9809,3938],{"class":288},[240,9811,9760],{"class":257},[240,9813,9814,9817],{"class":242,"line":3713},[240,9815,9816],{"class":257},"} s3;",[240,9818,9819],{"class":246}," \u002F\u002F创建结构体时就创建了变量\n",[240,9821,9822,9824,9826],{"class":242,"line":3718},[240,9823,2126],{"class":288},[240,9825,3926],{"class":436},[240,9827,3929],{"class":257},[240,9829,9830],{"class":242,"line":3732},[240,9831,3504],{"class":257},[240,9833,9834],{"class":242,"line":3737},[240,9835,9836],{"class":246},"    \u002F\u002F2.通过学生类型创建具体学生\n",[240,9838,9839],{"class":242,"line":4530},[240,9840,9841],{"class":246},"    \u002F\u002F2.1 struct Student s1;\n",[240,9843,9844,9847,9850],{"class":242,"line":4544},[240,9845,9846],{"class":288},"    struct",[240,9848,9849],{"class":436}," Student",[240,9851,9852],{"class":257}," s1;\n",[240,9854,9855],{"class":242,"line":4552},[240,9856,9857],{"class":246},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[240,9859,9860,9863,9865,9868],{"class":242,"line":4557},[240,9861,9862],{"class":257},"    s1.name",[240,9864,440],{"class":288},[240,9866,9867],{"class":443},"\"张三\"",[240,9869,274],{"class":257},[240,9871,9872,9875,9877,9879],{"class":242,"line":4563},[240,9873,9874],{"class":257},"    s1.age",[240,9876,440],{"class":288},[240,9878,2748],{"class":264},[240,9880,274],{"class":257},[240,9882,9883,9886,9888,9890],{"class":242,"line":4569},[240,9884,9885],{"class":257},"    s1.score",[240,9887,440],{"class":288},[240,9889,2358],{"class":264},[240,9891,274],{"class":257},[240,9893,9894],{"class":242,"line":4574},[240,9895,9896],{"class":246},"    \u002F\u002F输出结果\n",[240,9898,9900,9902,9904,9907,9909,9912,9914,9917,9919],{"class":242,"line":9899},37,[240,9901,3509],{"class":257},[240,9903,3137],{"class":288},[240,9905,9906],{"class":257},"s1.name",[240,9908,3137],{"class":288},[240,9910,9911],{"class":257},"s1.age",[240,9913,3137],{"class":288},[240,9915,9916],{"class":257},"s1.score",[240,9918,3137],{"class":288},[240,9920,3159],{"class":257},[240,9922,9924],{"class":242,"line":9923},38,[240,9925,4353],{"emptyLinePlaceholder":2051},[240,9927,9929],{"class":242,"line":9928},39,[240,9930,9931],{"class":246},"    \u002F\u002F2.2 struct Student s2={...}\n",[240,9933,9935,9937,9939,9942,9944,9946,9949,9951,9953,9955,9957],{"class":242,"line":9934},40,[240,9936,9846],{"class":288},[240,9938,9849],{"class":436},[240,9940,9941],{"class":257}," s2",[240,9943,440],{"class":288},[240,9945,2991],{"class":257},[240,9947,9948],{"class":443},"\"王五\"",[240,9950,2479],{"class":257},[240,9952,2748],{"class":264},[240,9954,2479],{"class":257},[240,9956,2358],{"class":264},[240,9958,5947],{"class":257},[240,9960,9962],{"class":242,"line":9961},41,[240,9963,4353],{"emptyLinePlaceholder":2051},[240,9965,9967],{"class":242,"line":9966},42,[240,9968,9969],{"class":246},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[240,9971,9973,9976,9978,9980],{"class":242,"line":9972},43,[240,9974,9975],{"class":257},"    s3.name",[240,9977,440],{"class":288},[240,9979,5630],{"class":443},[240,9981,274],{"class":257},[240,9983,9985,9988,9990,9992],{"class":242,"line":9984},44,[240,9986,9987],{"class":257},"    s3.age",[240,9989,440],{"class":288},[240,9991,2748],{"class":264},[240,9993,274],{"class":257},[240,9995,9997,10000,10002,10004],{"class":242,"line":9996},45,[240,9998,9999],{"class":257},"    s3.score",[240,10001,440],{"class":288},[240,10003,1000],{"class":264},[240,10005,274],{"class":257},[240,10007,10009],{"class":242,"line":10008},46,[240,10010,312],{"class":257},[19,10012,10013],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[14,10015,10017],{"id":10016},"_42结构体数组","4.2结构体数组",[19,10019,10020],{},"将自定义的结构体放入到数组中方便维护",[19,10022,10023,10024,10027],{},"语法：struct 结构体名 数组名",[240,10025,10026],{},"元素个数","={ {}，{},...{} };",[231,10029,10031],{"className":2112,"code":10030,"language":2114,"meta":236,"style":236},"#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",[23,10032,10033,10039,10049,10055,10060,10066,10070,10074,10080,10086,10090,10094,10102,10106,10111,10126,10130,10146,10162,10166,10171,10187,10202,10217,10222,10248,10252,10275,10279],{"__ignoreMap":236},[240,10034,10035,10037],{"class":242,"line":243},[240,10036,3903],{"class":288},[240,10038,3906],{"class":443},[240,10040,10041,10043,10045,10047],{"class":242,"line":250},[240,10042,3911],{"class":288},[240,10044,3914],{"class":288},[240,10046,3917],{"class":436},[240,10048,274],{"class":257},[240,10050,10051,10053],{"class":242,"line":261},[240,10052,3903],{"class":288},[240,10054,9700],{"class":443},[240,10056,10057],{"class":242,"line":277},[240,10058,10059],{"class":246},"\u002F\u002F1.定义结构体\n",[240,10061,10062,10064],{"class":242,"line":294},[240,10063,9710],{"class":288},[240,10065,9713],{"class":436},[240,10067,10068],{"class":242,"line":309},[240,10069,3504],{"class":257},[240,10071,10072],{"class":242,"line":529},[240,10073,9736],{"class":257},[240,10075,10076,10078],{"class":242,"line":549},[240,10077,3938],{"class":288},[240,10079,9748],{"class":257},[240,10081,10082,10084],{"class":242,"line":569},[240,10083,3938],{"class":288},[240,10085,9760],{"class":257},[240,10087,10088],{"class":242,"line":589},[240,10089,4353],{"emptyLinePlaceholder":2051},[240,10091,10092],{"class":242,"line":715},[240,10093,5947],{"class":257},[240,10095,10096,10098,10100],{"class":242,"line":727},[240,10097,2126],{"class":288},[240,10099,3926],{"class":436},[240,10101,3929],{"class":257},[240,10103,10104],{"class":242,"line":1730},[240,10105,3504],{"class":257},[240,10107,10108],{"class":242,"line":3582},[240,10109,10110],{"class":246},"    \u002F\u002F2.创建结构体数组\n",[240,10112,10113,10115,10117,10120,10122,10124],{"class":242,"line":3596},[240,10114,9846],{"class":288},[240,10116,9849],{"class":436},[240,10118,10119],{"class":257}," stuArray[",[240,10121,1668],{"class":264},[240,10123,3034],{"class":257},[240,10125,6860],{"class":288},[240,10127,10128],{"class":242,"line":3601},[240,10129,3983],{"class":257},[240,10131,10132,10134,10136,10138,10140,10142,10144],{"class":242,"line":3607},[240,10133,6869],{"class":257},[240,10135,9867],{"class":443},[240,10137,2479],{"class":257},[240,10139,2748],{"class":264},[240,10141,2479],{"class":257},[240,10143,285],{"class":264},[240,10145,6882],{"class":257},[240,10147,10148,10150,10152,10154,10156,10158,10160],{"class":242,"line":3628},[240,10149,6869],{"class":257},[240,10151,5630],{"class":443},[240,10153,2479],{"class":257},[240,10155,2674],{"class":264},[240,10157,2479],{"class":257},[240,10159,2674],{"class":264},[240,10161,312],{"class":257},[240,10163,10164],{"class":242,"line":3633},[240,10165,4140],{"class":257},[240,10167,10168],{"class":242,"line":3647},[240,10169,10170],{"class":246},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[240,10172,10173,10176,10178,10181,10183,10185],{"class":242,"line":3652},[240,10174,10175],{"class":257},"    stuArray[",[240,10177,1643],{"class":264},[240,10179,10180],{"class":257},"].name",[240,10182,440],{"class":288},[240,10184,5653],{"class":443},[240,10186,274],{"class":257},[240,10188,10189,10191,10193,10196,10198,10200],{"class":242,"line":3681},[240,10190,10175],{"class":257},[240,10192,1643],{"class":264},[240,10194,10195],{"class":257},"].age",[240,10197,440],{"class":288},[240,10199,1668],{"class":264},[240,10201,274],{"class":257},[240,10203,10204,10206,10208,10211,10213,10215],{"class":242,"line":3686},[240,10205,10175],{"class":257},[240,10207,1643],{"class":264},[240,10209,10210],{"class":257},"].score",[240,10212,440],{"class":288},[240,10214,1668],{"class":264},[240,10216,274],{"class":257},[240,10218,10219],{"class":242,"line":3703},[240,10220,10221],{"class":246},"    \u002F\u002F4.遍历结构体数组\n",[240,10223,10224,10226,10228,10230,10232,10234,10236,10238,10240,10242,10244,10246],{"class":242,"line":3708},[240,10225,5153],{"class":288},[240,10227,3612],{"class":257},[240,10229,2126],{"class":288},[240,10231,4984],{"class":257},[240,10233,440],{"class":288},[240,10235,1274],{"class":264},[240,10237,4991],{"class":257},[240,10239,431],{"class":288},[240,10241,1668],{"class":264},[240,10243,4991],{"class":257},[240,10245,4245],{"class":288},[240,10247,2129],{"class":257},[240,10249,10250],{"class":242,"line":3713},[240,10251,3983],{"class":257},[240,10253,10254,10256,10258,10261,10263,10266,10268,10271,10273],{"class":242,"line":3718},[240,10255,5403],{"class":257},[240,10257,3137],{"class":288},[240,10259,10260],{"class":257},"stuArray[i].name",[240,10262,3137],{"class":288},[240,10264,10265],{"class":257},"stuArray[i].age",[240,10267,3137],{"class":288},[240,10269,10270],{"class":257},"stuArray[i].score",[240,10272,3137],{"class":288},[240,10274,3159],{"class":257},[240,10276,10277],{"class":242,"line":3732},[240,10278,4140],{"class":257},[240,10280,10281],{"class":242,"line":3737},[240,10282,312],{"class":257},[14,10284,10286],{"id":10285},"_43结构体指针","4.3结构体指针",[19,10288,10289],{},"作用：通过指针访问结构体中的成员",[19,10291,10292],{},"利用操作符->可以通过结构体指针访问结构体属性",[231,10294,10296],{"className":2112,"code":10295,"language":2114,"meta":236,"style":236},"#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",[23,10297,10298,10304,10314,10320,10324,10330,10334,10338,10344,10350,10354,10362,10366,10371,10396,10401,10416,10421,10444],{"__ignoreMap":236},[240,10299,10300,10302],{"class":242,"line":243},[240,10301,3903],{"class":288},[240,10303,3906],{"class":443},[240,10305,10306,10308,10310,10312],{"class":242,"line":250},[240,10307,3911],{"class":288},[240,10309,3914],{"class":288},[240,10311,3917],{"class":436},[240,10313,274],{"class":257},[240,10315,10316,10318],{"class":242,"line":261},[240,10317,3903],{"class":288},[240,10319,9700],{"class":443},[240,10321,10322],{"class":242,"line":277},[240,10323,10059],{"class":246},[240,10325,10326,10328],{"class":242,"line":294},[240,10327,9710],{"class":288},[240,10329,9713],{"class":436},[240,10331,10332],{"class":242,"line":309},[240,10333,3504],{"class":257},[240,10335,10336],{"class":242,"line":529},[240,10337,9736],{"class":257},[240,10339,10340,10342],{"class":242,"line":549},[240,10341,3938],{"class":288},[240,10343,9748],{"class":257},[240,10345,10346,10348],{"class":242,"line":569},[240,10347,3938],{"class":288},[240,10349,9760],{"class":257},[240,10351,10352],{"class":242,"line":589},[240,10353,5947],{"class":257},[240,10355,10356,10358,10360],{"class":242,"line":715},[240,10357,2126],{"class":288},[240,10359,3926],{"class":436},[240,10361,3929],{"class":257},[240,10363,10364],{"class":242,"line":727},[240,10365,3504],{"class":257},[240,10367,10368],{"class":242,"line":1730},[240,10369,10370],{"class":246},"    \u002F\u002F创建学生结构体变量\n",[240,10372,10373,10375,10377,10380,10382,10384,10386,10388,10390,10392,10394],{"class":242,"line":3582},[240,10374,9846],{"class":288},[240,10376,9849],{"class":436},[240,10378,10379],{"class":257}," s",[240,10381,440],{"class":288},[240,10383,2991],{"class":257},[240,10385,9867],{"class":443},[240,10387,2479],{"class":257},[240,10389,2748],{"class":264},[240,10391,2479],{"class":257},[240,10393,3676],{"class":264},[240,10395,5947],{"class":257},[240,10397,10398],{"class":242,"line":3596},[240,10399,10400],{"class":246},"    \u002F\u002F通过指针指向结构体变量\n",[240,10402,10403,10405,10407,10409,10411,10413],{"class":242,"line":3601},[240,10404,9846],{"class":288},[240,10406,9849],{"class":436},[240,10408,8469],{"class":288},[240,10410,19],{"class":257},[240,10412,8290],{"class":288},[240,10414,10415],{"class":257},"s\n",[240,10417,10418],{"class":242,"line":3607},[240,10419,10420],{"class":246},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[240,10422,10423,10425,10427,10430,10432,10435,10437,10440,10442],{"class":242,"line":3628},[240,10424,3509],{"class":257},[240,10426,3137],{"class":288},[240,10428,10429],{"class":257},"p->name",[240,10431,3137],{"class":288},[240,10433,10434],{"class":257},"p->age",[240,10436,3137],{"class":288},[240,10438,10439],{"class":257},"p->score",[240,10441,3137],{"class":288},[240,10443,3159],{"class":257},[240,10445,10446],{"class":242,"line":3633},[240,10447,312],{"class":257},[14,10449,10451],{"id":10450},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[19,10453,10454],{},"作用：结构体中的成员可以是另一个结构体",[19,10456,10457],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[231,10459,10461],{"className":2112,"code":10460,"language":2114,"meta":236,"style":236},"#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",[23,10462,10463,10469,10479,10485,10490,10498,10502,10506,10512,10518,10522,10527,10534,10538,10545,10549,10555,10560,10564,10572,10576,10581,10586,10591,10602,10614,10625,10638,10649,10660],{"__ignoreMap":236},[240,10464,10465,10467],{"class":242,"line":243},[240,10466,3903],{"class":288},[240,10468,3906],{"class":443},[240,10470,10471,10473,10475,10477],{"class":242,"line":250},[240,10472,3911],{"class":288},[240,10474,3914],{"class":288},[240,10476,3917],{"class":436},[240,10478,274],{"class":257},[240,10480,10481,10483],{"class":242,"line":261},[240,10482,3903],{"class":288},[240,10484,9700],{"class":443},[240,10486,10487],{"class":242,"line":277},[240,10488,10489],{"class":246},"\u002F\u002F定义学生结构体\n",[240,10491,10492,10494,10496],{"class":242,"line":294},[240,10493,9710],{"class":288},[240,10495,9849],{"class":436},[240,10497,4627],{"class":257},[240,10499,10500],{"class":242,"line":309},[240,10501,3504],{"class":257},[240,10503,10504],{"class":242,"line":529},[240,10505,9736],{"class":257},[240,10507,10508,10510],{"class":242,"line":549},[240,10509,3938],{"class":288},[240,10511,9748],{"class":257},[240,10513,10514,10516],{"class":242,"line":569},[240,10515,3938],{"class":288},[240,10517,9760],{"class":257},[240,10519,10520],{"class":242,"line":589},[240,10521,312],{"class":257},[240,10523,10524],{"class":242,"line":715},[240,10525,10526],{"class":246},"\u002F\u002F定义老师结构体\n",[240,10528,10529,10531],{"class":242,"line":727},[240,10530,9710],{"class":288},[240,10532,10533],{"class":436}," Teacher\n",[240,10535,10536],{"class":242,"line":1730},[240,10537,3504],{"class":257},[240,10539,10540,10542],{"class":242,"line":3582},[240,10541,3938],{"class":288},[240,10543,10544],{"class":257}," id;\n",[240,10546,10547],{"class":242,"line":3596},[240,10548,9736],{"class":257},[240,10550,10551,10553],{"class":242,"line":3601},[240,10552,3938],{"class":288},[240,10554,9748],{"class":257},[240,10556,10557],{"class":242,"line":3607},[240,10558,10559],{"class":257},"    Student stu;\n",[240,10561,10562],{"class":242,"line":3628},[240,10563,312],{"class":257},[240,10565,10566,10568,10570],{"class":242,"line":3633},[240,10567,2126],{"class":288},[240,10569,3926],{"class":436},[240,10571,7929],{"class":257},[240,10573,10574],{"class":242,"line":3647},[240,10575,3504],{"class":257},[240,10577,10578],{"class":242,"line":3652},[240,10579,10580],{"class":246},"    \u002F\u002F结构体嵌套结构体\n",[240,10582,10583],{"class":242,"line":3681},[240,10584,10585],{"class":246},"    \u002F\u002F创建老师\n",[240,10587,10588],{"class":242,"line":3686},[240,10589,10590],{"class":257},"    Teacher t;\n",[240,10592,10593,10596,10598,10600],{"class":242,"line":3703},[240,10594,10595],{"class":257},"    t.id",[240,10597,440],{"class":288},[240,10599,285],{"class":264},[240,10601,274],{"class":257},[240,10603,10604,10607,10609,10612],{"class":242,"line":3708},[240,10605,10606],{"class":257},"    t.name",[240,10608,440],{"class":288},[240,10610,10611],{"class":443},"\"老王\"",[240,10613,274],{"class":257},[240,10615,10616,10619,10621,10623],{"class":242,"line":3713},[240,10617,10618],{"class":257},"    t.age",[240,10620,440],{"class":288},[240,10622,2748],{"class":264},[240,10624,274],{"class":257},[240,10626,10627,10630,10632,10635],{"class":242,"line":3718},[240,10628,10629],{"class":257},"    t.stu.name",[240,10631,440],{"class":288},[240,10633,10634],{"class":443},"\"小王\"",[240,10636,10637],{"class":257},"；\n",[240,10639,10640,10643,10645,10647],{"class":242,"line":3732},[240,10641,10642],{"class":257},"    t.stu.age",[240,10644,440],{"class":288},[240,10646,1000],{"class":264},[240,10648,274],{"class":257},[240,10650,10651,10654,10656,10658],{"class":242,"line":3737},[240,10652,10653],{"class":257},"    t.stu.score",[240,10655,440],{"class":288},[240,10657,2445],{"class":264},[240,10659,274],{"class":257},[240,10661,10662],{"class":242,"line":4530},[240,10663,312],{"class":257},[14,10665,10667],{"id":10666},"_45结构体做函数参数","4.5结构体做函数参数",[19,10669,10670],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[231,10672,10674],{"className":2112,"code":10673,"language":2114,"meta":236,"style":236},"#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",[23,10675,10676,10682,10692,10698,10704,10708,10712,10718,10724,10728,10733,10738,10755,10759,10792,10796,10801,10820,10824,10855,10859,10867,10871,10880,10892,10904,10916,10929,10937,10950,10962,10970],{"__ignoreMap":236},[240,10677,10678,10680],{"class":242,"line":243},[240,10679,3903],{"class":288},[240,10681,3906],{"class":443},[240,10683,10684,10686,10688,10690],{"class":242,"line":250},[240,10685,3911],{"class":288},[240,10687,3914],{"class":288},[240,10689,3917],{"class":436},[240,10691,274],{"class":257},[240,10693,10694,10696],{"class":242,"line":261},[240,10695,3903],{"class":288},[240,10697,9700],{"class":443},[240,10699,10700,10702],{"class":242,"line":277},[240,10701,9710],{"class":288},[240,10703,9713],{"class":436},[240,10705,10706],{"class":242,"line":294},[240,10707,3504],{"class":257},[240,10709,10710],{"class":242,"line":309},[240,10711,9736],{"class":257},[240,10713,10714,10716],{"class":242,"line":529},[240,10715,3938],{"class":288},[240,10717,9748],{"class":257},[240,10719,10720,10722],{"class":242,"line":549},[240,10721,3938],{"class":288},[240,10723,9760],{"class":257},[240,10725,10726],{"class":242,"line":569},[240,10727,5947],{"class":257},[240,10729,10730],{"class":242,"line":589},[240,10731,10732],{"class":246},"\u002F\u002F打印学生信息的函数\n",[240,10734,10735],{"class":242,"line":715},[240,10736,10737],{"class":246},"\u002F\u002F值传递\n",[240,10739,10740,10742,10745,10747,10749,10751,10753],{"class":242,"line":727},[240,10741,7315],{"class":288},[240,10743,10744],{"class":436}," printStudent1",[240,10746,789],{"class":257},[240,10748,9710],{"class":288},[240,10750,9849],{"class":436},[240,10752,10379],{"class":792},[240,10754,2129],{"class":257},[240,10756,10757],{"class":242,"line":1730},[240,10758,3504],{"class":257},[240,10760,10761,10763,10765,10768,10770,10773,10775,10778,10780,10782,10784,10787,10789],{"class":242,"line":3582},[240,10762,8480],{"class":257},[240,10764,3137],{"class":288},[240,10766,10767],{"class":257}," s.name ",[240,10769,3137],{"class":288},[240,10771,10772],{"class":443}," \" \"",[240,10774,3403],{"class":288},[240,10776,10777],{"class":257}," s.age ",[240,10779,3137],{"class":288},[240,10781,10772],{"class":443},[240,10783,3403],{"class":288},[240,10785,10786],{"class":257}," s.score ",[240,10788,3137],{"class":288},[240,10790,10791],{"class":257}," endl;\n",[240,10793,10794],{"class":242,"line":3596},[240,10795,312],{"class":257},[240,10797,10798],{"class":242,"line":3601},[240,10799,10800],{"class":246},"\u002F\u002F地址传递\n",[240,10802,10803,10805,10808,10810,10812,10814,10816,10818],{"class":242,"line":3607},[240,10804,7315],{"class":288},[240,10806,10807],{"class":436}," printStudent2",[240,10809,789],{"class":257},[240,10811,9710],{"class":288},[240,10813,9849],{"class":436},[240,10815,8469],{"class":288},[240,10817,2793],{"class":792},[240,10819,2129],{"class":257},[240,10821,10822],{"class":242,"line":3628},[240,10823,3504],{"class":257},[240,10825,10826,10828,10830,10833,10835,10837,10839,10842,10844,10846,10848,10851,10853],{"class":242,"line":3633},[240,10827,8480],{"class":257},[240,10829,3137],{"class":288},[240,10831,10832],{"class":257}," s->name ",[240,10834,3137],{"class":288},[240,10836,10772],{"class":443},[240,10838,3403],{"class":288},[240,10840,10841],{"class":257}," s->age ",[240,10843,3137],{"class":288},[240,10845,10772],{"class":443},[240,10847,3403],{"class":288},[240,10849,10850],{"class":257}," s->score ",[240,10852,3137],{"class":288},[240,10854,10791],{"class":257},[240,10856,10857],{"class":242,"line":3647},[240,10858,312],{"class":257},[240,10860,10861,10863,10865],{"class":242,"line":3652},[240,10862,2126],{"class":288},[240,10864,3926],{"class":436},[240,10866,3929],{"class":257},[240,10868,10869],{"class":242,"line":3681},[240,10870,3504],{"class":257},[240,10872,10873,10875,10877],{"class":242,"line":3686},[240,10874,9846],{"class":288},[240,10876,9849],{"class":436},[240,10878,10879],{"class":257}," s;\n",[240,10881,10882,10885,10887,10890],{"class":242,"line":3703},[240,10883,10884],{"class":257},"    s.name ",[240,10886,440],{"class":288},[240,10888,10889],{"class":443}," \"张三\"",[240,10891,274],{"class":257},[240,10893,10894,10897,10899,10902],{"class":242,"line":3708},[240,10895,10896],{"class":257},"    s.age ",[240,10898,440],{"class":288},[240,10900,10901],{"class":264}," 20",[240,10903,274],{"class":257},[240,10905,10906,10909,10911,10914],{"class":242,"line":3713},[240,10907,10908],{"class":257},"    s.score ",[240,10910,440],{"class":288},[240,10912,10913],{"class":264}," 85",[240,10915,274],{"class":257},[240,10917,10918,10920,10922,10925,10927],{"class":242,"line":3718},[240,10919,3509],{"class":257},[240,10921,3137],{"class":288},[240,10923,10924],{"class":443},"\"值传递:\"",[240,10926,3137],{"class":288},[240,10928,3159],{"class":257},[240,10930,10931,10934],{"class":242,"line":3732},[240,10932,10933],{"class":436},"    printStudent1",[240,10935,10936],{"class":257},"(s);\n",[240,10938,10939,10941,10943,10946,10948],{"class":242,"line":3737},[240,10940,3509],{"class":257},[240,10942,3137],{"class":288},[240,10944,10945],{"class":443},"\"地址传递:\"",[240,10947,3137],{"class":288},[240,10949,3159],{"class":257},[240,10951,10952,10955,10957,10959],{"class":242,"line":4530},[240,10953,10954],{"class":436},"    printStudent2",[240,10956,789],{"class":257},[240,10958,2454],{"class":288},[240,10960,10961],{"class":257},"s); \n",[240,10963,10964,10966,10968],{"class":242,"line":4544},[240,10965,6042],{"class":288},[240,10967,6045],{"class":264},[240,10969,274],{"class":257},[240,10971,10972],{"class":242,"line":4552},[240,10973,312],{"class":257},[19,10975,10976],{},"注意：",[3100,10978,10979,10982],{},[1829,10980,10981],{},"1.先定义结构体，不要在函数中写结构体的定义",[1829,10983,10984],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[14,10986,10988],{"id":10987},"_46结构体中const使用场景","4.6结构体中const使用场景",[19,10990,10991],{},"用const防止误操作",[231,10993,10995],{"className":2112,"code":10994,"language":2114,"meta":236,"style":236},"#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",[23,10996,10997,11003,11013,11019,11024,11028,11032,11038,11044,11048,11064,11068,11091,11095,11103,11107,11128,11135,11139],{"__ignoreMap":236},[240,10998,10999,11001],{"class":242,"line":243},[240,11000,3903],{"class":288},[240,11002,3906],{"class":443},[240,11004,11005,11007,11009,11011],{"class":242,"line":250},[240,11006,3911],{"class":288},[240,11008,3914],{"class":288},[240,11010,3917],{"class":436},[240,11012,274],{"class":257},[240,11014,11015,11017],{"class":242,"line":261},[240,11016,3903],{"class":288},[240,11018,9700],{"class":443},[240,11020,11021],{"class":242,"line":277},[240,11022,11023],{"class":257},"sctuct Student\n",[240,11025,11026],{"class":242,"line":294},[240,11027,3504],{"class":257},[240,11029,11030],{"class":242,"line":309},[240,11031,9736],{"class":257},[240,11033,11034,11036],{"class":242,"line":529},[240,11035,3938],{"class":288},[240,11037,9748],{"class":257},[240,11039,11040,11042],{"class":242,"line":549},[240,11041,3938],{"class":288},[240,11043,9760],{"class":257},[240,11045,11046],{"class":242,"line":569},[240,11047,5947],{"class":257},[240,11049,11050,11052,11055,11057,11060,11062],{"class":242,"line":589},[240,11051,7315],{"class":288},[240,11053,11054],{"class":436}," printStudents",[240,11056,789],{"class":257},[240,11058,11059],{"class":436},"student",[240,11061,10379],{"class":792},[240,11063,2129],{"class":257},[240,11065,11066],{"class":242,"line":715},[240,11067,3504],{"class":257},[240,11069,11070,11072,11074,11077,11079,11082,11084,11087,11089],{"class":242,"line":727},[240,11071,3509],{"class":257},[240,11073,3137],{"class":288},[240,11075,11076],{"class":257},"s.name",[240,11078,3137],{"class":288},[240,11080,11081],{"class":257},"s.age",[240,11083,3137],{"class":288},[240,11085,11086],{"class":257},"s.score",[240,11088,3137],{"class":288},[240,11090,3159],{"class":257},[240,11092,11093],{"class":242,"line":1730},[240,11094,312],{"class":257},[240,11096,11097,11099,11101],{"class":242,"line":3582},[240,11098,2126],{"class":288},[240,11100,3926],{"class":436},[240,11102,7929],{"class":257},[240,11104,11105],{"class":242,"line":3596},[240,11106,3504],{"class":257},[240,11108,11109,11112,11114,11116,11118,11120,11122,11124,11126],{"class":242,"line":3601},[240,11110,11111],{"class":257},"    Student s",[240,11113,440],{"class":288},[240,11115,2991],{"class":257},[240,11117,9867],{"class":443},[240,11119,2479],{"class":257},[240,11121,2748],{"class":264},[240,11123,2479],{"class":257},[240,11125,2748],{"class":264},[240,11127,5947],{"class":257},[240,11129,11130,11133],{"class":242,"line":3607},[240,11131,11132],{"class":436},"    printStudent",[240,11134,10936],{"class":257},[240,11136,11137],{"class":242,"line":3628},[240,11138,4353],{"emptyLinePlaceholder":2051},[240,11140,11141],{"class":242,"line":3633},[240,11142,312],{"class":257},[19,11144,10976],{},[3100,11146,11147,11150,11153],{},[1829,11148,11149],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[1829,11151,11152],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[1829,11154,11155],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[231,11157,11159],{"className":2112,"code":11158,"language":2114,"meta":236,"style":236},"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",[23,11160,11161,11180,11184,11189,11209],{"__ignoreMap":236},[240,11162,11163,11165,11167,11169,11171,11174,11176,11178],{"class":242,"line":243},[240,11164,7315],{"class":288},[240,11166,11054],{"class":436},[240,11168,789],{"class":257},[240,11170,8743],{"class":288},[240,11172,11173],{"class":436}," student",[240,11175,8469],{"class":288},[240,11177,2793],{"class":792},[240,11179,2129],{"class":257},[240,11181,11182],{"class":242,"line":250},[240,11183,3504],{"class":257},[240,11185,11186],{"class":242,"line":261},[240,11187,11188],{"class":246},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[240,11190,11191,11193,11195,11197,11199,11201,11203,11205,11207],{"class":242,"line":277},[240,11192,3509],{"class":257},[240,11194,3137],{"class":288},[240,11196,11076],{"class":257},[240,11198,3137],{"class":288},[240,11200,11081],{"class":257},[240,11202,3137],{"class":288},[240,11204,11086],{"class":257},[240,11206,3137],{"class":288},[240,11208,3159],{"class":257},[240,11210,11211],{"class":242,"line":294},[240,11212,312],{"class":257},[14,11214,11216],{"id":11215},"_47案例","4.7案例",[1826,11218,11219],{},[1829,11220,11221],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[231,11223,11225],{"className":2112,"code":11224,"language":2114,"meta":236,"style":236},"#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",[23,11226,11227,11233,11243,11249,11256,11260,11266,11270,11275,11281,11287,11291,11295,11301,11305,11310,11315,11328,11332,11337,11363,11367,11379,11406,11410,11422,11432,11436,11441,11470,11474,11486,11495,11522,11533,11543,11547,11551,11555,11560,11584,11588,11612,11616,11635,11661,11665,11690,11713,11737,11742,11747,11752,11761,11766,11772,11793,11799,11813,11819,11846,11855,11861,11869,11874],{"__ignoreMap":236},[240,11228,11229,11231],{"class":242,"line":243},[240,11230,3903],{"class":288},[240,11232,3906],{"class":443},[240,11234,11235,11237,11239,11241],{"class":242,"line":250},[240,11236,3911],{"class":288},[240,11238,3914],{"class":288},[240,11240,3917],{"class":436},[240,11242,274],{"class":257},[240,11244,11245,11247],{"class":242,"line":261},[240,11246,3903],{"class":288},[240,11248,9700],{"class":443},[240,11250,11251,11253],{"class":242,"line":277},[240,11252,3903],{"class":288},[240,11254,11255],{"class":443},"\u003Cctime>\n",[240,11257,11258],{"class":242,"line":294},[240,11259,10489],{"class":246},[240,11261,11262,11264],{"class":242,"line":309},[240,11263,9710],{"class":288},[240,11265,9713],{"class":436},[240,11267,11268],{"class":242,"line":529},[240,11269,3504],{"class":257},[240,11271,11272],{"class":242,"line":549},[240,11273,11274],{"class":257},"    string sName;\n",[240,11276,11277,11279],{"class":242,"line":569},[240,11278,3938],{"class":288},[240,11280,9748],{"class":257},[240,11282,11283,11285],{"class":242,"line":589},[240,11284,3938],{"class":288},[240,11286,9760],{"class":257},[240,11288,11289],{"class":242,"line":715},[240,11290,5947],{"class":257},[240,11292,11293],{"class":242,"line":727},[240,11294,10526],{"class":246},[240,11296,11297,11299],{"class":242,"line":1730},[240,11298,9710],{"class":288},[240,11300,10533],{"class":436},[240,11302,11303],{"class":242,"line":3582},[240,11304,3504],{"class":257},[240,11306,11307],{"class":242,"line":3596},[240,11308,11309],{"class":257},"    string tName;\n",[240,11311,11312],{"class":242,"line":3601},[240,11313,11314],{"class":246},"    \u002F\u002F学生数组\n",[240,11316,11317,11319,11321,11324,11326],{"class":242,"line":3607},[240,11318,9846],{"class":288},[240,11320,9849],{"class":436},[240,11322,11323],{"class":257}," sArray[",[240,11325,1741],{"class":264},[240,11327,6642],{"class":257},[240,11329,11330],{"class":242,"line":3628},[240,11331,5947],{"class":257},[240,11333,11334],{"class":242,"line":3633},[240,11335,11336],{"class":246},"\u002F\u002F给老师和学生赋值的函数\n",[240,11338,11339,11341,11344,11346,11348,11351,11354,11357,11359,11361],{"class":242,"line":3647},[240,11340,7315],{"class":288},[240,11342,11343],{"class":436}," allocateSpace",[240,11345,789],{"class":257},[240,11347,9710],{"class":288},[240,11349,11350],{"class":436}," Teacher",[240,11352,11353],{"class":792}," tArray",[240,11355,11356],{"class":257},"[],",[240,11358,2126],{"class":288},[240,11360,9282],{"class":792},[240,11362,2129],{"class":257},[240,11364,11365],{"class":242,"line":3652},[240,11366,3504],{"class":257},[240,11368,11369,11372,11374,11377],{"class":242,"line":3681},[240,11370,11371],{"class":257},"    string nameSeed",[240,11373,440],{"class":288},[240,11375,11376],{"class":443},"\"ABCDE\"",[240,11378,274],{"class":257},[240,11380,11381,11383,11385,11387,11390,11392,11394,11397,11399,11402,11404],{"class":242,"line":3686},[240,11382,5153],{"class":288},[240,11384,3612],{"class":257},[240,11386,2126],{"class":288},[240,11388,11389],{"class":257}," i ",[240,11391,440],{"class":288},[240,11393,6045],{"class":264},[240,11395,11396],{"class":257},"; i ",[240,11398,431],{"class":288},[240,11400,11401],{"class":257}," len; i",[240,11403,4245],{"class":288},[240,11405,2129],{"class":257},[240,11407,11408],{"class":242,"line":3703},[240,11409,3983],{"class":257},[240,11411,11412,11415,11417,11420],{"class":242,"line":3708},[240,11413,11414],{"class":257},"        tArray[i].tName ",[240,11416,440],{"class":288},[240,11418,11419],{"class":443}," \"Teacher_\"",[240,11421,274],{"class":257},[240,11423,11424,11426,11429],{"class":242,"line":3713},[240,11425,11414],{"class":257},[240,11427,11428],{"class":288},"+=",[240,11430,11431],{"class":257},"nameSeed[i];\n",[240,11433,11434],{"class":242,"line":3718},[240,11435,4353],{"emptyLinePlaceholder":2051},[240,11437,11438],{"class":242,"line":3732},[240,11439,11440],{"class":246},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[240,11442,11443,11445,11447,11449,11452,11454,11456,11459,11461,11463,11466,11468],{"class":242,"line":3737},[240,11444,5355],{"class":288},[240,11446,3612],{"class":257},[240,11448,2126],{"class":288},[240,11450,11451],{"class":257}," j ",[240,11453,440],{"class":288},[240,11455,6045],{"class":264},[240,11457,11458],{"class":257},"; j ",[240,11460,431],{"class":288},[240,11462,4101],{"class":264},[240,11464,11465],{"class":257},"; j",[240,11467,4245],{"class":288},[240,11469,2129],{"class":257},[240,11471,11472],{"class":242,"line":4530},[240,11473,4463],{"class":257},[240,11475,11476,11479,11481,11484],{"class":242,"line":4544},[240,11477,11478],{"class":257},"            tArray[i].sArray[j].sName ",[240,11480,440],{"class":288},[240,11482,11483],{"class":443}," \"Student_\"",[240,11485,274],{"class":257},[240,11487,11488,11490,11492],{"class":242,"line":4552},[240,11489,11478],{"class":257},[240,11491,11428],{"class":288},[240,11493,11494],{"class":257}," nameSeed[j];\n",[240,11496,11497,11500,11503,11505,11507,11509,11511,11513,11515,11517,11519],{"class":242,"line":4557},[240,11498,11499],{"class":288},"            int",[240,11501,11502],{"class":257}," random",[240,11504,440],{"class":288},[240,11506,4377],{"class":436},[240,11508,4380],{"class":257},[240,11510,2429],{"class":288},[240,11512,3002],{"class":264},[240,11514,2580],{"class":288},[240,11516,302],{"class":264},[240,11518,2175],{"class":257},[240,11520,11521],{"class":246},"\u002F\u002F40~99\n",[240,11523,11524,11527,11529,11531],{"class":242,"line":4563},[240,11525,11526],{"class":257},"            tArray[i].sArray[j].age ",[240,11528,440],{"class":288},[240,11530,10901],{"class":264},[240,11532,274],{"class":257},[240,11534,11535,11538,11540],{"class":242,"line":4569},[240,11536,11537],{"class":257},"            tArray[i].sArray[j].score ",[240,11539,440],{"class":288},[240,11541,11542],{"class":257}," random;\n",[240,11544,11545],{"class":242,"line":4574},[240,11546,4482],{"class":257},[240,11548,11549],{"class":242,"line":9899},[240,11550,4140],{"class":257},[240,11552,11553],{"class":242,"line":9923},[240,11554,312],{"class":257},[240,11556,11557],{"class":242,"line":9928},[240,11558,11559],{"class":246},"\u002F\u002F打印所有信息的函数\n",[240,11561,11562,11564,11567,11569,11571,11573,11575,11578,11580,11582],{"class":242,"line":9934},[240,11563,7315],{"class":288},[240,11565,11566],{"class":436}," printInfo",[240,11568,789],{"class":257},[240,11570,9710],{"class":288},[240,11572,11350],{"class":436},[240,11574,11353],{"class":792},[240,11576,11577],{"class":257},"[], ",[240,11579,2126],{"class":288},[240,11581,9282],{"class":792},[240,11583,2129],{"class":257},[240,11585,11586],{"class":242,"line":9961},[240,11587,3504],{"class":257},[240,11589,11590,11592,11594,11596,11598,11600,11602,11604,11606,11608,11610],{"class":242,"line":9966},[240,11591,5153],{"class":288},[240,11593,3612],{"class":257},[240,11595,2126],{"class":288},[240,11597,11389],{"class":257},[240,11599,440],{"class":288},[240,11601,6045],{"class":264},[240,11603,11396],{"class":257},[240,11605,431],{"class":288},[240,11607,11401],{"class":257},[240,11609,4245],{"class":288},[240,11611,2129],{"class":257},[240,11613,11614],{"class":242,"line":9972},[240,11615,3983],{"class":257},[240,11617,11618,11621,11623,11626,11628,11631,11633],{"class":242,"line":9984},[240,11619,11620],{"class":257},"        cout ",[240,11622,3137],{"class":288},[240,11624,11625],{"class":443}," \"Teacher: \"",[240,11627,3403],{"class":288},[240,11629,11630],{"class":257}," tArray[i].tName ",[240,11632,3137],{"class":288},[240,11634,10791],{"class":257},[240,11636,11637,11639,11641,11643,11645,11647,11649,11651,11653,11655,11657,11659],{"class":242,"line":9996},[240,11638,5355],{"class":288},[240,11640,3612],{"class":257},[240,11642,2126],{"class":288},[240,11644,11451],{"class":257},[240,11646,440],{"class":288},[240,11648,6045],{"class":264},[240,11650,11458],{"class":257},[240,11652,431],{"class":288},[240,11654,4101],{"class":264},[240,11656,11465],{"class":257},[240,11658,4245],{"class":288},[240,11660,2129],{"class":257},[240,11662,11663],{"class":242,"line":10008},[240,11664,4463],{"class":257},[240,11666,11668,11671,11673,11676,11678,11681,11683,11686,11688],{"class":242,"line":11667},47,[240,11669,11670],{"class":257},"            cout ",[240,11672,3137],{"class":288},[240,11674,11675],{"class":443}," \"",[240,11677,3194],{"class":264},[240,11679,11680],{"class":443},"Student: \"",[240,11682,3403],{"class":288},[240,11684,11685],{"class":257}," tArray[i].sArray[j].sName",[240,11687,3137],{"class":288},[240,11689,3159],{"class":257},[240,11691,11693,11695,11697,11699,11701,11704,11706,11709,11711],{"class":242,"line":11692},48,[240,11694,11670],{"class":257},[240,11696,3137],{"class":288},[240,11698,11675],{"class":443},[240,11700,3194],{"class":264},[240,11702,11703],{"class":443},"Age: \"",[240,11705,3403],{"class":288},[240,11707,11708],{"class":257}," tArray[i].sArray[j].age ",[240,11710,3137],{"class":288},[240,11712,10791],{"class":257},[240,11714,11716,11718,11720,11722,11724,11727,11729,11732,11734],{"class":242,"line":11715},49,[240,11717,11670],{"class":257},[240,11719,3137],{"class":288},[240,11721,11675],{"class":443},[240,11723,3194],{"class":264},[240,11725,11726],{"class":443},"Score: \"",[240,11728,3403],{"class":288},[240,11730,11731],{"class":257}," tArray[i].sArray[j].score ",[240,11733,3137],{"class":288},[240,11735,11736],{"class":257}," endl;   \n",[240,11738,11740],{"class":242,"line":11739},50,[240,11741,4482],{"class":257},[240,11743,11745],{"class":242,"line":11744},51,[240,11746,4140],{"class":257},[240,11748,11750],{"class":242,"line":11749},52,[240,11751,312],{"class":257},[240,11753,11755,11757,11759],{"class":242,"line":11754},53,[240,11756,2126],{"class":288},[240,11758,3926],{"class":436},[240,11760,3929],{"class":257},[240,11762,11764],{"class":242,"line":11763},54,[240,11765,3504],{"class":257},[240,11767,11769],{"class":242,"line":11768},55,[240,11770,11771],{"class":246},"    \u002F\u002F随机数种子\n",[240,11773,11775,11777,11779,11781,11783,11785,11787,11789,11791],{"class":242,"line":11774},56,[240,11776,4326],{"class":436},[240,11778,4329],{"class":257},[240,11780,4332],{"class":288},[240,11782,4335],{"class":288},[240,11784,2529],{"class":257},[240,11786,4340],{"class":436},[240,11788,789],{"class":257},[240,11790,4345],{"class":264},[240,11792,4348],{"class":257},[240,11794,11796],{"class":242,"line":11795},57,[240,11797,11798],{"class":246},"    \u002F\u002F1.创建3名老师的数组\n",[240,11800,11802,11804,11806,11809,11811],{"class":242,"line":11801},58,[240,11803,9846],{"class":288},[240,11805,11350],{"class":436},[240,11807,11808],{"class":257}," tArray[",[240,11810,1692],{"class":264},[240,11812,6642],{"class":257},[240,11814,11816],{"class":242,"line":11815},59,[240,11817,11818],{"class":246},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[240,11820,11822,11824,11827,11829,11832,11835,11837,11839,11842,11844],{"class":242,"line":11821},60,[240,11823,3938],{"class":288},[240,11825,11826],{"class":257}," len ",[240,11828,440],{"class":288},[240,11830,11831],{"class":288}," sizeof",[240,11833,11834],{"class":257},"(tArray) ",[240,11836,2683],{"class":288},[240,11838,11831],{"class":288},[240,11840,11841],{"class":257},"(tArray[",[240,11843,1274],{"class":264},[240,11845,5808],{"class":257},[240,11847,11849,11852],{"class":242,"line":11848},61,[240,11850,11851],{"class":436},"    allocateSpace",[240,11853,11854],{"class":257},"(tArray, len);\n",[240,11856,11858],{"class":242,"line":11857},62,[240,11859,11860],{"class":246},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[240,11862,11864,11867],{"class":242,"line":11863},63,[240,11865,11866],{"class":436},"    printInfo",[240,11868,11854],{"class":257},[240,11870,11872],{"class":242,"line":11871},64,[240,11873,4353],{"emptyLinePlaceholder":2051},[240,11875,11877],{"class":242,"line":11876},65,[240,11878,312],{"class":257},[1826,11880,11881],{"start":250},[1829,11882,11883,11886],{},[68,11884,11885],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[19,11888,11889],{},"五名英雄信息如下：",[231,11891,11895],{"className":11892,"code":11893,"language":11894,"meta":236,"style":236},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[23,11896,11897,11915,11932,11949,11966],{"__ignoreMap":236},[240,11898,11899,11901,11904,11906,11908,11910,11913],{"class":242,"line":243},[240,11900,6869],{"class":257},[240,11902,11903],{"class":443},"\"刘备\"",[240,11905,2479],{"class":257},[240,11907,2872],{"class":264},[240,11909,2479],{"class":257},[240,11911,11912],{"class":443},"\"男\"",[240,11914,6882],{"class":257},[240,11916,11917,11919,11922,11924,11926,11928,11930],{"class":242,"line":250},[240,11918,6869],{"class":257},[240,11920,11921],{"class":443},"\"关羽\"",[240,11923,2479],{"class":257},[240,11925,2847],{"class":264},[240,11927,2479],{"class":257},[240,11929,11912],{"class":443},[240,11931,6882],{"class":257},[240,11933,11934,11936,11939,11941,11943,11945,11947],{"class":242,"line":261},[240,11935,6869],{"class":257},[240,11937,11938],{"class":443},"\"张飞\"",[240,11940,2479],{"class":257},[240,11942,1000],{"class":264},[240,11944,2479],{"class":257},[240,11946,11912],{"class":443},[240,11948,6882],{"class":257},[240,11950,11951,11953,11956,11958,11960,11962,11964],{"class":242,"line":277},[240,11952,6869],{"class":257},[240,11954,11955],{"class":443},"\"赵云\"",[240,11957,2479],{"class":257},[240,11959,2822],{"class":264},[240,11961,2479],{"class":257},[240,11963,11912],{"class":443},[240,11965,6882],{"class":257},[240,11967,11968,11970,11973,11975,11977,11979,11982],{"class":242,"line":294},[240,11969,6869],{"class":257},[240,11971,11972],{"class":443},"\"貂蝉\"",[240,11974,2479],{"class":257},[240,11976,2773],{"class":264},[240,11978,2479],{"class":257},[240,11980,11981],{"class":443},"\"女\"",[240,11983,6882],{"class":257},[19,11985,11986],{},"代码：",[231,11988,11990],{"className":2112,"code":11989,"language":2114,"meta":236,"style":236},"#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",[23,11991,11992,11998,12008,12014,12021,12025,12029,12035,12040,12044,12049,12072,12076,12101,12105,12138,12143,12172,12177,12192,12218,12238,12243,12248,12252,12256,12261,12283,12287,12311,12315,12377,12381,12385,12393,12397,12402,12413,12417,12433,12449,12465,12481,12497,12501,12521,12543,12548,12561,12568,12573,12579,12584,12597,12603],{"__ignoreMap":236},[240,11993,11994,11996],{"class":242,"line":243},[240,11995,3903],{"class":288},[240,11997,3906],{"class":443},[240,11999,12000,12002,12004,12006],{"class":242,"line":250},[240,12001,3911],{"class":288},[240,12003,3914],{"class":288},[240,12005,3917],{"class":436},[240,12007,274],{"class":257},[240,12009,12010,12012],{"class":242,"line":261},[240,12011,3903],{"class":288},[240,12013,9700],{"class":443},[240,12015,12016,12018],{"class":242,"line":277},[240,12017,9710],{"class":288},[240,12019,12020],{"class":436}," Sanguo\n",[240,12022,12023],{"class":242,"line":294},[240,12024,3504],{"class":257},[240,12026,12027],{"class":242,"line":309},[240,12028,9736],{"class":257},[240,12030,12031,12033],{"class":242,"line":529},[240,12032,3938],{"class":288},[240,12034,9748],{"class":257},[240,12036,12037],{"class":242,"line":549},[240,12038,12039],{"class":257},"    string gender;\n",[240,12041,12042],{"class":242,"line":569},[240,12043,5947],{"class":257},[240,12045,12046],{"class":242,"line":589},[240,12047,12048],{"class":246},"\u002F\u002F定义排序函数\n",[240,12050,12051,12053,12055,12057,12060,12062,12064,12066,12068,12070],{"class":242,"line":715},[240,12052,7315],{"class":288},[240,12054,9267],{"class":436},[240,12056,789],{"class":257},[240,12058,12059],{"class":436},"Sanguo",[240,12061,8469],{"class":288},[240,12063,2793],{"class":792},[240,12065,2479],{"class":257},[240,12067,2126],{"class":288},[240,12069,9282],{"class":792},[240,12071,2129],{"class":257},[240,12073,12074],{"class":242,"line":727},[240,12075,3504],{"class":257},[240,12077,12078,12080,12082,12084,12086,12088,12090,12092,12094,12097,12099],{"class":242,"line":1730},[240,12079,5153],{"class":288},[240,12081,789],{"class":257},[240,12083,2126],{"class":288},[240,12085,4984],{"class":257},[240,12087,440],{"class":288},[240,12089,1274],{"class":264},[240,12091,4991],{"class":257},[240,12093,431],{"class":288},[240,12095,12096],{"class":257},"len;i",[240,12098,4245],{"class":288},[240,12100,2129],{"class":257},[240,12102,12103],{"class":242,"line":3582},[240,12104,3983],{"class":257},[240,12106,12107,12110,12112,12114,12116,12118,12120,12122,12124,12126,12128,12130,12132,12134,12136],{"class":242,"line":3596},[240,12108,12109],{"class":288},"     for",[240,12111,3612],{"class":257},[240,12113,2126],{"class":288},[240,12115,5362],{"class":257},[240,12117,440],{"class":288},[240,12119,1274],{"class":264},[240,12121,5369],{"class":257},[240,12123,431],{"class":288},[240,12125,9309],{"class":257},[240,12127,2631],{"class":288},[240,12129,1643],{"class":264},[240,12131,2631],{"class":288},[240,12133,5502],{"class":257},[240,12135,4245],{"class":288},[240,12137,2129],{"class":257},[240,12139,12140],{"class":242,"line":3601},[240,12141,12142],{"class":257},"     {\n",[240,12144,12145,12148,12151,12153,12156,12158,12161,12163,12165,12167,12169],{"class":242,"line":3607},[240,12146,12147],{"class":288},"         if",[240,12149,12150],{"class":257}," ((s",[240,12152,2580],{"class":288},[240,12154,12155],{"class":257},"j)->age ",[240,12157,3053],{"class":288},[240,12159,12160],{"class":257}," (s",[240,12162,2580],{"class":288},[240,12164,2566],{"class":257},[240,12166,2580],{"class":288},[240,12168,1643],{"class":264},[240,12170,12171],{"class":257},")->age)\n",[240,12173,12174],{"class":242,"line":3628},[240,12175,12176],{"class":257},"         {\n",[240,12178,12179,12182,12184,12187,12189],{"class":242,"line":3633},[240,12180,12181],{"class":257},"             Sanguo temp",[240,12183,9104],{"class":288},[240,12185,12186],{"class":257},"(s",[240,12188,2580],{"class":288},[240,12190,12191],{"class":257},"j);\n",[240,12193,12194,12197,12199,12201,12204,12206,12208,12210,12212,12214,12216],{"class":242,"line":3647},[240,12195,12196],{"class":288},"             *",[240,12198,12186],{"class":257},[240,12200,2580],{"class":288},[240,12202,12203],{"class":257},"j)",[240,12205,9104],{"class":288},[240,12207,12186],{"class":257},[240,12209,2580],{"class":288},[240,12211,2566],{"class":257},[240,12213,2580],{"class":288},[240,12215,1643],{"class":264},[240,12217,796],{"class":257},[240,12219,12220,12222,12224,12226,12228,12230,12232,12234,12236],{"class":242,"line":3652},[240,12221,12196],{"class":288},[240,12223,12186],{"class":257},[240,12225,2580],{"class":288},[240,12227,2566],{"class":257},[240,12229,2580],{"class":288},[240,12231,1643],{"class":264},[240,12233,2529],{"class":257},[240,12235,440],{"class":288},[240,12237,6232],{"class":257},[240,12239,12240],{"class":242,"line":3681},[240,12241,12242],{"class":257},"         }\n",[240,12244,12245],{"class":242,"line":3686},[240,12246,12247],{"class":257},"     }\n",[240,12249,12250],{"class":242,"line":3703},[240,12251,4140],{"class":257},[240,12253,12254],{"class":242,"line":3708},[240,12255,312],{"class":257},[240,12257,12258],{"class":242,"line":3713},[240,12259,12260],{"class":246},"\u002F\u002F定义打印函数\n",[240,12262,12263,12265,12267,12269,12271,12273,12275,12277,12279,12281],{"class":242,"line":3718},[240,12264,7315],{"class":288},[240,12266,11566],{"class":436},[240,12268,789],{"class":257},[240,12270,12059],{"class":436},[240,12272,8469],{"class":288},[240,12274,2793],{"class":792},[240,12276,2479],{"class":257},[240,12278,2126],{"class":288},[240,12280,9282],{"class":792},[240,12282,2129],{"class":257},[240,12284,12285],{"class":242,"line":3732},[240,12286,3504],{"class":257},[240,12288,12289,12291,12293,12295,12297,12299,12301,12303,12305,12307,12309],{"class":242,"line":3737},[240,12290,5153],{"class":288},[240,12292,3612],{"class":257},[240,12294,2126],{"class":288},[240,12296,4984],{"class":257},[240,12298,440],{"class":288},[240,12300,1274],{"class":264},[240,12302,4991],{"class":257},[240,12304,431],{"class":288},[240,12306,12096],{"class":257},[240,12308,4245],{"class":288},[240,12310,2129],{"class":257},[240,12312,12313],{"class":242,"line":4530},[240,12314,3983],{"class":257},[240,12316,12317,12319,12321,12323,12325,12328,12330,12332,12334,12337,12339,12341,12343,12346,12348,12350,12352,12355,12357,12359,12361,12364,12366,12368,12370,12373,12375],{"class":242,"line":4544},[240,12318,5403],{"class":257},[240,12320,3137],{"class":288},[240,12322,2355],{"class":443},[240,12324,3194],{"class":264},[240,12326,12327],{"class":443},"姓名：\"",[240,12329,3137],{"class":288},[240,12331,12186],{"class":257},[240,12333,2580],{"class":288},[240,12335,12336],{"class":257},"i)->name",[240,12338,3137],{"class":288},[240,12340,2355],{"class":443},[240,12342,3194],{"class":264},[240,12344,12345],{"class":443},"年龄：\"",[240,12347,3137],{"class":288},[240,12349,12186],{"class":257},[240,12351,2580],{"class":288},[240,12353,12354],{"class":257},"i)->age",[240,12356,3137],{"class":288},[240,12358,2355],{"class":443},[240,12360,3194],{"class":264},[240,12362,12363],{"class":443},"性别：\"",[240,12365,3137],{"class":288},[240,12367,12186],{"class":257},[240,12369,2580],{"class":288},[240,12371,12372],{"class":257},"i)->gender",[240,12374,3137],{"class":288},[240,12376,3159],{"class":257},[240,12378,12379],{"class":242,"line":4552},[240,12380,4140],{"class":257},[240,12382,12383],{"class":242,"line":4557},[240,12384,312],{"class":257},[240,12386,12387,12389,12391],{"class":242,"line":4563},[240,12388,2126],{"class":288},[240,12390,3926],{"class":436},[240,12392,3929],{"class":257},[240,12394,12395],{"class":242,"line":4569},[240,12396,3504],{"class":257},[240,12398,12399],{"class":242,"line":4574},[240,12400,12401],{"class":246},"    \u002F\u002F定义结构体变量\n",[240,12403,12404,12407,12409,12411],{"class":242,"line":9899},[240,12405,12406],{"class":257},"    Sanguo s1[",[240,12408,1741],{"class":264},[240,12410,3034],{"class":257},[240,12412,6860],{"class":288},[240,12414,12415],{"class":242,"line":9923},[240,12416,3983],{"class":257},[240,12418,12419,12421,12423,12425,12427,12429,12431],{"class":242,"line":9928},[240,12420,6869],{"class":257},[240,12422,11903],{"class":443},[240,12424,2479],{"class":257},[240,12426,2872],{"class":264},[240,12428,2479],{"class":257},[240,12430,11912],{"class":443},[240,12432,6882],{"class":257},[240,12434,12435,12437,12439,12441,12443,12445,12447],{"class":242,"line":9934},[240,12436,6869],{"class":257},[240,12438,11921],{"class":443},[240,12440,2479],{"class":257},[240,12442,2847],{"class":264},[240,12444,2479],{"class":257},[240,12446,11912],{"class":443},[240,12448,6882],{"class":257},[240,12450,12451,12453,12455,12457,12459,12461,12463],{"class":242,"line":9961},[240,12452,6869],{"class":257},[240,12454,11938],{"class":443},[240,12456,2479],{"class":257},[240,12458,1000],{"class":264},[240,12460,2479],{"class":257},[240,12462,11912],{"class":443},[240,12464,6882],{"class":257},[240,12466,12467,12469,12471,12473,12475,12477,12479],{"class":242,"line":9966},[240,12468,6869],{"class":257},[240,12470,11955],{"class":443},[240,12472,2479],{"class":257},[240,12474,2822],{"class":264},[240,12476,2479],{"class":257},[240,12478,11912],{"class":443},[240,12480,6882],{"class":257},[240,12482,12483,12485,12487,12489,12491,12493,12495],{"class":242,"line":9972},[240,12484,6869],{"class":257},[240,12486,11972],{"class":443},[240,12488,2479],{"class":257},[240,12490,2773],{"class":264},[240,12492,2479],{"class":257},[240,12494,11981],{"class":443},[240,12496,6882],{"class":257},[240,12498,12499],{"class":242,"line":9984},[240,12500,6903],{"class":257},[240,12502,12503,12505,12507,12509,12512,12514,12517,12519],{"class":242,"line":9996},[240,12504,3938],{"class":288},[240,12506,9282],{"class":257},[240,12508,6155],{"class":288},[240,12510,12511],{"class":257},"(s1)",[240,12513,6161],{"class":288},[240,12515,12516],{"class":257},"(s1[",[240,12518,1274],{"class":264},[240,12520,5808],{"class":257},[240,12522,12523,12526,12528,12531,12533,12536,12539,12541],{"class":242,"line":10008},[240,12524,12525],{"class":257},"    Sanguo ",[240,12527,2554],{"class":288},[240,12529,12530],{"class":257},"s ",[240,12532,440],{"class":288},[240,12534,12535],{"class":288}," &",[240,12537,12538],{"class":257},"s1[",[240,12540,1274],{"class":264},[240,12542,6642],{"class":257},[240,12544,12545],{"class":242,"line":11667},[240,12546,12547],{"class":246},"    \u002F\u002F排序前：\n",[240,12549,12550,12552,12554,12557,12559],{"class":242,"line":11692},[240,12551,8480],{"class":257},[240,12553,3137],{"class":288},[240,12555,12556],{"class":443}," \"排序前：\"",[240,12558,3403],{"class":288},[240,12560,10791],{"class":257},[240,12562,12563,12565],{"class":242,"line":11715},[240,12564,11866],{"class":436},[240,12566,12567],{"class":257},"(s,len);\n",[240,12569,12570],{"class":242,"line":11739},[240,12571,12572],{"class":246},"    \u002F\u002F调用排序函数\n",[240,12574,12575,12577],{"class":242,"line":11744},[240,12576,9549],{"class":436},[240,12578,12567],{"class":257},[240,12580,12581],{"class":242,"line":11749},[240,12582,12583],{"class":246},"    \u002F\u002F排序后\n",[240,12585,12586,12588,12590,12593,12595],{"class":242,"line":11754},[240,12587,8480],{"class":257},[240,12589,3137],{"class":288},[240,12591,12592],{"class":443}," \"排序后：\"",[240,12594,3403],{"class":288},[240,12596,10791],{"class":257},[240,12598,12599,12601],{"class":242,"line":11763},[240,12600,11866],{"class":436},[240,12602,12567],{"class":257},[240,12604,12605],{"class":242,"line":11768},[240,12606,312],{"class":257},[19,12608,12609,12610,12612],{},"注意：使用指针时直接用传首地址**&s",[240,12611,1274],{},"**",[2019,12614,12615],{},"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":236,"searchDepth":250,"depth":250,"links":12617},[12618,12619,12620,12621,12622,12623,12624],{"id":9654,"depth":250,"text":9655},{"id":10016,"depth":250,"text":10017},{"id":10285,"depth":250,"text":10286},{"id":10450,"depth":250,"text":10451},{"id":10666,"depth":250,"text":10667},{"id":10987,"depth":250,"text":10988},{"id":11215,"depth":250,"text":11216},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":9643,"description":9651},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":12631,"title":12632,"body":12633,"description":236,"extension":2049,"meta":13976,"navigation":2051,"path":13977,"seo":13978,"stem":13979,"__hash__":13980},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":12634,"toc":13970},[12635,12638,12642,12648,12662,12667,12670,12674,12681,12687,12690,12697,12703,12708,12711,12714,12717,13281,13284,13298,13302,13307,13323,13463,13466,13472,13475,13480,13488,13596,13599,13604,13607,13612,13615,13621,13624,13967],[10,12636,12632],{"id":12637},"_5程序内存模型",[14,12639,12641],{"id":12640},"_51内存分区模型","5.1内存分区模型",[19,12643,12644,12645],{},"C++程序在执行时，将内存大方向划分为",[68,12646,12647],{},"4个区域",[3100,12649,12650,12653,12656,12659],{},[1829,12651,12652],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[1829,12654,12655],{},"全局区：存放全局变量和静态变量以及常量",[1829,12657,12658],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[1829,12660,12661],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[19,12663,12664],{},[68,12665,12666],{},"内存四区意义：",[19,12668,12669],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[32,12671,12673],{"id":12672},"_511程序运行前","5.1.1程序运行前",[19,12675,12676,12677,12680],{},"​\t在程序编译后，生成了exe可执行程序，",[68,12678,12679],{},"未执行该程序前","分为两个区域",[19,12682,12683,12684],{},"​\t",[68,12685,12686],{},"代码区：",[19,12688,12689],{},"​\t\t存放 CPU 执行的机器指令",[19,12691,12692,12693,12696],{},"​\t\t代码区是",[68,12694,12695],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[19,12698,12692,12699,12702],{},[68,12700,12701],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[19,12704,12683,12705],{},[68,12706,12707],{},"全局区：",[19,12709,12710],{},"​\t\t全局变量和静态变量存放在此.",[19,12712,12713],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[19,12715,12716],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[231,12718,12720],{"className":2112,"code":12719,"language":2114,"meta":236,"style":236},"\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",[23,12721,12722,12727,12740,12753,12757,12762,12777,12792,12796,12805,12809,12814,12827,12840,12844,12849,12875,12901,12905,12932,12958,12962,12967,12983,12998,13002,13028,13054,13058,13083,13108,13112,13138,13164,13168,13184,13199,13225,13251,13255,13265,13269,13277],{"__ignoreMap":236},[240,12723,12724],{"class":242,"line":243},[240,12725,12726],{"class":246},"\u002F\u002F全局变量\n",[240,12728,12729,12731,12734,12736,12738],{"class":242,"line":250},[240,12730,2126],{"class":288},[240,12732,12733],{"class":257}," g_a ",[240,12735,440],{"class":288},[240,12737,3991],{"class":264},[240,12739,274],{"class":257},[240,12741,12742,12744,12747,12749,12751],{"class":242,"line":261},[240,12743,2126],{"class":288},[240,12745,12746],{"class":257}," g_b ",[240,12748,440],{"class":288},[240,12750,3991],{"class":264},[240,12752,274],{"class":257},[240,12754,12755],{"class":242,"line":277},[240,12756,4353],{"emptyLinePlaceholder":2051},[240,12758,12759],{"class":242,"line":294},[240,12760,12761],{"class":246},"\u002F\u002F全局常量\n",[240,12763,12764,12766,12768,12771,12773,12775],{"class":242,"line":309},[240,12765,8743],{"class":288},[240,12767,4335],{"class":288},[240,12769,12770],{"class":257}," c_g_a ",[240,12772,440],{"class":288},[240,12774,3991],{"class":264},[240,12776,274],{"class":257},[240,12778,12779,12781,12783,12786,12788,12790],{"class":242,"line":529},[240,12780,8743],{"class":288},[240,12782,4335],{"class":288},[240,12784,12785],{"class":257}," c_g_b ",[240,12787,440],{"class":288},[240,12789,3991],{"class":264},[240,12791,274],{"class":257},[240,12793,12794],{"class":242,"line":549},[240,12795,4353],{"emptyLinePlaceholder":2051},[240,12797,12798,12800,12802],{"class":242,"line":569},[240,12799,2126],{"class":288},[240,12801,3926],{"class":436},[240,12803,12804],{"class":257},"() {\n",[240,12806,12807],{"class":242,"line":589},[240,12808,4353],{"emptyLinePlaceholder":2051},[240,12810,12811],{"class":242,"line":715},[240,12812,12813],{"class":246},"    \u002F\u002F局部变量\n",[240,12815,12816,12818,12821,12823,12825],{"class":242,"line":727},[240,12817,3938],{"class":288},[240,12819,12820],{"class":257}," a ",[240,12822,440],{"class":288},[240,12824,3991],{"class":264},[240,12826,274],{"class":257},[240,12828,12829,12831,12834,12836,12838],{"class":242,"line":1730},[240,12830,3938],{"class":288},[240,12832,12833],{"class":257}," b ",[240,12835,440],{"class":288},[240,12837,3991],{"class":264},[240,12839,274],{"class":257},[240,12841,12842],{"class":242,"line":3582},[240,12843,4353],{"emptyLinePlaceholder":2051},[240,12845,12846],{"class":242,"line":3596},[240,12847,12848],{"class":246},"    \u002F\u002F打印地址\n",[240,12850,12851,12853,12855,12858,12860,12862,12864,12866,12868,12871,12873],{"class":242,"line":3601},[240,12852,8480],{"class":257},[240,12854,3137],{"class":288},[240,12856,12857],{"class":443}," \"局部变量a地址为： \"",[240,12859,3403],{"class":288},[240,12861,3612],{"class":257},[240,12863,2126],{"class":288},[240,12865,2529],{"class":257},[240,12867,2454],{"class":288},[240,12869,12870],{"class":257},"a ",[240,12872,3137],{"class":288},[240,12874,10791],{"class":257},[240,12876,12877,12879,12881,12884,12886,12888,12890,12892,12894,12897,12899],{"class":242,"line":3607},[240,12878,8480],{"class":257},[240,12880,3137],{"class":288},[240,12882,12883],{"class":443}," \"局部变量b地址为： \"",[240,12885,3403],{"class":288},[240,12887,3612],{"class":257},[240,12889,2126],{"class":288},[240,12891,2529],{"class":257},[240,12893,2454],{"class":288},[240,12895,12896],{"class":257},"b ",[240,12898,3137],{"class":288},[240,12900,10791],{"class":257},[240,12902,12903],{"class":242,"line":3628},[240,12904,4353],{"emptyLinePlaceholder":2051},[240,12906,12907,12909,12911,12914,12916,12919,12921,12923,12925,12928,12930],{"class":242,"line":3633},[240,12908,8480],{"class":257},[240,12910,3137],{"class":288},[240,12912,12913],{"class":443}," \"全局变量g_a地址为： \"",[240,12915,3403],{"class":288},[240,12917,12918],{"class":257},"  (",[240,12920,2126],{"class":288},[240,12922,2529],{"class":257},[240,12924,2454],{"class":288},[240,12926,12927],{"class":257},"g_a ",[240,12929,3137],{"class":288},[240,12931,10791],{"class":257},[240,12933,12934,12936,12938,12941,12943,12945,12947,12949,12951,12954,12956],{"class":242,"line":3647},[240,12935,8480],{"class":257},[240,12937,3137],{"class":288},[240,12939,12940],{"class":443}," \"全局变量g_b地址为： \"",[240,12942,3403],{"class":288},[240,12944,12918],{"class":257},[240,12946,2126],{"class":288},[240,12948,2529],{"class":257},[240,12950,2454],{"class":288},[240,12952,12953],{"class":257},"g_b ",[240,12955,3137],{"class":288},[240,12957,10791],{"class":257},[240,12959,12960],{"class":242,"line":3652},[240,12961,4353],{"emptyLinePlaceholder":2051},[240,12963,12964],{"class":242,"line":3681},[240,12965,12966],{"class":246},"    \u002F\u002F静态变量\n",[240,12968,12969,12972,12974,12977,12979,12981],{"class":242,"line":3686},[240,12970,12971],{"class":288},"    static",[240,12973,4335],{"class":288},[240,12975,12976],{"class":257}," s_a ",[240,12978,440],{"class":288},[240,12980,3991],{"class":264},[240,12982,274],{"class":257},[240,12984,12985,12987,12989,12992,12994,12996],{"class":242,"line":3703},[240,12986,12971],{"class":288},[240,12988,4335],{"class":288},[240,12990,12991],{"class":257}," s_b ",[240,12993,440],{"class":288},[240,12995,3991],{"class":264},[240,12997,274],{"class":257},[240,12999,13000],{"class":242,"line":3708},[240,13001,4353],{"emptyLinePlaceholder":2051},[240,13003,13004,13006,13008,13011,13013,13015,13017,13019,13021,13024,13026],{"class":242,"line":3713},[240,13005,8480],{"class":257},[240,13007,3137],{"class":288},[240,13009,13010],{"class":443}," \"静态变量s_a地址为： \"",[240,13012,3403],{"class":288},[240,13014,3612],{"class":257},[240,13016,2126],{"class":288},[240,13018,2529],{"class":257},[240,13020,2454],{"class":288},[240,13022,13023],{"class":257},"s_a ",[240,13025,3137],{"class":288},[240,13027,10791],{"class":257},[240,13029,13030,13032,13034,13037,13039,13041,13043,13045,13047,13050,13052],{"class":242,"line":3718},[240,13031,8480],{"class":257},[240,13033,3137],{"class":288},[240,13035,13036],{"class":443}," \"静态变量s_b地址为： \"",[240,13038,3403],{"class":288},[240,13040,3612],{"class":257},[240,13042,2126],{"class":288},[240,13044,2529],{"class":257},[240,13046,2454],{"class":288},[240,13048,13049],{"class":257},"s_b ",[240,13051,3137],{"class":288},[240,13053,10791],{"class":257},[240,13055,13056],{"class":242,"line":3732},[240,13057,4353],{"emptyLinePlaceholder":2051},[240,13059,13060,13062,13064,13067,13069,13071,13073,13075,13077,13079,13081],{"class":242,"line":3737},[240,13061,8480],{"class":257},[240,13063,3137],{"class":288},[240,13065,13066],{"class":443}," \"字符串常量地址为： \"",[240,13068,3403],{"class":288},[240,13070,3612],{"class":257},[240,13072,2126],{"class":288},[240,13074,2529],{"class":257},[240,13076,2454],{"class":288},[240,13078,3154],{"class":443},[240,13080,3403],{"class":288},[240,13082,10791],{"class":257},[240,13084,13085,13087,13089,13091,13093,13095,13097,13099,13101,13104,13106],{"class":242,"line":4530},[240,13086,8480],{"class":257},[240,13088,3137],{"class":288},[240,13090,13066],{"class":443},[240,13092,3403],{"class":288},[240,13094,3612],{"class":257},[240,13096,2126],{"class":288},[240,13098,2529],{"class":257},[240,13100,2454],{"class":288},[240,13102,13103],{"class":443},"\"hello world1\"",[240,13105,3403],{"class":288},[240,13107,10791],{"class":257},[240,13109,13110],{"class":242,"line":4544},[240,13111,4353],{"emptyLinePlaceholder":2051},[240,13113,13114,13116,13118,13121,13123,13125,13127,13129,13131,13134,13136],{"class":242,"line":4552},[240,13115,8480],{"class":257},[240,13117,3137],{"class":288},[240,13119,13120],{"class":443}," \"全局常量c_g_a地址为： \"",[240,13122,3403],{"class":288},[240,13124,3612],{"class":257},[240,13126,2126],{"class":288},[240,13128,2529],{"class":257},[240,13130,2454],{"class":288},[240,13132,13133],{"class":257},"c_g_a ",[240,13135,3137],{"class":288},[240,13137,10791],{"class":257},[240,13139,13140,13142,13144,13147,13149,13151,13153,13155,13157,13160,13162],{"class":242,"line":4557},[240,13141,8480],{"class":257},[240,13143,3137],{"class":288},[240,13145,13146],{"class":443}," \"全局常量c_g_b地址为： \"",[240,13148,3403],{"class":288},[240,13150,3612],{"class":257},[240,13152,2126],{"class":288},[240,13154,2529],{"class":257},[240,13156,2454],{"class":288},[240,13158,13159],{"class":257},"c_g_b ",[240,13161,3137],{"class":288},[240,13163,10791],{"class":257},[240,13165,13166],{"class":242,"line":4563},[240,13167,4353],{"emptyLinePlaceholder":2051},[240,13169,13170,13173,13175,13178,13180,13182],{"class":242,"line":4569},[240,13171,13172],{"class":288},"    const",[240,13174,4335],{"class":288},[240,13176,13177],{"class":257}," c_l_a ",[240,13179,440],{"class":288},[240,13181,3991],{"class":264},[240,13183,274],{"class":257},[240,13185,13186,13188,13190,13193,13195,13197],{"class":242,"line":4574},[240,13187,13172],{"class":288},[240,13189,4335],{"class":288},[240,13191,13192],{"class":257}," c_l_b ",[240,13194,440],{"class":288},[240,13196,3991],{"class":264},[240,13198,274],{"class":257},[240,13200,13201,13203,13205,13208,13210,13212,13214,13216,13218,13221,13223],{"class":242,"line":9899},[240,13202,8480],{"class":257},[240,13204,3137],{"class":288},[240,13206,13207],{"class":443}," \"局部常量c_l_a地址为： \"",[240,13209,3403],{"class":288},[240,13211,3612],{"class":257},[240,13213,2126],{"class":288},[240,13215,2529],{"class":257},[240,13217,2454],{"class":288},[240,13219,13220],{"class":257},"c_l_a ",[240,13222,3137],{"class":288},[240,13224,10791],{"class":257},[240,13226,13227,13229,13231,13234,13236,13238,13240,13242,13244,13247,13249],{"class":242,"line":9923},[240,13228,8480],{"class":257},[240,13230,3137],{"class":288},[240,13232,13233],{"class":443}," \"局部常量c_l_b地址为： \"",[240,13235,3403],{"class":288},[240,13237,3612],{"class":257},[240,13239,2126],{"class":288},[240,13241,2529],{"class":257},[240,13243,2454],{"class":288},[240,13245,13246],{"class":257},"c_l_b ",[240,13248,3137],{"class":288},[240,13250,10791],{"class":257},[240,13252,13253],{"class":242,"line":9928},[240,13254,4353],{"emptyLinePlaceholder":2051},[240,13256,13257,13259,13261,13263],{"class":242,"line":9934},[240,13258,4256],{"class":436},[240,13260,789],{"class":257},[240,13262,4261],{"class":443},[240,13264,796],{"class":257},[240,13266,13267],{"class":242,"line":9961},[240,13268,4353],{"emptyLinePlaceholder":2051},[240,13270,13271,13273,13275],{"class":242,"line":9966},[240,13272,6042],{"class":288},[240,13274,6045],{"class":264},[240,13276,274],{"class":257},[240,13278,13279],{"class":242,"line":9972},[240,13280,312],{"class":257},[19,13282,13283],{},"总结：",[3100,13285,13286,13289,13292,13295],{},[1829,13287,13288],{},"c++中程序运行前分为全局区和代码区",[1829,13290,13291],{},"代码区特点是共享和只读",[1829,13293,13294],{},"全局区中存放全局变量、静态变量、常量",[1829,13296,13297],{},"常量区中存放const修饰的全局常量和字符串常量",[32,13299,13301],{"id":13300},"_512程序运行后","5.1.2程序运行后",[1826,13303,13304],{},[1829,13305,13306],{},"栈区：",[3100,13308,13309,13316],{},[1829,13310,13311,13312,13315],{},"由编译器自动分配释放, 存放",[68,13313,13314],{},"函数的参数值,局部变量","等",[1829,13317,13318,13319,13322],{},"注意事项：",[68,13320,13321],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[231,13324,13326],{"className":2112,"code":13325,"language":2114,"meta":236,"style":236},"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",[23,13327,13328,13339,13343,13358,13370,13374,13378,13386,13391,13406,13424,13441,13451,13459],{"__ignoreMap":236},[240,13329,13330,13332,13334,13337],{"class":242,"line":243},[240,13331,2126],{"class":288},[240,13333,8469],{"class":288},[240,13335,13336],{"class":436}," func",[240,13338,3929],{"class":257},[240,13340,13341],{"class":242,"line":250},[240,13342,3504],{"class":257},[240,13344,13345,13347,13349,13351,13353,13355],{"class":242,"line":261},[240,13346,3938],{"class":288},[240,13348,12820],{"class":257},[240,13350,440],{"class":288},[240,13352,3991],{"class":264},[240,13354,2175],{"class":257},[240,13356,13357],{"class":246}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[240,13359,13360,13362,13364,13367],{"class":242,"line":277},[240,13361,6042],{"class":288},[240,13363,12535],{"class":288},[240,13365,13366],{"class":257},"a;",[240,13368,13369],{"class":246}," \u002F\u002F放回局部变量的地址\n",[240,13371,13372],{"class":242,"line":294},[240,13373,312],{"class":257},[240,13375,13376],{"class":242,"line":309},[240,13377,4353],{"emptyLinePlaceholder":2051},[240,13379,13380,13382,13384],{"class":242,"line":529},[240,13381,2126],{"class":288},[240,13383,3926],{"class":436},[240,13385,12804],{"class":257},[240,13387,13388],{"class":242,"line":549},[240,13389,13390],{"class":246},"    \u002F\u002F接受func的返回值\n",[240,13392,13393,13395,13397,13400,13402,13404],{"class":242,"line":569},[240,13394,3938],{"class":288},[240,13396,8469],{"class":288},[240,13398,13399],{"class":257},"p ",[240,13401,440],{"class":288},[240,13403,13336],{"class":436},[240,13405,7587],{"class":257},[240,13407,13408,13410,13412,13414,13416,13418,13421],{"class":242,"line":589},[240,13409,8480],{"class":257},[240,13411,3137],{"class":288},[240,13413,8469],{"class":288},[240,13415,13399],{"class":257},[240,13417,3137],{"class":288},[240,13419,13420],{"class":257}," endl;",[240,13422,13423],{"class":246}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[240,13425,13426,13428,13430,13432,13434,13436,13438],{"class":242,"line":715},[240,13427,8480],{"class":257},[240,13429,3137],{"class":288},[240,13431,8469],{"class":288},[240,13433,13399],{"class":257},[240,13435,3137],{"class":288},[240,13437,13420],{"class":257},[240,13439,13440],{"class":246}," \u002F\u002F第二次这个数据不再保留\n",[240,13442,13443,13445,13447,13449],{"class":242,"line":727},[240,13444,4256],{"class":436},[240,13446,789],{"class":257},[240,13448,4261],{"class":443},[240,13450,796],{"class":257},[240,13452,13453,13455,13457],{"class":242,"line":1730},[240,13454,6042],{"class":288},[240,13456,6045],{"class":264},[240,13458,274],{"class":257},[240,13460,13461],{"class":242,"line":3582},[240,13462,312],{"class":257},[19,13464,13465],{},"输出结果：",[19,13467,13468],{},[219,13469],{"alt":13470,"src":13471},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[19,13473,13474],{},"总结：不要返回局部变量的地址",[1826,13476,13477],{"start":250},[1829,13478,13479],{},"堆区",[3100,13481,13482,13485],{},[1829,13483,13484],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[1829,13486,13487],{},"在c++中主要利用new在堆区开辟内存",[231,13489,13491],{"className":2112,"code":13490,"language":2114,"meta":236,"style":236},"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",[23,13492,13493,13508,13512,13517,13538,13545,13549,13557,13561,13566,13580,13592],{"__ignoreMap":236},[240,13494,13495,13497,13500,13503,13505],{"class":242,"line":243},[240,13496,2126],{"class":288},[240,13498,13499],{"class":288},"  *",[240,13501,13502],{"class":436},"func",[240,13504,4380],{"class":257},[240,13506,13507],{"class":246},"  \u002F\u002F函数返回指针\n",[240,13509,13510],{"class":242,"line":250},[240,13511,3504],{"class":257},[240,13513,13514],{"class":242,"line":261},[240,13515,13516],{"class":246},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[240,13518,13519,13521,13523,13525,13527,13530,13532,13534,13536],{"class":242,"line":277},[240,13520,6099],{"class":288},[240,13522,8469],{"class":288},[240,13524,19],{"class":257},[240,13526,440],{"class":288},[240,13528,13529],{"class":288}," new",[240,13531,4335],{"class":288},[240,13533,789],{"class":257},[240,13535,2546],{"class":264},[240,13537,796],{"class":257},[240,13539,13540,13542],{"class":242,"line":294},[240,13541,6333],{"class":288},[240,13543,13544],{"class":257}," p;\n",[240,13546,13547],{"class":242,"line":309},[240,13548,312],{"class":257},[240,13550,13551,13553,13555],{"class":242,"line":529},[240,13552,2126],{"class":288},[240,13554,3926],{"class":436},[240,13556,3929],{"class":257},[240,13558,13559],{"class":242,"line":549},[240,13560,3504],{"class":257},[240,13562,13563],{"class":242,"line":569},[240,13564,13565],{"class":246},"    \u002F\u002F在堆区开辟数据\n",[240,13567,13568,13570,13572,13574,13576,13578],{"class":242,"line":589},[240,13569,3938],{"class":288},[240,13571,8469],{"class":288},[240,13573,19],{"class":257},[240,13575,440],{"class":288},[240,13577,13502],{"class":436},[240,13579,7587],{"class":257},[240,13581,13582,13584,13586,13588,13590],{"class":242,"line":715},[240,13583,3509],{"class":257},[240,13585,8370],{"class":288},[240,13587,19],{"class":257},[240,13589,3137],{"class":288},[240,13591,3159],{"class":257},[240,13593,13594],{"class":242,"line":727},[240,13595,312],{"class":257},[19,13597,13598],{},"图片展示：",[19,13600,13601],{},[219,13602],{"alt":13470,"src":13603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[19,13605,13606],{},"堆区内存由程序员管生死！！！",[1826,13608,13609],{"start":261},[1829,13610,13611],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[19,13613,13614],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[19,13616,13617,13618],{},"​语法：",[23,13619,13620],{}," new 数据类型",[19,13622,13623],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[231,13625,13627],{"className":2112,"code":13626,"language":2114,"meta":236,"style":236},"\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",[23,13628,13629,13634,13644,13648,13653,13658,13680,13684,13692,13696,13710,13722,13734,13746,13751,13756,13767,13771,13776,13784,13788,13793,13815,13841,13845,13863,13867,13893,13897,13909,13913,13918,13923,13931,13935,13939,13947,13951,13957,13963],{"__ignoreMap":236},[240,13630,13631],{"class":242,"line":243},[240,13632,13633],{"class":246},"\u002F\u002F1.new的基本语法\n",[240,13635,13636,13638,13640,13642],{"class":242,"line":250},[240,13637,2126],{"class":288},[240,13639,8469],{"class":288},[240,13641,13502],{"class":436},[240,13643,3929],{"class":257},[240,13645,13646],{"class":242,"line":261},[240,13647,3504],{"class":257},[240,13649,13650],{"class":242,"line":277},[240,13651,13652],{"class":246},"    \u002F\u002F在堆区创建整型数据\n",[240,13654,13655],{"class":242,"line":294},[240,13656,13657],{"class":246},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[240,13659,13660,13662,13664,13666,13669,13671,13673,13675,13677],{"class":242,"line":309},[240,13661,3938],{"class":288},[240,13663,8469],{"class":288},[240,13665,19],{"class":257},[240,13667,13668],{"class":288},"=new",[240,13670,4335],{"class":288},[240,13672,789],{"class":257},[240,13674,2546],{"class":264},[240,13676,7917],{"class":257},[240,13678,13679],{"class":246},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[240,13681,13682],{"class":242,"line":529},[240,13683,312],{"class":257},[240,13685,13686,13688,13690],{"class":242,"line":549},[240,13687,7315],{"class":288},[240,13689,7539],{"class":436},[240,13691,3929],{"class":257},[240,13693,13694],{"class":242,"line":569},[240,13695,3504],{"class":257},[240,13697,13698,13700,13702,13704,13706,13708],{"class":242,"line":589},[240,13699,3938],{"class":288},[240,13701,8469],{"class":288},[240,13703,19],{"class":257},[240,13705,440],{"class":288},[240,13707,13502],{"class":436},[240,13709,7587],{"class":257},[240,13711,13712,13714,13716,13718,13720],{"class":242,"line":715},[240,13713,3509],{"class":257},[240,13715,8370],{"class":288},[240,13717,19],{"class":257},[240,13719,3137],{"class":288},[240,13721,3159],{"class":257},[240,13723,13724,13726,13728,13730,13732],{"class":242,"line":727},[240,13725,3509],{"class":257},[240,13727,8370],{"class":288},[240,13729,19],{"class":257},[240,13731,3137],{"class":288},[240,13733,3159],{"class":257},[240,13735,13736,13738,13740,13742,13744],{"class":242,"line":1730},[240,13737,3509],{"class":257},[240,13739,8370],{"class":288},[240,13741,19],{"class":257},[240,13743,3137],{"class":288},[240,13745,3159],{"class":257},[240,13747,13748],{"class":242,"line":3582},[240,13749,13750],{"class":246},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[240,13752,13753],{"class":242,"line":3596},[240,13754,13755],{"class":246},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[240,13757,13758,13761,13764],{"class":242,"line":3601},[240,13759,13760],{"class":288},"    delete",[240,13762,13763],{"class":257}," p;",[240,13765,13766],{"class":246},"\u002F\u002F删除这块地址\n",[240,13768,13769],{"class":242,"line":3607},[240,13770,312],{"class":257},[240,13772,13773],{"class":242,"line":3628},[240,13774,13775],{"class":246},"\u002F\u002F2.在堆区利用new开辟数组\n",[240,13777,13778,13780,13782],{"class":242,"line":3633},[240,13779,7315],{"class":288},[240,13781,7608],{"class":436},[240,13783,3929],{"class":257},[240,13785,13786],{"class":242,"line":3647},[240,13787,3504],{"class":257},[240,13789,13790],{"class":242,"line":3652},[240,13791,13792],{"class":246},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[240,13794,13795,13797,13799,13801,13803,13805,13807,13809,13812],{"class":242,"line":3681},[240,13796,3938],{"class":288},[240,13798,8469],{"class":288},[240,13800,5832],{"class":257},[240,13802,13668],{"class":288},[240,13804,4335],{"class":288},[240,13806,2985],{"class":257},[240,13808,2546],{"class":264},[240,13810,13811],{"class":257},"];",[240,13813,13814],{"class":246},"\u002F\u002F10代表数组有10个元素\n",[240,13816,13817,13819,13821,13823,13825,13827,13829,13831,13833,13835,13837,13839],{"class":242,"line":3686},[240,13818,5153],{"class":288},[240,13820,3612],{"class":257},[240,13822,2126],{"class":288},[240,13824,4984],{"class":257},[240,13826,440],{"class":288},[240,13828,1274],{"class":264},[240,13830,4991],{"class":257},[240,13832,431],{"class":288},[240,13834,2546],{"class":264},[240,13836,4991],{"class":257},[240,13838,4245],{"class":288},[240,13840,2129],{"class":257},[240,13842,13843],{"class":242,"line":3703},[240,13844,3983],{"class":257},[240,13846,13847,13850,13852,13854,13856,13858,13860],{"class":242,"line":3708},[240,13848,13849],{"class":257},"        arr[i]",[240,13851,440],{"class":288},[240,13853,2541],{"class":257},[240,13855,2580],{"class":288},[240,13857,285],{"class":264},[240,13859,2175],{"class":257},[240,13861,13862],{"class":246},"\u002F\u002F给10个元素赋值100～109\n",[240,13864,13865],{"class":242,"line":3713},[240,13866,4140],{"class":257},[240,13868,13869,13871,13873,13875,13877,13879,13881,13883,13885,13887,13889,13891],{"class":242,"line":3718},[240,13870,5153],{"class":288},[240,13872,3612],{"class":257},[240,13874,2126],{"class":288},[240,13876,4984],{"class":257},[240,13878,440],{"class":288},[240,13880,1274],{"class":264},[240,13882,4991],{"class":257},[240,13884,431],{"class":288},[240,13886,2546],{"class":264},[240,13888,4991],{"class":257},[240,13890,4245],{"class":288},[240,13892,2129],{"class":257},[240,13894,13895],{"class":242,"line":3732},[240,13896,3983],{"class":257},[240,13898,13899,13901,13903,13905,13907],{"class":242,"line":3737},[240,13900,5403],{"class":257},[240,13902,3137],{"class":288},[240,13904,6306],{"class":257},[240,13906,3137],{"class":288},[240,13908,3159],{"class":257},[240,13910,13911],{"class":242,"line":4530},[240,13912,4140],{"class":257},[240,13914,13915],{"class":242,"line":4544},[240,13916,13917],{"class":246},"    \u002F\u002F释放堆区数组\n",[240,13919,13920],{"class":242,"line":4552},[240,13921,13922],{"class":246},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[240,13924,13925,13928],{"class":242,"line":4557},[240,13926,13927],{"class":288},"    delete[]",[240,13929,13930],{"class":257}," arr;\n",[240,13932,13933],{"class":242,"line":4563},[240,13934,312],{"class":257},[240,13936,13937],{"class":242,"line":4569},[240,13938,4353],{"emptyLinePlaceholder":2051},[240,13940,13941,13943,13945],{"class":242,"line":4574},[240,13942,2126],{"class":288},[240,13944,3926],{"class":436},[240,13946,3929],{"class":257},[240,13948,13949],{"class":242,"line":9899},[240,13950,3504],{"class":257},[240,13952,13953,13955],{"class":242,"line":9923},[240,13954,7584],{"class":436},[240,13956,7587],{"class":257},[240,13958,13959,13961],{"class":242,"line":9928},[240,13960,7653],{"class":436},[240,13962,7587],{"class":257},[240,13964,13965],{"class":242,"line":9934},[240,13966,312],{"class":257},[2019,13968,13969],{},"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":236,"searchDepth":250,"depth":250,"links":13971},[13972],{"id":12640,"depth":250,"text":12641,"children":13973},[13974,13975],{"id":12672,"depth":261,"text":12673},{"id":13300,"depth":261,"text":13301},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":12632,"description":236},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":13982,"title":13983,"body":13984,"description":236,"extension":2049,"meta":15464,"navigation":2051,"path":15465,"seo":15466,"stem":15467,"__hash__":15468},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":13985,"toc":15456},[13986,13989,13993,13996,13999,14168,14172,14177,14194,14199,14351,14355,14358,14361,14754,14758,14761,14766,14769,15081,15085,15091,15251,15253,15261,15265,15268,15275,15453],[10,13987,13983],{"id":13988},"_6引用",[14,13990,13992],{"id":13991},"_61引用基本用法","6.1引用基本用法",[19,13994,13995],{},"引用的本质：给变量起别名",[19,13997,13998],{},"语法：数据类型 &别名=原名",[231,14000,14002],{"className":2112,"code":14001,"language":2114,"meta":236,"style":236},"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",[23,14003,14004,14012,14016,14028,14040,14044,14063,14082,14086,14097,14101,14120,14138,14142,14152,14156,14164],{"__ignoreMap":236},[240,14005,14006,14008,14010],{"class":242,"line":243},[240,14007,2126],{"class":288},[240,14009,3926],{"class":436},[240,14011,12804],{"class":257},[240,14013,14014],{"class":242,"line":250},[240,14015,4353],{"emptyLinePlaceholder":2051},[240,14017,14018,14020,14022,14024,14026],{"class":242,"line":261},[240,14019,3938],{"class":288},[240,14021,12820],{"class":257},[240,14023,440],{"class":288},[240,14025,3991],{"class":264},[240,14027,274],{"class":257},[240,14029,14030,14032,14034,14036,14038],{"class":242,"line":277},[240,14031,3938],{"class":288},[240,14033,12535],{"class":288},[240,14035,12896],{"class":257},[240,14037,440],{"class":288},[240,14039,3391],{"class":257},[240,14041,14042],{"class":242,"line":294},[240,14043,4353],{"emptyLinePlaceholder":2051},[240,14045,14046,14048,14050,14053,14055,14057,14059,14061],{"class":242,"line":309},[240,14047,8480],{"class":257},[240,14049,3137],{"class":288},[240,14051,14052],{"class":443}," \"a = \"",[240,14054,3403],{"class":288},[240,14056,12820],{"class":257},[240,14058,3137],{"class":288},[240,14060,13420],{"class":257},[240,14062,9219],{"class":246},[240,14064,14065,14067,14069,14072,14074,14076,14078,14080],{"class":242,"line":529},[240,14066,8480],{"class":257},[240,14068,3137],{"class":288},[240,14070,14071],{"class":443}," \"b = \"",[240,14073,3403],{"class":288},[240,14075,12833],{"class":257},[240,14077,3137],{"class":288},[240,14079,13420],{"class":257},[240,14081,9219],{"class":246},[240,14083,14084],{"class":242,"line":549},[240,14085,4353],{"emptyLinePlaceholder":2051},[240,14087,14088,14091,14093,14095],{"class":242,"line":569},[240,14089,14090],{"class":257},"    b ",[240,14092,440],{"class":288},[240,14094,7705],{"class":264},[240,14096,274],{"class":257},[240,14098,14099],{"class":242,"line":589},[240,14100,4353],{"emptyLinePlaceholder":2051},[240,14102,14103,14105,14107,14109,14111,14113,14115,14117],{"class":242,"line":715},[240,14104,8480],{"class":257},[240,14106,3137],{"class":288},[240,14108,14052],{"class":443},[240,14110,3403],{"class":288},[240,14112,12820],{"class":257},[240,14114,3137],{"class":288},[240,14116,13420],{"class":257},[240,14118,14119],{"class":246},"\u002F\u002F100\n",[240,14121,14122,14124,14126,14128,14130,14132,14134,14136],{"class":242,"line":727},[240,14123,8480],{"class":257},[240,14125,3137],{"class":288},[240,14127,14071],{"class":443},[240,14129,3403],{"class":288},[240,14131,12833],{"class":257},[240,14133,3137],{"class":288},[240,14135,13420],{"class":257},[240,14137,14119],{"class":246},[240,14139,14140],{"class":242,"line":1730},[240,14141,4353],{"emptyLinePlaceholder":2051},[240,14143,14144,14146,14148,14150],{"class":242,"line":3582},[240,14145,4256],{"class":436},[240,14147,789],{"class":257},[240,14149,4261],{"class":443},[240,14151,796],{"class":257},[240,14153,14154],{"class":242,"line":3596},[240,14155,4353],{"emptyLinePlaceholder":2051},[240,14157,14158,14160,14162],{"class":242,"line":3601},[240,14159,6042],{"class":288},[240,14161,6045],{"class":264},[240,14163,274],{"class":257},[240,14165,14166],{"class":242,"line":3607},[240,14167,312],{"class":257},[14,14169,14171],{"id":14170},"_62引用的注意事项","6.2引用的注意事项",[1826,14173,14174],{},[1829,14175,14176],{},"引用必须要初始化",[231,14178,14180],{"className":2112,"code":14179,"language":2114,"meta":236,"style":236},"int &b;\u002F\u002F非常错误！\n",[23,14181,14182],{"__ignoreMap":236},[240,14183,14184,14186,14188,14191],{"class":242,"line":243},[240,14185,2126],{"class":288},[240,14187,12535],{"class":288},[240,14189,14190],{"class":257},"b;",[240,14192,14193],{"class":246},"\u002F\u002F非常错误！\n",[1826,14195,14196],{"start":250},[1829,14197,14198],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[231,14200,14202],{"className":2112,"code":14201,"language":2114,"meta":236,"style":236},"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",[23,14203,14204,14212,14224,14236,14244,14260,14273,14291,14309,14329,14339,14347],{"__ignoreMap":236},[240,14205,14206,14208,14210],{"class":242,"line":243},[240,14207,2126],{"class":288},[240,14209,3926],{"class":436},[240,14211,12804],{"class":257},[240,14213,14214,14216,14218,14220,14222],{"class":242,"line":250},[240,14215,3938],{"class":288},[240,14217,12820],{"class":257},[240,14219,440],{"class":288},[240,14221,3991],{"class":264},[240,14223,274],{"class":257},[240,14225,14226,14228,14230,14232,14234],{"class":242,"line":261},[240,14227,3938],{"class":288},[240,14229,12833],{"class":257},[240,14231,440],{"class":288},[240,14233,10901],{"class":264},[240,14235,274],{"class":257},[240,14237,14238,14241],{"class":242,"line":277},[240,14239,14240],{"class":246},"    \u002F\u002Fint &c;",[240,14242,14243],{"class":246}," \u002F\u002F错误，引用必须初始化\n",[240,14245,14246,14248,14250,14252,14254,14257],{"class":242,"line":294},[240,14247,3938],{"class":288},[240,14249,12535],{"class":288},[240,14251,4898],{"class":257},[240,14253,440],{"class":288},[240,14255,14256],{"class":257}," a;",[240,14258,14259],{"class":246}," \u002F\u002F一旦初始化后，就不可以更改\n",[240,14261,14262,14265,14267,14270],{"class":242,"line":309},[240,14263,14264],{"class":257},"    c ",[240,14266,440],{"class":288},[240,14268,14269],{"class":257}," b;",[240,14271,14272],{"class":246}," \u002F\u002F这是赋值操作，不是更改引用\n",[240,14274,14275,14277,14279,14281,14283,14285,14287,14289],{"class":242,"line":529},[240,14276,8480],{"class":257},[240,14278,3137],{"class":288},[240,14280,14052],{"class":443},[240,14282,3403],{"class":288},[240,14284,12820],{"class":257},[240,14286,3137],{"class":288},[240,14288,13420],{"class":257},[240,14290,9204],{"class":246},[240,14292,14293,14295,14297,14299,14301,14303,14305,14307],{"class":242,"line":549},[240,14294,8480],{"class":257},[240,14296,3137],{"class":288},[240,14298,14071],{"class":443},[240,14300,3403],{"class":288},[240,14302,12833],{"class":257},[240,14304,3137],{"class":288},[240,14306,13420],{"class":257},[240,14308,9204],{"class":246},[240,14310,14311,14313,14315,14318,14320,14323,14325,14327],{"class":242,"line":569},[240,14312,8480],{"class":257},[240,14314,3137],{"class":288},[240,14316,14317],{"class":443}," \"c = \"",[240,14319,3403],{"class":288},[240,14321,14322],{"class":257}," c ",[240,14324,3137],{"class":288},[240,14326,13420],{"class":257},[240,14328,9204],{"class":246},[240,14330,14331,14333,14335,14337],{"class":242,"line":589},[240,14332,4256],{"class":436},[240,14334,789],{"class":257},[240,14336,4261],{"class":443},[240,14338,796],{"class":257},[240,14340,14341,14343,14345],{"class":242,"line":715},[240,14342,6042],{"class":288},[240,14344,6045],{"class":264},[240,14346,274],{"class":257},[240,14348,14349],{"class":242,"line":727},[240,14350,312],{"class":257},[14,14352,14354],{"id":14353},"_63引用做函数参数","6.3引用做函数参数",[19,14356,14357],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[19,14359,14360],{},"优点：可以简化指针修改实参",[231,14362,14364],{"className":2112,"code":14363,"language":2114,"meta":236,"style":236},"\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",[23,14365,14366,14371,14393,14404,14414,14423,14427,14431,14436,14458,14470,14482,14492,14496,14500,14505,14527,14537,14545,14553,14557,14561,14569,14573,14585,14597,14601,14612,14638,14642,14662,14686,14690,14700,14724,14728,14738,14742,14750],{"__ignoreMap":236},[240,14367,14368],{"class":242,"line":243},[240,14369,14370],{"class":246},"\u002F\u002F1. 值传递\n",[240,14372,14373,14375,14378,14380,14382,14384,14386,14388,14390],{"class":242,"line":250},[240,14374,7315],{"class":288},[240,14376,14377],{"class":436}," mySwap01",[240,14379,789],{"class":257},[240,14381,2126],{"class":288},[240,14383,609],{"class":792},[240,14385,1277],{"class":257},[240,14387,2126],{"class":288},[240,14389,4785],{"class":792},[240,14391,14392],{"class":257},") {\n",[240,14394,14395,14397,14400,14402],{"class":242,"line":261},[240,14396,3938],{"class":288},[240,14398,14399],{"class":257}," temp ",[240,14401,440],{"class":288},[240,14403,3391],{"class":257},[240,14405,14406,14409,14411],{"class":242,"line":277},[240,14407,14408],{"class":257},"    a ",[240,14410,440],{"class":288},[240,14412,14413],{"class":257}," b;\n",[240,14415,14416,14418,14420],{"class":242,"line":294},[240,14417,14090],{"class":257},[240,14419,440],{"class":288},[240,14421,14422],{"class":257}," temp;\n",[240,14424,14425],{"class":242,"line":309},[240,14426,312],{"class":257},[240,14428,14429],{"class":242,"line":529},[240,14430,4353],{"emptyLinePlaceholder":2051},[240,14432,14433],{"class":242,"line":549},[240,14434,14435],{"class":246},"\u002F\u002F2. 地址传递\n",[240,14437,14438,14440,14443,14445,14448,14450,14452,14454,14456],{"class":242,"line":569},[240,14439,7315],{"class":288},[240,14441,14442],{"class":436}," mySwap02",[240,14444,789],{"class":257},[240,14446,14447],{"class":288},"int*",[240,14449,609],{"class":792},[240,14451,1277],{"class":257},[240,14453,14447],{"class":288},[240,14455,4785],{"class":792},[240,14457,14392],{"class":257},[240,14459,14460,14462,14464,14466,14468],{"class":242,"line":589},[240,14461,3938],{"class":288},[240,14463,14399],{"class":257},[240,14465,440],{"class":288},[240,14467,8469],{"class":288},[240,14469,8148],{"class":257},[240,14471,14472,14474,14476,14478,14480],{"class":242,"line":715},[240,14473,8354],{"class":288},[240,14475,12870],{"class":257},[240,14477,440],{"class":288},[240,14479,8469],{"class":288},[240,14481,8020],{"class":257},[240,14483,14484,14486,14488,14490],{"class":242,"line":727},[240,14485,8354],{"class":288},[240,14487,12896],{"class":257},[240,14489,440],{"class":288},[240,14491,14422],{"class":257},[240,14493,14494],{"class":242,"line":1730},[240,14495,312],{"class":257},[240,14497,14498],{"class":242,"line":3582},[240,14499,4353],{"emptyLinePlaceholder":2051},[240,14501,14502],{"class":242,"line":3596},[240,14503,14504],{"class":246},"\u002F\u002F3. 引用传递\n",[240,14506,14507,14509,14512,14514,14517,14519,14521,14523,14525],{"class":242,"line":3601},[240,14508,7315],{"class":288},[240,14510,14511],{"class":436}," mySwap03",[240,14513,789],{"class":257},[240,14515,14516],{"class":288},"int&",[240,14518,609],{"class":792},[240,14520,1277],{"class":257},[240,14522,14516],{"class":288},[240,14524,4785],{"class":792},[240,14526,14392],{"class":257},[240,14528,14529,14531,14533,14535],{"class":242,"line":3607},[240,14530,3938],{"class":288},[240,14532,14399],{"class":257},[240,14534,440],{"class":288},[240,14536,3391],{"class":257},[240,14538,14539,14541,14543],{"class":242,"line":3628},[240,14540,14408],{"class":257},[240,14542,440],{"class":288},[240,14544,14413],{"class":257},[240,14546,14547,14549,14551],{"class":242,"line":3633},[240,14548,14090],{"class":257},[240,14550,440],{"class":288},[240,14552,14422],{"class":257},[240,14554,14555],{"class":242,"line":3647},[240,14556,312],{"class":257},[240,14558,14559],{"class":242,"line":3652},[240,14560,4353],{"emptyLinePlaceholder":2051},[240,14562,14563,14565,14567],{"class":242,"line":3681},[240,14564,2126],{"class":288},[240,14566,3926],{"class":436},[240,14568,12804],{"class":257},[240,14570,14571],{"class":242,"line":3686},[240,14572,4353],{"emptyLinePlaceholder":2051},[240,14574,14575,14577,14579,14581,14583],{"class":242,"line":3703},[240,14576,3938],{"class":288},[240,14578,12820],{"class":257},[240,14580,440],{"class":288},[240,14582,3991],{"class":264},[240,14584,274],{"class":257},[240,14586,14587,14589,14591,14593,14595],{"class":242,"line":3708},[240,14588,3938],{"class":288},[240,14590,12833],{"class":257},[240,14592,440],{"class":288},[240,14594,10901],{"class":264},[240,14596,274],{"class":257},[240,14598,14599],{"class":242,"line":3713},[240,14600,4353],{"emptyLinePlaceholder":2051},[240,14602,14603,14606,14609],{"class":242,"line":3718},[240,14604,14605],{"class":436},"    mySwap01",[240,14607,14608],{"class":257},"(a, b);",[240,14610,14611],{"class":246},"\u002F\u002F值传递，形参不会修饰实参\n",[240,14613,14614,14616,14618,14621,14623,14625,14627,14630,14632,14634,14636],{"class":242,"line":3732},[240,14615,8480],{"class":257},[240,14617,3137],{"class":288},[240,14619,14620],{"class":443}," \"a:\"",[240,14622,3403],{"class":288},[240,14624,12820],{"class":257},[240,14626,3137],{"class":288},[240,14628,14629],{"class":443}," \" b:\"",[240,14631,3403],{"class":288},[240,14633,12833],{"class":257},[240,14635,3137],{"class":288},[240,14637,10791],{"class":257},[240,14639,14640],{"class":242,"line":3737},[240,14641,4353],{"emptyLinePlaceholder":2051},[240,14643,14644,14647,14649,14651,14654,14656,14659],{"class":242,"line":4530},[240,14645,14646],{"class":436},"    mySwap02",[240,14648,789],{"class":257},[240,14650,2454],{"class":288},[240,14652,14653],{"class":257},"a, ",[240,14655,2454],{"class":288},[240,14657,14658],{"class":257},"b);",[240,14660,14661],{"class":246},"\u002F\u002F地址传递，形参会修饰实参\n",[240,14663,14664,14666,14668,14670,14672,14674,14676,14678,14680,14682,14684],{"class":242,"line":4544},[240,14665,8480],{"class":257},[240,14667,3137],{"class":288},[240,14669,14620],{"class":443},[240,14671,3403],{"class":288},[240,14673,12820],{"class":257},[240,14675,3137],{"class":288},[240,14677,14629],{"class":443},[240,14679,3403],{"class":288},[240,14681,12833],{"class":257},[240,14683,3137],{"class":288},[240,14685,10791],{"class":257},[240,14687,14688],{"class":242,"line":4552},[240,14689,4353],{"emptyLinePlaceholder":2051},[240,14691,14692,14695,14697],{"class":242,"line":4557},[240,14693,14694],{"class":436},"    mySwap03",[240,14696,14608],{"class":257},[240,14698,14699],{"class":246},"\u002F\u002F引用传递，形参会修饰实参\n",[240,14701,14702,14704,14706,14708,14710,14712,14714,14716,14718,14720,14722],{"class":242,"line":4563},[240,14703,8480],{"class":257},[240,14705,3137],{"class":288},[240,14707,14620],{"class":443},[240,14709,3403],{"class":288},[240,14711,12820],{"class":257},[240,14713,3137],{"class":288},[240,14715,14629],{"class":443},[240,14717,3403],{"class":288},[240,14719,12833],{"class":257},[240,14721,3137],{"class":288},[240,14723,10791],{"class":257},[240,14725,14726],{"class":242,"line":4569},[240,14727,4353],{"emptyLinePlaceholder":2051},[240,14729,14730,14732,14734,14736],{"class":242,"line":4574},[240,14731,4256],{"class":436},[240,14733,789],{"class":257},[240,14735,4261],{"class":443},[240,14737,796],{"class":257},[240,14739,14740],{"class":242,"line":9899},[240,14741,4353],{"emptyLinePlaceholder":2051},[240,14743,14744,14746,14748],{"class":242,"line":9923},[240,14745,6042],{"class":288},[240,14747,6045],{"class":264},[240,14749,274],{"class":257},[240,14751,14752],{"class":242,"line":9928},[240,14753,312],{"class":257},[14,14755,14757],{"id":14756},"_64引用做函数的返回值","6.4引用做函数的返回值",[19,14759,14760],{},"作用：引用是可以作为函数的返回值存在的",[19,14762,10976,14763],{},[68,14764,14765],{},"不要返回局部变量引用",[19,14767,14768],{},"用法：函数调用作为左值",[231,14770,14772],{"className":11892,"code":14771,"language":11894,"meta":236,"style":236},"\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",[23,14773,14774,14779,14787,14802,14808,14812,14816,14821,14829,14846,14852,14856,14860,14868,14872,14877,14891,14911,14930,14934,14939,14952,14972,14990,14994,15010,15014,15033,15051,15055,15065,15069,15077],{"__ignoreMap":236},[240,14775,14776],{"class":242,"line":243},[240,14777,14778],{"class":246},"\u002F\u002F返回局部变量引用\n",[240,14780,14781,14783,14785],{"class":242,"line":250},[240,14782,14516],{"class":288},[240,14784,7539],{"class":436},[240,14786,12804],{"class":257},[240,14788,14789,14791,14793,14795,14797,14799],{"class":242,"line":261},[240,14790,3938],{"class":288},[240,14792,12820],{"class":257},[240,14794,440],{"class":288},[240,14796,3991],{"class":264},[240,14798,2175],{"class":257},[240,14800,14801],{"class":246}," \u002F\u002F局部变量\n",[240,14803,14804,14806],{"class":242,"line":277},[240,14805,6042],{"class":288},[240,14807,3391],{"class":257},[240,14809,14810],{"class":242,"line":294},[240,14811,312],{"class":257},[240,14813,14814],{"class":242,"line":309},[240,14815,4353],{"emptyLinePlaceholder":2051},[240,14817,14818],{"class":242,"line":529},[240,14819,14820],{"class":246},"\u002F\u002F返回静态变量引用\n",[240,14822,14823,14825,14827],{"class":242,"line":549},[240,14824,14516],{"class":288},[240,14826,7608],{"class":436},[240,14828,12804],{"class":257},[240,14830,14831,14833,14835,14837,14839,14841,14843],{"class":242,"line":569},[240,14832,12971],{"class":288},[240,14834,4335],{"class":288},[240,14836,12820],{"class":257},[240,14838,440],{"class":288},[240,14840,10901],{"class":264},[240,14842,2175],{"class":257},[240,14844,14845],{"class":246},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[240,14847,14848,14850],{"class":242,"line":589},[240,14849,6042],{"class":288},[240,14851,3391],{"class":257},[240,14853,14854],{"class":242,"line":715},[240,14855,312],{"class":257},[240,14857,14858],{"class":242,"line":727},[240,14859,4353],{"emptyLinePlaceholder":2051},[240,14861,14862,14864,14866],{"class":242,"line":1730},[240,14863,2126],{"class":288},[240,14865,3926],{"class":436},[240,14867,12804],{"class":257},[240,14869,14870],{"class":242,"line":3582},[240,14871,4353],{"emptyLinePlaceholder":2051},[240,14873,14874],{"class":242,"line":3596},[240,14875,14876],{"class":246},"    \u002F\u002F不能返回局部变量的引用\n",[240,14878,14879,14882,14885,14887,14889],{"class":242,"line":3601},[240,14880,14881],{"class":288},"    int&",[240,14883,14884],{"class":257}," ref ",[240,14886,440],{"class":288},[240,14888,7539],{"class":436},[240,14890,7587],{"class":257},[240,14892,14893,14895,14897,14900,14902,14904,14906,14908],{"class":242,"line":3607},[240,14894,8480],{"class":257},[240,14896,3137],{"class":288},[240,14898,14899],{"class":443}," \"ref = \"",[240,14901,3403],{"class":288},[240,14903,14884],{"class":257},[240,14905,3137],{"class":288},[240,14907,13420],{"class":257},[240,14909,14910],{"class":246},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[240,14912,14913,14915,14917,14919,14921,14923,14925,14927],{"class":242,"line":3628},[240,14914,8480],{"class":257},[240,14916,3137],{"class":288},[240,14918,14899],{"class":443},[240,14920,3403],{"class":288},[240,14922,14884],{"class":257},[240,14924,3137],{"class":288},[240,14926,13420],{"class":257},[240,14928,14929],{"class":246},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[240,14931,14932],{"class":242,"line":3633},[240,14933,4353],{"emptyLinePlaceholder":2051},[240,14935,14936],{"class":242,"line":3647},[240,14937,14938],{"class":246},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[240,14940,14941,14943,14946,14948,14950],{"class":242,"line":3652},[240,14942,14881],{"class":288},[240,14944,14945],{"class":257}," ref2 ",[240,14947,440],{"class":288},[240,14949,7608],{"class":436},[240,14951,7587],{"class":257},[240,14953,14954,14956,14958,14961,14963,14965,14967,14969],{"class":242,"line":3681},[240,14955,8480],{"class":257},[240,14957,3137],{"class":288},[240,14959,14960],{"class":443}," \"ref2 = \"",[240,14962,3403],{"class":288},[240,14964,14945],{"class":257},[240,14966,3137],{"class":288},[240,14968,13420],{"class":257},[240,14970,14971],{"class":246}," \u002F\u002F20\n",[240,14973,14974,14976,14978,14980,14982,14984,14986,14988],{"class":242,"line":3686},[240,14975,8480],{"class":257},[240,14977,3137],{"class":288},[240,14979,14960],{"class":443},[240,14981,3403],{"class":288},[240,14983,14945],{"class":257},[240,14985,3137],{"class":288},[240,14987,13420],{"class":257},[240,14989,14971],{"class":246},[240,14991,14992],{"class":242,"line":3703},[240,14993,4353],{"emptyLinePlaceholder":2051},[240,14995,14996,14998,15001,15003,15005,15007],{"class":242,"line":3708},[240,14997,7653],{"class":436},[240,14999,15000],{"class":257},"() ",[240,15002,440],{"class":288},[240,15004,4951],{"class":264},[240,15006,2175],{"class":257},[240,15008,15009],{"class":246},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[240,15011,15012],{"class":242,"line":3713},[240,15013,4353],{"emptyLinePlaceholder":2051},[240,15015,15016,15018,15020,15022,15024,15026,15028,15030],{"class":242,"line":3718},[240,15017,8480],{"class":257},[240,15019,3137],{"class":288},[240,15021,14960],{"class":443},[240,15023,3403],{"class":288},[240,15025,14945],{"class":257},[240,15027,3137],{"class":288},[240,15029,13420],{"class":257},[240,15031,15032],{"class":246}," \u002F\u002F1000\n",[240,15034,15035,15037,15039,15041,15043,15045,15047,15049],{"class":242,"line":3732},[240,15036,8480],{"class":257},[240,15038,3137],{"class":288},[240,15040,14960],{"class":443},[240,15042,3403],{"class":288},[240,15044,14945],{"class":257},[240,15046,3137],{"class":288},[240,15048,13420],{"class":257},[240,15050,15032],{"class":246},[240,15052,15053],{"class":242,"line":3737},[240,15054,4353],{"emptyLinePlaceholder":2051},[240,15056,15057,15059,15061,15063],{"class":242,"line":4530},[240,15058,4256],{"class":436},[240,15060,789],{"class":257},[240,15062,4261],{"class":443},[240,15064,796],{"class":257},[240,15066,15067],{"class":242,"line":4544},[240,15068,4353],{"emptyLinePlaceholder":2051},[240,15070,15071,15073,15075],{"class":242,"line":4552},[240,15072,6042],{"class":288},[240,15074,6045],{"class":264},[240,15076,274],{"class":257},[240,15078,15079],{"class":242,"line":4557},[240,15080,312],{"class":257},[14,15082,15084],{"id":15083},"_65引用的本质","6.5引用的本质",[19,15086,15087,15088],{},"本质：",[68,15089,15090],{},"引用的本质在c++内部实现是一个指针常量.",[231,15092,15094],{"className":2112,"code":15093,"language":2114,"meta":236,"style":236},"\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",[23,15095,15096,15101,15117,15131,15135,15144,15156,15161,15166,15177,15190,15194,15210,15227,15231,15239,15247],{"__ignoreMap":236},[240,15097,15098],{"class":242,"line":243},[240,15099,15100],{"class":246},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[240,15102,15103,15105,15107,15109,15111,15114],{"class":242,"line":250},[240,15104,7315],{"class":288},[240,15106,13336],{"class":436},[240,15108,789],{"class":257},[240,15110,14516],{"class":288},[240,15112,15113],{"class":792}," ref",[240,15115,15116],{"class":257},"){\n",[240,15118,15119,15122,15124,15126,15128],{"class":242,"line":261},[240,15120,15121],{"class":257},"    ref ",[240,15123,440],{"class":288},[240,15125,7705],{"class":264},[240,15127,2175],{"class":257},[240,15129,15130],{"class":246}," \u002F\u002F ref是引用，转换为*ref = 100\n",[240,15132,15133],{"class":242,"line":277},[240,15134,312],{"class":257},[240,15136,15137,15139,15141],{"class":242,"line":294},[240,15138,2126],{"class":288},[240,15140,3926],{"class":436},[240,15142,15143],{"class":257},"(){\n",[240,15145,15146,15148,15150,15152,15154],{"class":242,"line":309},[240,15147,3938],{"class":288},[240,15149,12820],{"class":257},[240,15151,440],{"class":288},[240,15153,3991],{"class":264},[240,15155,274],{"class":257},[240,15157,15158],{"class":242,"line":529},[240,15159,15160],{"class":257},"    \n",[240,15162,15163],{"class":242,"line":549},[240,15164,15165],{"class":246},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[240,15167,15168,15170,15172,15174],{"class":242,"line":569},[240,15169,14881],{"class":288},[240,15171,14884],{"class":257},[240,15173,440],{"class":288},[240,15175,15176],{"class":257}," a; \n",[240,15178,15179,15181,15183,15185,15187],{"class":242,"line":589},[240,15180,15121],{"class":257},[240,15182,440],{"class":288},[240,15184,10901],{"class":264},[240,15186,2175],{"class":257},[240,15188,15189],{"class":246}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[240,15191,15192],{"class":242,"line":715},[240,15193,15160],{"class":257},[240,15195,15196,15198,15200,15202,15204,15206,15208],{"class":242,"line":727},[240,15197,8480],{"class":257},[240,15199,3137],{"class":288},[240,15201,14620],{"class":443},[240,15203,3403],{"class":288},[240,15205,12820],{"class":257},[240,15207,3137],{"class":288},[240,15209,10791],{"class":257},[240,15211,15212,15214,15216,15219,15221,15223,15225],{"class":242,"line":1730},[240,15213,8480],{"class":257},[240,15215,3137],{"class":288},[240,15217,15218],{"class":443}," \"ref:\"",[240,15220,3403],{"class":288},[240,15222,14884],{"class":257},[240,15224,3137],{"class":288},[240,15226,10791],{"class":257},[240,15228,15229],{"class":242,"line":3582},[240,15230,15160],{"class":257},[240,15232,15233,15236],{"class":242,"line":3596},[240,15234,15235],{"class":436},"    func",[240,15237,15238],{"class":257},"(a);\n",[240,15240,15241,15243,15245],{"class":242,"line":3601},[240,15242,6042],{"class":288},[240,15244,6045],{"class":264},[240,15246,274],{"class":257},[240,15248,15249],{"class":242,"line":3607},[240,15250,312],{"class":257},[19,15252,13283],{},[1826,15254,15255,15258],{},[1829,15256,15257],{},"引用的本质，就是一个指针常量",[1829,15259,15260],{},"引用一旦初始化，就不可以发生改变",[14,15262,15264],{"id":15263},"_66常量引用","6.6常量引用",[19,15266,15267],{},"作用：常量引用主要用来修饰形参",[19,15269,15270,15271,15274],{},"在函数形参列表中，可以加",[68,15272,15273],{},"const修饰形参","，防止形参改变实参",[231,15276,15278],{"className":2112,"code":15277,"language":2114,"meta":236,"style":236},"\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",[23,15279,15280,15285,15290,15309,15314,15327,15331,15335,15343,15347,15352,15357,15371,15375,15383,15395,15399,15404,15416,15423,15427,15437,15441,15449],{"__ignoreMap":236},[240,15281,15282],{"class":242,"line":243},[240,15283,15284],{"class":246},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[240,15286,15287],{"class":242,"line":250},[240,15288,15289],{"class":246},"\u002F\u002F加上const就不能修改实参的\n",[240,15291,15292,15294,15297,15299,15301,15304,15307],{"class":242,"line":261},[240,15293,7315],{"class":288},[240,15295,15296],{"class":436}," showValue",[240,15298,789],{"class":257},[240,15300,8743],{"class":288},[240,15302,15303],{"class":288}," int&",[240,15305,15306],{"class":792}," v",[240,15308,14392],{"class":257},[240,15310,15311],{"class":242,"line":277},[240,15312,15313],{"class":246},"    \u002F\u002Fv += 100;\n",[240,15315,15316,15318,15320,15323,15325],{"class":242,"line":294},[240,15317,8480],{"class":257},[240,15319,3137],{"class":288},[240,15321,15322],{"class":257}," v ",[240,15324,3137],{"class":288},[240,15326,10791],{"class":257},[240,15328,15329],{"class":242,"line":309},[240,15330,312],{"class":257},[240,15332,15333],{"class":242,"line":529},[240,15334,4353],{"emptyLinePlaceholder":2051},[240,15336,15337,15339,15341],{"class":242,"line":549},[240,15338,2126],{"class":288},[240,15340,3926],{"class":436},[240,15342,12804],{"class":257},[240,15344,15345],{"class":242,"line":569},[240,15346,4353],{"emptyLinePlaceholder":2051},[240,15348,15349],{"class":242,"line":589},[240,15350,15351],{"class":246},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[240,15353,15354],{"class":242,"line":715},[240,15355,15356],{"class":246},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[240,15358,15359,15361,15363,15365,15367,15369],{"class":242,"line":727},[240,15360,13172],{"class":288},[240,15362,15303],{"class":288},[240,15364,14884],{"class":257},[240,15366,440],{"class":288},[240,15368,3991],{"class":264},[240,15370,274],{"class":257},[240,15372,15373],{"class":242,"line":1730},[240,15374,4353],{"emptyLinePlaceholder":2051},[240,15376,15377,15380],{"class":242,"line":3582},[240,15378,15379],{"class":246},"    \u002F\u002Fref = 100;",[240,15381,15382],{"class":246},"  \u002F\u002F加入const后不可以修改变量\n",[240,15384,15385,15387,15389,15391,15393],{"class":242,"line":3596},[240,15386,8480],{"class":257},[240,15388,3137],{"class":288},[240,15390,14884],{"class":257},[240,15392,3137],{"class":288},[240,15394,10791],{"class":257},[240,15396,15397],{"class":242,"line":3601},[240,15398,4353],{"emptyLinePlaceholder":2051},[240,15400,15401],{"class":242,"line":3607},[240,15402,15403],{"class":246},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[240,15405,15406,15408,15410,15412,15414],{"class":242,"line":3628},[240,15407,3938],{"class":288},[240,15409,12820],{"class":257},[240,15411,440],{"class":288},[240,15413,3991],{"class":264},[240,15415,274],{"class":257},[240,15417,15418,15421],{"class":242,"line":3633},[240,15419,15420],{"class":436},"    showValue",[240,15422,15238],{"class":257},[240,15424,15425],{"class":242,"line":3647},[240,15426,4353],{"emptyLinePlaceholder":2051},[240,15428,15429,15431,15433,15435],{"class":242,"line":3652},[240,15430,4256],{"class":436},[240,15432,789],{"class":257},[240,15434,4261],{"class":443},[240,15436,796],{"class":257},[240,15438,15439],{"class":242,"line":3681},[240,15440,4353],{"emptyLinePlaceholder":2051},[240,15442,15443,15445,15447],{"class":242,"line":3686},[240,15444,6042],{"class":288},[240,15446,6045],{"class":264},[240,15448,274],{"class":257},[240,15450,15451],{"class":242,"line":3703},[240,15452,312],{"class":257},[2019,15454,15455],{},"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":236,"searchDepth":250,"depth":250,"links":15457},[15458,15459,15460,15461,15462,15463],{"id":13991,"depth":250,"text":13992},{"id":14170,"depth":250,"text":14171},{"id":14353,"depth":250,"text":14354},{"id":14756,"depth":250,"text":14757},{"id":15083,"depth":250,"text":15084},{"id":15263,"depth":250,"text":15264},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":13983,"description":236},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":15470,"title":15471,"body":15472,"description":236,"extension":2049,"meta":16552,"navigation":2051,"path":16553,"seo":16554,"stem":16555,"__hash__":16556},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":15473,"toc":16544},[15474,15477,15481,15484,15489,15720,15722,15733,15737,15740,15748,15852,15855,15859,15862,15866,15869,15874,15896,15902,16229,16232,16236,16244,16541],[10,15475,15471],{"id":15476},"_7函数高级部分",[14,15478,15480],{"id":15479},"_71函数默认参数","7.1函数默认参数",[19,15482,15483],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[19,15485,7133,15486],{},[23,15487,15488],{}," 返回值类型  函数名 （参数= 默认值）{}",[231,15490,15492],{"className":2112,"code":15491,"language":2114,"meta":236,"style":236},"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",[23,15493,15494,15529,15544,15548,15552,15557,15562,15591,15611,15621,15625,15629,15637,15641,15668,15690,15694,15704,15708,15716],{"__ignoreMap":236},[240,15495,15496,15498,15500,15502,15504,15506,15508,15510,15512,15515,15517,15519,15521,15523,15525,15527],{"class":242,"line":243},[240,15497,2126],{"class":288},[240,15499,13336],{"class":436},[240,15501,789],{"class":257},[240,15503,2126],{"class":288},[240,15505,609],{"class":792},[240,15507,1277],{"class":257},[240,15509,2126],{"class":288},[240,15511,4785],{"class":792},[240,15513,15514],{"class":288}," =",[240,15516,3991],{"class":264},[240,15518,1277],{"class":257},[240,15520,2126],{"class":288},[240,15522,4801],{"class":792},[240,15524,15514],{"class":288},[240,15526,3991],{"class":264},[240,15528,14392],{"class":257},[240,15530,15531,15533,15535,15537,15539,15541],{"class":242,"line":250},[240,15532,6042],{"class":288},[240,15534,12820],{"class":257},[240,15536,2580],{"class":288},[240,15538,12833],{"class":257},[240,15540,2580],{"class":288},[240,15542,15543],{"class":257}," c;\n",[240,15545,15546],{"class":242,"line":261},[240,15547,312],{"class":257},[240,15549,15550],{"class":242,"line":277},[240,15551,4353],{"emptyLinePlaceholder":2051},[240,15553,15554],{"class":242,"line":294},[240,15555,15556],{"class":246},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[240,15558,15559],{"class":242,"line":309},[240,15560,15561],{"class":246},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[240,15563,15564,15566,15569,15571,15573,15575,15577,15579,15581,15583,15585,15587,15589],{"class":242,"line":529},[240,15565,2126],{"class":288},[240,15567,15568],{"class":436}," func2",[240,15570,789],{"class":257},[240,15572,2126],{"class":288},[240,15574,609],{"class":792},[240,15576,15514],{"class":288},[240,15578,3991],{"class":264},[240,15580,1277],{"class":257},[240,15582,2126],{"class":288},[240,15584,4785],{"class":792},[240,15586,15514],{"class":288},[240,15588,3991],{"class":264},[240,15590,796],{"class":257},[240,15592,15593,15595,15597,15599,15601,15603,15605,15607,15609],{"class":242,"line":549},[240,15594,2126],{"class":288},[240,15596,15568],{"class":436},[240,15598,789],{"class":257},[240,15600,2126],{"class":288},[240,15602,609],{"class":792},[240,15604,1277],{"class":257},[240,15606,2126],{"class":288},[240,15608,4785],{"class":792},[240,15610,14392],{"class":257},[240,15612,15613,15615,15617,15619],{"class":242,"line":569},[240,15614,6042],{"class":288},[240,15616,12820],{"class":257},[240,15618,2580],{"class":288},[240,15620,14413],{"class":257},[240,15622,15623],{"class":242,"line":589},[240,15624,312],{"class":257},[240,15626,15627],{"class":242,"line":715},[240,15628,4353],{"emptyLinePlaceholder":2051},[240,15630,15631,15633,15635],{"class":242,"line":727},[240,15632,2126],{"class":288},[240,15634,3926],{"class":436},[240,15636,12804],{"class":257},[240,15638,15639],{"class":242,"line":1730},[240,15640,4353],{"emptyLinePlaceholder":2051},[240,15642,15643,15645,15647,15650,15652,15654,15656,15658,15660,15662,15664,15666],{"class":242,"line":3582},[240,15644,8480],{"class":257},[240,15646,3137],{"class":288},[240,15648,15649],{"class":443}," \"ret = \"",[240,15651,3403],{"class":288},[240,15653,13336],{"class":436},[240,15655,789],{"class":257},[240,15657,1000],{"class":264},[240,15659,1277],{"class":257},[240,15661,1000],{"class":264},[240,15663,1230],{"class":257},[240,15665,3137],{"class":288},[240,15667,10791],{"class":257},[240,15669,15670,15672,15674,15676,15678,15680,15682,15684,15686,15688],{"class":242,"line":3596},[240,15671,8480],{"class":257},[240,15673,3137],{"class":288},[240,15675,15649],{"class":443},[240,15677,3403],{"class":288},[240,15679,13336],{"class":436},[240,15681,789],{"class":257},[240,15683,285],{"class":264},[240,15685,1230],{"class":257},[240,15687,3137],{"class":288},[240,15689,10791],{"class":257},[240,15691,15692],{"class":242,"line":3601},[240,15693,4353],{"emptyLinePlaceholder":2051},[240,15695,15696,15698,15700,15702],{"class":242,"line":3607},[240,15697,4256],{"class":436},[240,15699,789],{"class":257},[240,15701,4261],{"class":443},[240,15703,796],{"class":257},[240,15705,15706],{"class":242,"line":3628},[240,15707,4353],{"emptyLinePlaceholder":2051},[240,15709,15710,15712,15714],{"class":242,"line":3633},[240,15711,6042],{"class":288},[240,15713,6045],{"class":264},[240,15715,274],{"class":257},[240,15717,15718],{"class":242,"line":3647},[240,15719,312],{"class":257},[19,15721,13283],{},[1826,15723,15724,15727,15730],{},[1829,15725,15726],{},"我传就用我；没传就用你",[1829,15728,15729],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[1829,15731,15732],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[14,15734,15736],{"id":15735},"_72函数的占位参数","7.2函数的占位参数",[19,15738,15739],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[19,15741,15742,15744,15745],{},[68,15743,7133],{}," ",[23,15746,15747],{},"返回值类型 函数名 (数据类型){}",[231,15749,15751],{"className":2112,"code":15750,"language":2114,"meta":236,"style":236},"\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",[23,15752,15753,15758,15776,15789,15793,15801,15805,15822,15826,15836,15840,15848],{"__ignoreMap":236},[240,15754,15755],{"class":242,"line":243},[240,15756,15757],{"class":246},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[240,15759,15760,15762,15764,15766,15768,15770,15772,15774],{"class":242,"line":250},[240,15761,7315],{"class":288},[240,15763,13336],{"class":436},[240,15765,789],{"class":257},[240,15767,2126],{"class":288},[240,15769,609],{"class":792},[240,15771,1277],{"class":257},[240,15773,2126],{"class":288},[240,15775,14392],{"class":257},[240,15777,15778,15780,15782,15785,15787],{"class":242,"line":261},[240,15779,8480],{"class":257},[240,15781,3137],{"class":288},[240,15783,15784],{"class":443}," \"this is func\"",[240,15786,3403],{"class":288},[240,15788,10791],{"class":257},[240,15790,15791],{"class":242,"line":277},[240,15792,312],{"class":257},[240,15794,15795,15797,15799],{"class":242,"line":294},[240,15796,2126],{"class":288},[240,15798,3926],{"class":436},[240,15800,12804],{"class":257},[240,15802,15803],{"class":242,"line":309},[240,15804,4353],{"emptyLinePlaceholder":2051},[240,15806,15807,15809,15811,15813,15815,15817,15819],{"class":242,"line":529},[240,15808,15235],{"class":436},[240,15810,789],{"class":257},[240,15812,2546],{"class":264},[240,15814,2479],{"class":257},[240,15816,2546],{"class":264},[240,15818,7917],{"class":257},[240,15820,15821],{"class":246}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[240,15823,15824],{"class":242,"line":549},[240,15825,4353],{"emptyLinePlaceholder":2051},[240,15827,15828,15830,15832,15834],{"class":242,"line":569},[240,15829,4256],{"class":436},[240,15831,789],{"class":257},[240,15833,4261],{"class":443},[240,15835,796],{"class":257},[240,15837,15838],{"class":242,"line":589},[240,15839,4353],{"emptyLinePlaceholder":2051},[240,15841,15842,15844,15846],{"class":242,"line":715},[240,15843,6042],{"class":288},[240,15845,6045],{"class":264},[240,15847,274],{"class":257},[240,15849,15850],{"class":242,"line":727},[240,15851,312],{"class":257},[19,15853,15854],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[14,15856,15858],{"id":15857},"_73函数重载","7.3函数重载",[19,15860,15861],{},"意思是函数名是可以相同的",[32,15863,15865],{"id":15864},"_731基本语法","7.3.1基本语法",[19,15867,15868],{},"作用：函数名可以相同，提高复用性",[19,15870,15871],{},[68,15872,15873],{},"函数重载满足条件：",[3100,15875,15876,15879,15882],{},[1829,15877,15878],{},"同一个作用域下",[1829,15880,15881],{},"函数名称相同",[1829,15883,15884,15885,15888,15889,15892,15893],{},"函数参数",[68,15886,15887],{},"类型不同","  或者 ",[68,15890,15891],{},"个数不同"," 或者 ",[68,15894,15895],{},"顺序不同",[19,15897,15898,15901],{},[68,15899,15900],{},"注意:","  函数的返回值不可以作为函数重载的条件",[231,15903,15905],{"className":11892,"code":15904,"language":11894,"meta":236,"style":236},"\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",[23,15906,15907,15912,15920,15924,15937,15941,15955,15959,15972,15976,15991,15995,16008,16012,16033,16037,16050,16054,16074,16078,16091,16095,16099,16104,16109,16114,16119,16124,16128,16132,16140,16144,16150,16160,16170,16184,16199,16203,16213,16217,16225],{"__ignoreMap":236},[240,15908,15909],{"class":242,"line":243},[240,15910,15911],{"class":246},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[240,15913,15914,15916,15918],{"class":242,"line":250},[240,15915,7315],{"class":288},[240,15917,13336],{"class":436},[240,15919,3929],{"class":257},[240,15921,15922],{"class":242,"line":261},[240,15923,3504],{"class":257},[240,15925,15926,15928,15930,15933,15935],{"class":242,"line":277},[240,15927,8480],{"class":257},[240,15929,3137],{"class":288},[240,15931,15932],{"class":443}," \"func 的调用！\"",[240,15934,3403],{"class":288},[240,15936,10791],{"class":257},[240,15938,15939],{"class":242,"line":294},[240,15940,312],{"class":257},[240,15942,15943,15945,15947,15949,15951,15953],{"class":242,"line":309},[240,15944,7315],{"class":288},[240,15946,13336],{"class":436},[240,15948,789],{"class":257},[240,15950,2126],{"class":288},[240,15952,609],{"class":792},[240,15954,2129],{"class":257},[240,15956,15957],{"class":242,"line":529},[240,15958,3504],{"class":257},[240,15960,15961,15963,15965,15968,15970],{"class":242,"line":549},[240,15962,8480],{"class":257},[240,15964,3137],{"class":288},[240,15966,15967],{"class":443}," \"func (int a) 的调用！\"",[240,15969,3403],{"class":288},[240,15971,10791],{"class":257},[240,15973,15974],{"class":242,"line":569},[240,15975,312],{"class":257},[240,15977,15978,15980,15982,15984,15987,15989],{"class":242,"line":589},[240,15979,7315],{"class":288},[240,15981,13336],{"class":436},[240,15983,789],{"class":257},[240,15985,15986],{"class":288},"double",[240,15988,609],{"class":792},[240,15990,2129],{"class":257},[240,15992,15993],{"class":242,"line":715},[240,15994,3504],{"class":257},[240,15996,15997,15999,16001,16004,16006],{"class":242,"line":727},[240,15998,8480],{"class":257},[240,16000,3137],{"class":288},[240,16002,16003],{"class":443}," \"func (double a)的调用！\"",[240,16005,3403],{"class":288},[240,16007,10791],{"class":257},[240,16009,16010],{"class":242,"line":1730},[240,16011,312],{"class":257},[240,16013,16014,16016,16018,16020,16022,16024,16027,16029,16031],{"class":242,"line":3582},[240,16015,7315],{"class":288},[240,16017,13336],{"class":436},[240,16019,789],{"class":257},[240,16021,2126],{"class":288},[240,16023,609],{"class":792},[240,16025,16026],{"class":257}," ,",[240,16028,15986],{"class":288},[240,16030,4785],{"class":792},[240,16032,2129],{"class":257},[240,16034,16035],{"class":242,"line":3596},[240,16036,3504],{"class":257},[240,16038,16039,16041,16043,16046,16048],{"class":242,"line":3601},[240,16040,8480],{"class":257},[240,16042,3137],{"class":288},[240,16044,16045],{"class":443}," \"func (int a ,double b) 的调用！\"",[240,16047,3403],{"class":288},[240,16049,10791],{"class":257},[240,16051,16052],{"class":242,"line":3607},[240,16053,312],{"class":257},[240,16055,16056,16058,16060,16062,16064,16066,16068,16070,16072],{"class":242,"line":3628},[240,16057,7315],{"class":288},[240,16059,13336],{"class":436},[240,16061,789],{"class":257},[240,16063,15986],{"class":288},[240,16065,609],{"class":792},[240,16067,16026],{"class":257},[240,16069,2126],{"class":288},[240,16071,4785],{"class":792},[240,16073,2129],{"class":257},[240,16075,16076],{"class":242,"line":3633},[240,16077,3504],{"class":257},[240,16079,16080,16082,16084,16087,16089],{"class":242,"line":3647},[240,16081,8480],{"class":257},[240,16083,3137],{"class":288},[240,16085,16086],{"class":443}," \"func (double a ,int b)的调用！\"",[240,16088,3403],{"class":288},[240,16090,10791],{"class":257},[240,16092,16093],{"class":242,"line":3652},[240,16094,312],{"class":257},[240,16096,16097],{"class":242,"line":3681},[240,16098,4353],{"emptyLinePlaceholder":2051},[240,16100,16101],{"class":242,"line":3686},[240,16102,16103],{"class":246},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[240,16105,16106],{"class":242,"line":3703},[240,16107,16108],{"class":246},"\u002F\u002Fint func(double a, int b)\n",[240,16110,16111],{"class":242,"line":3708},[240,16112,16113],{"class":246},"\u002F\u002F{\n",[240,16115,16116],{"class":242,"line":3713},[240,16117,16118],{"class":246},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[240,16120,16121],{"class":242,"line":3718},[240,16122,16123],{"class":246},"\u002F\u002F}\n",[240,16125,16126],{"class":242,"line":3732},[240,16127,4353],{"emptyLinePlaceholder":2051},[240,16129,16130],{"class":242,"line":3737},[240,16131,4353],{"emptyLinePlaceholder":2051},[240,16133,16134,16136,16138],{"class":242,"line":4530},[240,16135,2126],{"class":288},[240,16137,3926],{"class":436},[240,16139,12804],{"class":257},[240,16141,16142],{"class":242,"line":4544},[240,16143,4353],{"emptyLinePlaceholder":2051},[240,16145,16146,16148],{"class":242,"line":4552},[240,16147,15235],{"class":436},[240,16149,7587],{"class":257},[240,16151,16152,16154,16156,16158],{"class":242,"line":4557},[240,16153,15235],{"class":436},[240,16155,789],{"class":257},[240,16157,2546],{"class":264},[240,16159,796],{"class":257},[240,16161,16162,16164,16166,16168],{"class":242,"line":4563},[240,16163,15235],{"class":436},[240,16165,789],{"class":257},[240,16167,2169],{"class":264},[240,16169,796],{"class":257},[240,16171,16172,16174,16176,16178,16180,16182],{"class":242,"line":4569},[240,16173,15235],{"class":436},[240,16175,789],{"class":257},[240,16177,2546],{"class":264},[240,16179,2479],{"class":257},[240,16181,2169],{"class":264},[240,16183,796],{"class":257},[240,16185,16186,16188,16190,16192,16195,16197],{"class":242,"line":4574},[240,16187,15235],{"class":436},[240,16189,789],{"class":257},[240,16191,2169],{"class":264},[240,16193,16194],{"class":257}," , ",[240,16196,2546],{"class":264},[240,16198,796],{"class":257},[240,16200,16201],{"class":242,"line":9899},[240,16202,15160],{"class":257},[240,16204,16205,16207,16209,16211],{"class":242,"line":9923},[240,16206,4256],{"class":436},[240,16208,789],{"class":257},[240,16210,4261],{"class":443},[240,16212,796],{"class":257},[240,16214,16215],{"class":242,"line":9928},[240,16216,4353],{"emptyLinePlaceholder":2051},[240,16218,16219,16221,16223],{"class":242,"line":9934},[240,16220,6042],{"class":288},[240,16222,6045],{"class":264},[240,16224,274],{"class":257},[240,16226,16227],{"class":242,"line":9961},[240,16228,312],{"class":257},[19,16230,16231],{},"重点：函数返回值不可以作为函数重载条件！",[32,16233,16235],{"id":16234},"_732注意事项","7.3.2注意事项",[3100,16237,16238,16241],{},[1829,16239,16240],{},"引用作为重载条件!!!",[1829,16242,16243],{},"函数重载碰到函数默认参数",[231,16245,16247],{"className":2112,"code":16246,"language":2114,"meta":236,"style":236},"\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",[23,16248,16249,16254,16259,16263,16279,16283,16296,16300,16304,16322,16326,16339,16343,16347,16351,16356,16360,16384,16388,16401,16405,16409,16423,16427,16440,16444,16448,16456,16460,16472,16482,16495,16499,16503,16511,16515,16525,16529,16537],{"__ignoreMap":236},[240,16250,16251],{"class":242,"line":243},[240,16252,16253],{"class":246},"\u002F\u002F函数重载注意事项\n",[240,16255,16256],{"class":242,"line":250},[240,16257,16258],{"class":246},"\u002F\u002F1、引用作为重载条件\n",[240,16260,16261],{"class":242,"line":261},[240,16262,4353],{"emptyLinePlaceholder":2051},[240,16264,16265,16267,16269,16271,16273,16275,16277],{"class":242,"line":277},[240,16266,7315],{"class":288},[240,16268,13336],{"class":436},[240,16270,789],{"class":257},[240,16272,2126],{"class":288},[240,16274,12535],{"class":288},[240,16276,254],{"class":792},[240,16278,2129],{"class":257},[240,16280,16281],{"class":242,"line":294},[240,16282,3504],{"class":257},[240,16284,16285,16287,16289,16292,16294],{"class":242,"line":309},[240,16286,8480],{"class":257},[240,16288,3137],{"class":288},[240,16290,16291],{"class":443}," \"func (int &a) 调用 \"",[240,16293,3403],{"class":288},[240,16295,10791],{"class":257},[240,16297,16298],{"class":242,"line":529},[240,16299,312],{"class":257},[240,16301,16302],{"class":242,"line":549},[240,16303,4353],{"emptyLinePlaceholder":2051},[240,16305,16306,16308,16310,16312,16314,16316,16318,16320],{"class":242,"line":569},[240,16307,7315],{"class":288},[240,16309,13336],{"class":436},[240,16311,789],{"class":257},[240,16313,8743],{"class":288},[240,16315,4335],{"class":288},[240,16317,12535],{"class":288},[240,16319,254],{"class":792},[240,16321,2129],{"class":257},[240,16323,16324],{"class":242,"line":589},[240,16325,3504],{"class":257},[240,16327,16328,16330,16332,16335,16337],{"class":242,"line":715},[240,16329,8480],{"class":257},[240,16331,3137],{"class":288},[240,16333,16334],{"class":443}," \"func (const int &a) 调用 \"",[240,16336,3403],{"class":288},[240,16338,10791],{"class":257},[240,16340,16341],{"class":242,"line":727},[240,16342,312],{"class":257},[240,16344,16345],{"class":242,"line":1730},[240,16346,4353],{"emptyLinePlaceholder":2051},[240,16348,16349],{"class":242,"line":3582},[240,16350,4353],{"emptyLinePlaceholder":2051},[240,16352,16353],{"class":242,"line":3596},[240,16354,16355],{"class":246},"\u002F\u002F2、函数重载碰到函数默认参数\n",[240,16357,16358],{"class":242,"line":3601},[240,16359,4353],{"emptyLinePlaceholder":2051},[240,16361,16362,16364,16366,16368,16370,16372,16374,16376,16378,16380,16382],{"class":242,"line":3607},[240,16363,7315],{"class":288},[240,16365,15568],{"class":436},[240,16367,789],{"class":257},[240,16369,2126],{"class":288},[240,16371,609],{"class":792},[240,16373,1277],{"class":257},[240,16375,2126],{"class":288},[240,16377,4785],{"class":792},[240,16379,15514],{"class":288},[240,16381,3991],{"class":264},[240,16383,2129],{"class":257},[240,16385,16386],{"class":242,"line":3628},[240,16387,3504],{"class":257},[240,16389,16390,16392,16394,16397,16399],{"class":242,"line":3633},[240,16391,8480],{"class":257},[240,16393,3137],{"class":288},[240,16395,16396],{"class":443}," \"func2(int a, int b = 10) 调用\"",[240,16398,3403],{"class":288},[240,16400,10791],{"class":257},[240,16402,16403],{"class":242,"line":3647},[240,16404,312],{"class":257},[240,16406,16407],{"class":242,"line":3652},[240,16408,4353],{"emptyLinePlaceholder":2051},[240,16410,16411,16413,16415,16417,16419,16421],{"class":242,"line":3681},[240,16412,7315],{"class":288},[240,16414,15568],{"class":436},[240,16416,789],{"class":257},[240,16418,2126],{"class":288},[240,16420,609],{"class":792},[240,16422,2129],{"class":257},[240,16424,16425],{"class":242,"line":3686},[240,16426,3504],{"class":257},[240,16428,16429,16431,16433,16436,16438],{"class":242,"line":3703},[240,16430,8480],{"class":257},[240,16432,3137],{"class":288},[240,16434,16435],{"class":443}," \"func2(int a) 调用\"",[240,16437,3403],{"class":288},[240,16439,10791],{"class":257},[240,16441,16442],{"class":242,"line":3708},[240,16443,312],{"class":257},[240,16445,16446],{"class":242,"line":3713},[240,16447,4353],{"emptyLinePlaceholder":2051},[240,16449,16450,16452,16454],{"class":242,"line":3718},[240,16451,2126],{"class":288},[240,16453,3926],{"class":436},[240,16455,12804],{"class":257},[240,16457,16458],{"class":242,"line":3732},[240,16459,15160],{"class":257},[240,16461,16462,16464,16466,16468,16470],{"class":242,"line":3737},[240,16463,3938],{"class":288},[240,16465,12820],{"class":257},[240,16467,440],{"class":288},[240,16469,3991],{"class":264},[240,16471,274],{"class":257},[240,16473,16474,16476,16479],{"class":242,"line":4530},[240,16475,15235],{"class":436},[240,16477,16478],{"class":257},"(a);",[240,16480,16481],{"class":246}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[240,16483,16484,16486,16488,16490,16492],{"class":242,"line":4544},[240,16485,15235],{"class":436},[240,16487,789],{"class":257},[240,16489,2546],{"class":264},[240,16491,7917],{"class":257},[240,16493,16494],{"class":246},"\u002F\u002F调用有const   10是个常量\n",[240,16496,16497],{"class":242,"line":4552},[240,16498,4353],{"emptyLinePlaceholder":2051},[240,16500,16501],{"class":242,"line":4557},[240,16502,4353],{"emptyLinePlaceholder":2051},[240,16504,16505,16508],{"class":242,"line":4563},[240,16506,16507],{"class":246},"    \u002F\u002Ffunc2(10);",[240,16509,16510],{"class":246}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[240,16512,16513],{"class":242,"line":4569},[240,16514,4353],{"emptyLinePlaceholder":2051},[240,16516,16517,16519,16521,16523],{"class":242,"line":4574},[240,16518,4256],{"class":436},[240,16520,789],{"class":257},[240,16522,4261],{"class":443},[240,16524,796],{"class":257},[240,16526,16527],{"class":242,"line":9899},[240,16528,4353],{"emptyLinePlaceholder":2051},[240,16530,16531,16533,16535],{"class":242,"line":9923},[240,16532,6042],{"class":288},[240,16534,6045],{"class":264},[240,16536,274],{"class":257},[240,16538,16539],{"class":242,"line":9928},[240,16540,312],{"class":257},[2019,16542,16543],{},"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":236,"searchDepth":250,"depth":250,"links":16545},[16546,16547,16548],{"id":15479,"depth":250,"text":15480},{"id":15735,"depth":250,"text":15736},{"id":15857,"depth":250,"text":15858,"children":16549},[16550,16551],{"id":15864,"depth":261,"text":15865},{"id":16234,"depth":261,"text":16235},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":15471,"description":236},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":16558,"title":16559,"body":16560,"description":25312,"extension":2049,"meta":25313,"navigation":2051,"path":25314,"seo":25315,"stem":25316,"__hash__":25317},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":16561,"toc":25293},[16562,16565,16571,16578,16583,16586,16589,16592,16596,16600,16603,16606,16614,16619,16622,16629,16634,16793,16796,17049,17052,17055,17058,17063,17066,17069,17080,17085,17321,17325,17335,17338,17346,17493,17497,17500,17503,17507,17951,17955,17963,17971,18883,18890,18895,19522,19525,19528,19531,19650,19653,19740,19743,19869,19872,19966,19969,20322,20326,20334,20338,20345,20348,20351,20362,20368,20373,20385,20393,20413,20421,20438,20624,20627,20631,20634,20637,20640,20643,20646,20649,20652,21112,21118,21122,21125,21136,21723,21726,22215,22219,22222,22225,22228,22231,22234,22242,22638,22642,22645,22648,23095,23098,23101,23106,23109,23114,23117,23121,23124,23126,23132,23135,23441,23451,23492,23496,23499,23501,23534,23537,23844,23846,23861,23864,23887,23896,23902,23905,23909,23912,23915,23920,23931,23936,23944,23949,24079,24082,24085,24260,24265,24477,24481,24484,24598,24603,24842,24846,24850,24853,24856,24861,24966,24969,24972,24975,24979,25090,25093,25096,25101,25153,25156,25159,25164,25210,25213,25218,25286,25288,25291],[10,16563,16559],{"id":16564},"_8类和对象",[19,16566,16567,16568],{},"C++面向对象的三大特性为",[68,16569,16570],{},"封装、继承、多态",[19,16572,16573,16574,16577],{},"C++认为",[68,16575,16576],{},"万事万物都皆为对象","，对象上有其属性和行为",[19,16579,16580],{},[68,16581,16582],{},"例如：",[19,16584,16585],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[19,16587,16588],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[19,16590,16591],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[14,16593,16595],{"id":16594},"_81封装","8.1封装",[32,16597,16599],{"id":16598},"_811封装的意义","8.1.1封装的意义",[19,16601,16602],{},"封装是C++面向对象三大特性之一",[19,16604,16605],{},"封装的意义：",[3100,16607,16608,16611],{},[1829,16609,16610],{},"将属性和行为作为一个整体，表现生活中的事物",[1829,16612,16613],{},"将属性和行为加以权限控制",[19,16615,16616],{},[68,16617,16618],{},"封装意义一：",[19,16620,16621],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[19,16623,16624,15744,16626],{},[68,16625,7133],{},[23,16627,16628],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[1826,16630,16631],{},[1829,16632,16633],{},"**示例1：**设计一个圆类，求圆的周长",[231,16635,16637],{"className":2112,"code":16636,"language":2114,"meta":236,"style":236},"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",[23,16638,16639,16647,16651,16656,16661,16666,16671,16678,16683,16693,16697,16715,16719,16723,16731,16735,16740,16745,16750,16755,16766,16789],{"__ignoreMap":236},[240,16640,16641,16644],{"class":242,"line":243},[240,16642,16643],{"class":288},"class",[240,16645,16646],{"class":436}," Circle\n",[240,16648,16649],{"class":242,"line":250},[240,16650,3504],{"class":257},[240,16652,16653],{"class":242,"line":261},[240,16654,16655],{"class":246},"    \u002F\u002F访问权限\n",[240,16657,16658],{"class":242,"line":277},[240,16659,16660],{"class":246},"    \u002F\u002F公共权限\n",[240,16662,16663],{"class":242,"line":294},[240,16664,16665],{"class":288},"public:\n",[240,16667,16668],{"class":242,"line":309},[240,16669,16670],{"class":246},"    \u002F\u002F属性\n",[240,16672,16673,16675],{"class":242,"line":529},[240,16674,3938],{"class":288},[240,16676,16677],{"class":257}," m_r;\n",[240,16679,16680],{"class":242,"line":549},[240,16681,16682],{"class":246},"    \u002F\u002F行为\n",[240,16684,16685,16688,16691],{"class":242,"line":569},[240,16686,16687],{"class":288},"    double",[240,16689,16690],{"class":436}," calculateZC",[240,16692,3929],{"class":257},[240,16694,16695],{"class":242,"line":589},[240,16696,3983],{"class":257},[240,16698,16699,16702,16705,16707,16710,16712],{"class":242,"line":715},[240,16700,16701],{"class":288},"        return",[240,16703,16704],{"class":264}," 2",[240,16706,2554],{"class":288},[240,16708,16709],{"class":257},"PI",[240,16711,2554],{"class":288},[240,16713,16714],{"class":257},"m_r;\n",[240,16716,16717],{"class":242,"line":727},[240,16718,4140],{"class":257},[240,16720,16721],{"class":242,"line":1730},[240,16722,5947],{"class":257},[240,16724,16725,16727,16729],{"class":242,"line":3582},[240,16726,2126],{"class":288},[240,16728,3926],{"class":436},[240,16730,3929],{"class":257},[240,16732,16733],{"class":242,"line":3596},[240,16734,3504],{"class":257},[240,16736,16737],{"class":242,"line":3601},[240,16738,16739],{"class":246},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[240,16741,16742],{"class":242,"line":3607},[240,16743,16744],{"class":246},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[240,16746,16747],{"class":242,"line":3628},[240,16748,16749],{"class":257},"    Circle c1;\n",[240,16751,16752],{"class":242,"line":3633},[240,16753,16754],{"class":246},"    \u002F\u002F给圆对象 的属性进行赋值\n",[240,16756,16757,16760,16762,16764],{"class":242,"line":3647},[240,16758,16759],{"class":257},"    c1.m_r",[240,16761,440],{"class":288},[240,16763,2546],{"class":264},[240,16765,274],{"class":257},[240,16767,16768,16770,16772,16775,16777,16780,16783,16785,16787],{"class":242,"line":3652},[240,16769,3509],{"class":257},[240,16771,3137],{"class":288},[240,16773,16774],{"class":443},"\"圆的周长\"",[240,16776,3137],{"class":288},[240,16778,16779],{"class":257},"c1.",[240,16781,16782],{"class":436},"calculateZC",[240,16784,4380],{"class":257},[240,16786,3137],{"class":288},[240,16788,3159],{"class":257},[240,16790,16791],{"class":242,"line":3681},[240,16792,312],{"class":257},[19,16794,16795],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[231,16797,16799],{"className":2112,"code":16798,"language":2114,"meta":236,"style":236},"#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",[23,16800,16801,16807,16817,16823,16829,16833,16837,16842,16849,16854,16872,16876,16886,16890,16895,16911,16915,16925,16929,16934,16942,16946,16978,16982,16986,16994,16998,17003,17008,17022,17036,17045],{"__ignoreMap":236},[240,16802,16803,16805],{"class":242,"line":243},[240,16804,3903],{"class":288},[240,16806,3906],{"class":443},[240,16808,16809,16811,16813,16815],{"class":242,"line":250},[240,16810,3911],{"class":288},[240,16812,3914],{"class":288},[240,16814,3917],{"class":436},[240,16816,274],{"class":257},[240,16818,16819,16821],{"class":242,"line":261},[240,16820,3903],{"class":288},[240,16822,9700],{"class":443},[240,16824,16825,16827],{"class":242,"line":277},[240,16826,16643],{"class":288},[240,16828,9713],{"class":436},[240,16830,16831],{"class":242,"line":294},[240,16832,3504],{"class":257},[240,16834,16835],{"class":242,"line":309},[240,16836,16665],{"class":288},[240,16838,16839],{"class":242,"line":529},[240,16840,16841],{"class":257},"    string m_name;\n",[240,16843,16844,16846],{"class":242,"line":549},[240,16845,3938],{"class":288},[240,16847,16848],{"class":257}," m_id;\n",[240,16850,16851],{"class":242,"line":569},[240,16852,16853],{"class":246},"    \u002F\u002F赋值姓名\n",[240,16855,16856,16859,16862,16864,16867,16870],{"class":242,"line":589},[240,16857,16858],{"class":288},"    void",[240,16860,16861],{"class":436}," setName",[240,16863,789],{"class":257},[240,16865,16866],{"class":436},"string",[240,16868,16869],{"class":792}," name",[240,16871,2129],{"class":257},[240,16873,16874],{"class":242,"line":715},[240,16875,3983],{"class":257},[240,16877,16878,16881,16883],{"class":242,"line":727},[240,16879,16880],{"class":257},"        m_name",[240,16882,440],{"class":288},[240,16884,16885],{"class":257},"name;\n",[240,16887,16888],{"class":242,"line":1730},[240,16889,4140],{"class":257},[240,16891,16892],{"class":242,"line":3582},[240,16893,16894],{"class":246},"    \u002F\u002F赋值学号\n",[240,16896,16897,16899,16902,16904,16906,16909],{"class":242,"line":3596},[240,16898,16858],{"class":288},[240,16900,16901],{"class":436}," setId",[240,16903,789],{"class":257},[240,16905,2126],{"class":288},[240,16907,16908],{"class":792}," id",[240,16910,2129],{"class":257},[240,16912,16913],{"class":242,"line":3601},[240,16914,3983],{"class":257},[240,16916,16917,16920,16922],{"class":242,"line":3607},[240,16918,16919],{"class":257},"        m_id",[240,16921,440],{"class":288},[240,16923,16924],{"class":257},"id;\n",[240,16926,16927],{"class":242,"line":3628},[240,16928,4140],{"class":257},[240,16930,16931],{"class":242,"line":3633},[240,16932,16933],{"class":246},"    \u002F\u002F打印学生信息\n",[240,16935,16936,16938,16940],{"class":242,"line":3647},[240,16937,16858],{"class":288},[240,16939,11566],{"class":436},[240,16941,3929],{"class":257},[240,16943,16944],{"class":242,"line":3652},[240,16945,3983],{"class":257},[240,16947,16948,16950,16952,16955,16957,16960,16962,16964,16966,16969,16971,16974,16976],{"class":242,"line":3681},[240,16949,5403],{"class":257},[240,16951,3137],{"class":288},[240,16953,16954],{"class":443},"\"姓名：\"",[240,16956,3137],{"class":288},[240,16958,16959],{"class":257},"m_name",[240,16961,3137],{"class":288},[240,16963,6311],{"class":443},[240,16965,3137],{"class":288},[240,16967,16968],{"class":443},"\"学号：\"",[240,16970,3137],{"class":288},[240,16972,16973],{"class":257},"m_id",[240,16975,3137],{"class":288},[240,16977,3159],{"class":257},[240,16979,16980],{"class":242,"line":3686},[240,16981,4140],{"class":257},[240,16983,16984],{"class":242,"line":3703},[240,16985,5947],{"class":257},[240,16987,16988,16990,16992],{"class":242,"line":3708},[240,16989,2126],{"class":288},[240,16991,3926],{"class":436},[240,16993,3929],{"class":257},[240,16995,16996],{"class":242,"line":3713},[240,16997,3504],{"class":257},[240,16999,17000],{"class":242,"line":3718},[240,17001,17002],{"class":246},"    \u002F\u002F实例化\n",[240,17004,17005],{"class":242,"line":3732},[240,17006,17007],{"class":257},"    Student s1;\n",[240,17009,17010,17013,17016,17018,17020],{"class":242,"line":3737},[240,17011,17012],{"class":257},"    s1.",[240,17014,17015],{"class":436},"setName",[240,17017,789],{"class":257},[240,17019,9867],{"class":443},[240,17021,796],{"class":257},[240,17023,17024,17026,17029,17031,17034],{"class":242,"line":4530},[240,17025,17012],{"class":257},[240,17027,17028],{"class":436},"setId",[240,17030,789],{"class":257},[240,17032,17033],{"class":264},"123456",[240,17035,796],{"class":257},[240,17037,17038,17040,17043],{"class":242,"line":4544},[240,17039,17012],{"class":257},[240,17041,17042],{"class":436},"printInfo",[240,17044,7587],{"class":257},[240,17046,17047],{"class":242,"line":4552},[240,17048,312],{"class":257},[19,17050,17051],{},"类中的属性和行为统称为成员",[19,17053,17054],{},"属性：成员属性(成员变量)",[19,17056,17057],{},"方法：成员函数(成员方法)",[19,17059,17060],{},[68,17061,17062],{},"封装意义二：",[19,17064,17065],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[19,17067,17068],{},"访问权限有三种：",[1826,17070,17071,17074,17077],{},[1829,17072,17073],{},"public        公共权限",[1829,17075,17076],{},"protected 保护权限",[1829,17078,17079],{},"private      私有权限",[19,17081,17082],{},[68,17083,17084],{},"示例：",[231,17086,17088],{"className":11892,"code":17087,"language":11894,"meta":236,"style":236},"\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",[23,17089,17090,17095,17100,17105,17110,17114,17121,17125,17130,17134,17139,17143,17148,17153,17158,17162,17167,17172,17179,17183,17187,17195,17199,17210,17222,17234,17238,17242,17246,17254,17258,17263,17275,17283,17291,17295,17305,17309,17317],{"__ignoreMap":236},[240,17091,17092],{"class":242,"line":243},[240,17093,17094],{"class":246},"\u002F\u002F三种权限\n",[240,17096,17097],{"class":242,"line":250},[240,17098,17099],{"class":246},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[240,17101,17102],{"class":242,"line":261},[240,17103,17104],{"class":246},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[240,17106,17107],{"class":242,"line":277},[240,17108,17109],{"class":246},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[240,17111,17112],{"class":242,"line":294},[240,17113,4353],{"emptyLinePlaceholder":2051},[240,17115,17116,17118],{"class":242,"line":309},[240,17117,16643],{"class":288},[240,17119,17120],{"class":436}," Person\n",[240,17122,17123],{"class":242,"line":529},[240,17124,3504],{"class":257},[240,17126,17127],{"class":242,"line":549},[240,17128,17129],{"class":246},"    \u002F\u002F姓名  公共权限\n",[240,17131,17132],{"class":242,"line":569},[240,17133,16665],{"class":288},[240,17135,17136],{"class":242,"line":589},[240,17137,17138],{"class":257},"    string m_Name;\n",[240,17140,17141],{"class":242,"line":715},[240,17142,4353],{"emptyLinePlaceholder":2051},[240,17144,17145],{"class":242,"line":727},[240,17146,17147],{"class":246},"    \u002F\u002F汽车  保护权限\n",[240,17149,17150],{"class":242,"line":1730},[240,17151,17152],{"class":288},"protected:\n",[240,17154,17155],{"class":242,"line":3582},[240,17156,17157],{"class":257},"    string m_Car;\n",[240,17159,17160],{"class":242,"line":3596},[240,17161,4353],{"emptyLinePlaceholder":2051},[240,17163,17164],{"class":242,"line":3601},[240,17165,17166],{"class":246},"    \u002F\u002F银行卡密码  私有权限\n",[240,17168,17169],{"class":242,"line":3607},[240,17170,17171],{"class":288},"private:\n",[240,17173,17174,17176],{"class":242,"line":3628},[240,17175,3938],{"class":288},[240,17177,17178],{"class":257}," m_Password;\n",[240,17180,17181],{"class":242,"line":3633},[240,17182,4353],{"emptyLinePlaceholder":2051},[240,17184,17185],{"class":242,"line":3647},[240,17186,16665],{"class":288},[240,17188,17189,17191,17193],{"class":242,"line":3652},[240,17190,16858],{"class":288},[240,17192,13336],{"class":436},[240,17194,3929],{"class":257},[240,17196,17197],{"class":242,"line":3681},[240,17198,3983],{"class":257},[240,17200,17201,17204,17206,17208],{"class":242,"line":3686},[240,17202,17203],{"class":257},"        m_Name ",[240,17205,440],{"class":288},[240,17207,10889],{"class":443},[240,17209,274],{"class":257},[240,17211,17212,17215,17217,17220],{"class":242,"line":3703},[240,17213,17214],{"class":257},"        m_Car ",[240,17216,440],{"class":288},[240,17218,17219],{"class":443}," \"拖拉机\"",[240,17221,274],{"class":257},[240,17223,17224,17227,17229,17232],{"class":242,"line":3708},[240,17225,17226],{"class":257},"        m_Password ",[240,17228,440],{"class":288},[240,17230,17231],{"class":264}," 123456",[240,17233,274],{"class":257},[240,17235,17236],{"class":242,"line":3713},[240,17237,4140],{"class":257},[240,17239,17240],{"class":242,"line":3718},[240,17241,5947],{"class":257},[240,17243,17244],{"class":242,"line":3732},[240,17245,4353],{"emptyLinePlaceholder":2051},[240,17247,17248,17250,17252],{"class":242,"line":3737},[240,17249,2126],{"class":288},[240,17251,3926],{"class":436},[240,17253,12804],{"class":257},[240,17255,17256],{"class":242,"line":4530},[240,17257,4353],{"emptyLinePlaceholder":2051},[240,17259,17260],{"class":242,"line":4544},[240,17261,17262],{"class":257},"    Person p;\n",[240,17264,17265,17268,17270,17273],{"class":242,"line":4552},[240,17266,17267],{"class":257},"    p.m_Name ",[240,17269,440],{"class":288},[240,17271,17272],{"class":443}," \"李四\"",[240,17274,274],{"class":257},[240,17276,17277,17280],{"class":242,"line":4557},[240,17278,17279],{"class":246},"    \u002F\u002Fp.m_Car = \"奔驰\";",[240,17281,17282],{"class":246},"  \u002F\u002F保护权限类外访问不到\n",[240,17284,17285,17288],{"class":242,"line":4563},[240,17286,17287],{"class":246},"    \u002F\u002Fp.m_Password = 123;",[240,17289,17290],{"class":246}," \u002F\u002F私有权限类外访问不到\n",[240,17292,17293],{"class":242,"line":4569},[240,17294,4353],{"emptyLinePlaceholder":2051},[240,17296,17297,17299,17301,17303],{"class":242,"line":4574},[240,17298,4256],{"class":436},[240,17300,789],{"class":257},[240,17302,4261],{"class":443},[240,17304,796],{"class":257},[240,17306,17307],{"class":242,"line":9899},[240,17308,4353],{"emptyLinePlaceholder":2051},[240,17310,17311,17313,17315],{"class":242,"line":9923},[240,17312,6042],{"class":288},[240,17314,6045],{"class":264},[240,17316,274],{"class":257},[240,17318,17319],{"class":242,"line":9928},[240,17320,312],{"class":257},[32,17322,17324],{"id":17323},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[19,17326,17327,17328,17331,17332],{},"在C++中 struct和class唯一的",[68,17329,17330],{},"区别","就在于 ",[68,17333,17334],{},"默认的访问权限不同",[19,17336,17337],{},"区别：",[3100,17339,17340,17343],{},[1829,17341,17342],{},"struct 默认权限为公共",[1829,17344,17345],{},"class   默认权限为私有",[231,17347,17349],{"className":11892,"code":17348,"language":11894,"meta":236,"style":236},"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",[23,17350,17351,17358,17362,17372,17376,17380,17387,17391,17401,17405,17409,17417,17421,17426,17440,17444,17449,17463,17467,17477,17481,17489],{"__ignoreMap":236},[240,17352,17353,17355],{"class":242,"line":243},[240,17354,16643],{"class":288},[240,17356,17357],{"class":436}," C1\n",[240,17359,17360],{"class":242,"line":250},[240,17361,3504],{"class":257},[240,17363,17364,17366,17369],{"class":242,"line":261},[240,17365,3938],{"class":288},[240,17367,17368],{"class":257},"  m_A;",[240,17370,17371],{"class":246}," \u002F\u002F默认是私有权限\n",[240,17373,17374],{"class":242,"line":277},[240,17375,5947],{"class":257},[240,17377,17378],{"class":242,"line":294},[240,17379,4353],{"emptyLinePlaceholder":2051},[240,17381,17382,17384],{"class":242,"line":309},[240,17383,9710],{"class":288},[240,17385,17386],{"class":436}," C2\n",[240,17388,17389],{"class":242,"line":529},[240,17390,3504],{"class":257},[240,17392,17393,17395,17398],{"class":242,"line":549},[240,17394,3938],{"class":288},[240,17396,17397],{"class":257}," m_A;",[240,17399,17400],{"class":246},"  \u002F\u002F默认是公共权限\n",[240,17402,17403],{"class":242,"line":569},[240,17404,5947],{"class":257},[240,17406,17407],{"class":242,"line":589},[240,17408,4353],{"emptyLinePlaceholder":2051},[240,17410,17411,17413,17415],{"class":242,"line":715},[240,17412,2126],{"class":288},[240,17414,3926],{"class":436},[240,17416,12804],{"class":257},[240,17418,17419],{"class":242,"line":727},[240,17420,4353],{"emptyLinePlaceholder":2051},[240,17422,17423],{"class":242,"line":1730},[240,17424,17425],{"class":257},"    C1 c1;\n",[240,17427,17428,17431,17433,17435,17437],{"class":242,"line":3582},[240,17429,17430],{"class":257},"    c1.m_A ",[240,17432,440],{"class":288},[240,17434,3991],{"class":264},[240,17436,2175],{"class":257},[240,17438,17439],{"class":246}," \u002F\u002F错误，访问权限是私有\n",[240,17441,17442],{"class":242,"line":3596},[240,17443,4353],{"emptyLinePlaceholder":2051},[240,17445,17446],{"class":242,"line":3601},[240,17447,17448],{"class":257},"    C2 c2;\n",[240,17450,17451,17454,17456,17458,17460],{"class":242,"line":3607},[240,17452,17453],{"class":257},"    c2.m_A ",[240,17455,440],{"class":288},[240,17457,3991],{"class":264},[240,17459,2175],{"class":257},[240,17461,17462],{"class":246}," \u002F\u002F正确，访问权限是公共\n",[240,17464,17465],{"class":242,"line":3628},[240,17466,4353],{"emptyLinePlaceholder":2051},[240,17468,17469,17471,17473,17475],{"class":242,"line":3633},[240,17470,4256],{"class":436},[240,17472,789],{"class":257},[240,17474,4261],{"class":443},[240,17476,796],{"class":257},[240,17478,17479],{"class":242,"line":3647},[240,17480,4353],{"emptyLinePlaceholder":2051},[240,17482,17483,17485,17487],{"class":242,"line":3652},[240,17484,6042],{"class":288},[240,17486,6045],{"class":264},[240,17488,274],{"class":257},[240,17490,17491],{"class":242,"line":3681},[240,17492,312],{"class":257},[32,17494,17496],{"id":17495},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[19,17498,17499],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[19,17501,17502],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[19,17504,17505],{},[68,17506,17084],{},[231,17508,17510],{"className":11892,"code":17509,"language":11894,"meta":236,"style":236},"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",[23,17511,17512,17521,17525,17529,17534,17548,17557,17561,17571,17575,17582,17586,17590,17594,17599,17608,17615,17619,17624,17640,17663,17676,17683,17687,17696,17700,17704,17709,17725,17735,17739,17743,17747,17755,17759,17769,17773,17781,17785,17789,17797,17801,17805,17810,17823,17846,17850,17855,17868,17890,17894,17899,17913,17921,17925,17935,17939,17947],{"__ignoreMap":236},[240,17513,17514,17516,17519],{"class":242,"line":243},[240,17515,16643],{"class":288},[240,17517,17518],{"class":436}," Person",[240,17520,258],{"class":257},[240,17522,17523],{"class":242,"line":250},[240,17524,16665],{"class":288},[240,17526,17527],{"class":242,"line":261},[240,17528,4353],{"emptyLinePlaceholder":2051},[240,17530,17531],{"class":242,"line":277},[240,17532,17533],{"class":246},"    \u002F\u002F姓名设置可读可写\n",[240,17535,17536,17538,17540,17542,17544,17546],{"class":242,"line":294},[240,17537,16858],{"class":288},[240,17539,16861],{"class":436},[240,17541,789],{"class":257},[240,17543,16866],{"class":436},[240,17545,16869],{"class":792},[240,17547,14392],{"class":257},[240,17549,17550,17552,17554],{"class":242,"line":309},[240,17551,17203],{"class":257},[240,17553,440],{"class":288},[240,17555,17556],{"class":257}," name;\n",[240,17558,17559],{"class":242,"line":529},[240,17560,4140],{"class":257},[240,17562,17563,17566,17569],{"class":242,"line":549},[240,17564,17565],{"class":436},"    string",[240,17567,17568],{"class":436}," getName",[240,17570,3929],{"class":257},[240,17572,17573],{"class":242,"line":569},[240,17574,3983],{"class":257},[240,17576,17577,17579],{"class":242,"line":589},[240,17578,16701],{"class":288},[240,17580,17581],{"class":257}," m_Name;\n",[240,17583,17584],{"class":242,"line":715},[240,17585,4140],{"class":257},[240,17587,17588],{"class":242,"line":727},[240,17589,4353],{"emptyLinePlaceholder":2051},[240,17591,17592],{"class":242,"line":1730},[240,17593,4353],{"emptyLinePlaceholder":2051},[240,17595,17596],{"class":242,"line":3582},[240,17597,17598],{"class":246},"    \u002F\u002F获取年龄 \n",[240,17600,17601,17603,17606],{"class":242,"line":3596},[240,17602,3938],{"class":288},[240,17604,17605],{"class":436}," getAge",[240,17607,12804],{"class":257},[240,17609,17610,17612],{"class":242,"line":3601},[240,17611,16701],{"class":288},[240,17613,17614],{"class":257}," m_Age;\n",[240,17616,17617],{"class":242,"line":3607},[240,17618,4140],{"class":257},[240,17620,17621],{"class":242,"line":3628},[240,17622,17623],{"class":246},"    \u002F\u002F设置年龄\n",[240,17625,17626,17628,17631,17633,17635,17638],{"class":242,"line":3633},[240,17627,16858],{"class":288},[240,17629,17630],{"class":436}," setAge",[240,17632,789],{"class":257},[240,17634,2126],{"class":288},[240,17636,17637],{"class":792}," age",[240,17639,14392],{"class":257},[240,17641,17642,17644,17647,17649,17651,17653,17656,17658,17661],{"class":242,"line":3647},[240,17643,4450],{"class":288},[240,17645,17646],{"class":257}," (age ",[240,17648,431],{"class":288},[240,17650,6045],{"class":264},[240,17652,5207],{"class":288},[240,17654,17655],{"class":257}," age ",[240,17657,3053],{"class":288},[240,17659,17660],{"class":264}," 150",[240,17662,14392],{"class":257},[240,17664,17665,17667,17669,17672,17674],{"class":242,"line":3652},[240,17666,11670],{"class":257},[240,17668,3137],{"class":288},[240,17670,17671],{"class":443}," \"你个老妖精!\"",[240,17673,3403],{"class":288},[240,17675,10791],{"class":257},[240,17677,17678,17681],{"class":242,"line":3681},[240,17679,17680],{"class":288},"            return",[240,17682,274],{"class":257},[240,17684,17685],{"class":242,"line":3686},[240,17686,4482],{"class":257},[240,17688,17689,17692,17694],{"class":242,"line":3703},[240,17690,17691],{"class":257},"        m_Age ",[240,17693,440],{"class":288},[240,17695,9748],{"class":257},[240,17697,17698],{"class":242,"line":3708},[240,17699,4140],{"class":257},[240,17701,17702],{"class":242,"line":3713},[240,17703,4353],{"emptyLinePlaceholder":2051},[240,17705,17706],{"class":242,"line":3718},[240,17707,17708],{"class":246},"    \u002F\u002F情人设置为只写\n",[240,17710,17711,17713,17716,17718,17720,17723],{"class":242,"line":3732},[240,17712,16858],{"class":288},[240,17714,17715],{"class":436}," setLover",[240,17717,789],{"class":257},[240,17719,16866],{"class":436},[240,17721,17722],{"class":792}," lover",[240,17724,14392],{"class":257},[240,17726,17727,17730,17732],{"class":242,"line":3737},[240,17728,17729],{"class":257},"        m_Lover ",[240,17731,440],{"class":288},[240,17733,17734],{"class":257}," lover;\n",[240,17736,17737],{"class":242,"line":4530},[240,17738,4140],{"class":257},[240,17740,17741],{"class":242,"line":4544},[240,17742,4353],{"emptyLinePlaceholder":2051},[240,17744,17745],{"class":242,"line":4552},[240,17746,17171],{"class":288},[240,17748,17749,17752],{"class":242,"line":4557},[240,17750,17751],{"class":257},"    string m_Name;",[240,17753,17754],{"class":246}," \u002F\u002F可读可写  姓名\n",[240,17756,17757],{"class":242,"line":4563},[240,17758,15160],{"class":257},[240,17760,17761,17763,17766],{"class":242,"line":4569},[240,17762,3938],{"class":288},[240,17764,17765],{"class":257}," m_Age;",[240,17767,17768],{"class":246}," \u002F\u002F只读  年龄\n",[240,17770,17771],{"class":242,"line":4574},[240,17772,4353],{"emptyLinePlaceholder":2051},[240,17774,17775,17778],{"class":242,"line":9899},[240,17776,17777],{"class":257},"    string m_Lover;",[240,17779,17780],{"class":246}," \u002F\u002F只写  情人\n",[240,17782,17783],{"class":242,"line":9923},[240,17784,5947],{"class":257},[240,17786,17787],{"class":242,"line":9928},[240,17788,4353],{"emptyLinePlaceholder":2051},[240,17790,17791,17793,17795],{"class":242,"line":9934},[240,17792,2126],{"class":288},[240,17794,3926],{"class":436},[240,17796,12804],{"class":257},[240,17798,17799],{"class":242,"line":9961},[240,17800,4353],{"emptyLinePlaceholder":2051},[240,17802,17803],{"class":242,"line":9966},[240,17804,17262],{"class":257},[240,17806,17807],{"class":242,"line":9972},[240,17808,17809],{"class":246},"    \u002F\u002F姓名设置\n",[240,17811,17812,17815,17817,17819,17821],{"class":242,"line":9984},[240,17813,17814],{"class":257},"    p.",[240,17816,17015],{"class":436},[240,17818,789],{"class":257},[240,17820,9867],{"class":443},[240,17822,796],{"class":257},[240,17824,17825,17827,17829,17832,17834,17837,17840,17842,17844],{"class":242,"line":9996},[240,17826,8480],{"class":257},[240,17828,3137],{"class":288},[240,17830,17831],{"class":443}," \"姓名： \"",[240,17833,3403],{"class":288},[240,17835,17836],{"class":257}," p.",[240,17838,17839],{"class":436},"getName",[240,17841,15000],{"class":257},[240,17843,3137],{"class":288},[240,17845,10791],{"class":257},[240,17847,17848],{"class":242,"line":10008},[240,17849,4353],{"emptyLinePlaceholder":2051},[240,17851,17852],{"class":242,"line":11667},[240,17853,17854],{"class":246},"    \u002F\u002F年龄设置\n",[240,17856,17857,17859,17862,17864,17866],{"class":242,"line":11692},[240,17858,17814],{"class":257},[240,17860,17861],{"class":436},"setAge",[240,17863,789],{"class":257},[240,17865,2754],{"class":264},[240,17867,796],{"class":257},[240,17869,17870,17872,17874,17877,17879,17881,17884,17886,17888],{"class":242,"line":11715},[240,17871,8480],{"class":257},[240,17873,3137],{"class":288},[240,17875,17876],{"class":443}," \"年龄： \"",[240,17878,3403],{"class":288},[240,17880,17836],{"class":257},[240,17882,17883],{"class":436},"getAge",[240,17885,15000],{"class":257},[240,17887,3137],{"class":288},[240,17889,10791],{"class":257},[240,17891,17892],{"class":242,"line":11739},[240,17893,4353],{"emptyLinePlaceholder":2051},[240,17895,17896],{"class":242,"line":11744},[240,17897,17898],{"class":246},"    \u002F\u002F情人设置\n",[240,17900,17901,17903,17906,17908,17911],{"class":242,"line":11749},[240,17902,17814],{"class":257},[240,17904,17905],{"class":436},"setLover",[240,17907,789],{"class":257},[240,17909,17910],{"class":443},"\"苍井\"",[240,17912,796],{"class":257},[240,17914,17915,17918],{"class":242,"line":11754},[240,17916,17917],{"class":246},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[240,17919,17920],{"class":246},"  \u002F\u002F只写属性，不可以读取\n",[240,17922,17923],{"class":242,"line":11763},[240,17924,4353],{"emptyLinePlaceholder":2051},[240,17926,17927,17929,17931,17933],{"class":242,"line":11768},[240,17928,4256],{"class":436},[240,17930,789],{"class":257},[240,17932,4261],{"class":443},[240,17934,796],{"class":257},[240,17936,17937],{"class":242,"line":11774},[240,17938,4353],{"emptyLinePlaceholder":2051},[240,17940,17941,17943,17945],{"class":242,"line":11795},[240,17942,6042],{"class":288},[240,17944,6045],{"class":264},[240,17946,274],{"class":257},[240,17948,17949],{"class":242,"line":11801},[240,17950,312],{"class":257},[32,17952,17954],{"id":17953},"_814封装案例","8.1.4封装案例",[1826,17956,17957],{},[1829,17958,17959,17962],{},[68,17960,17961],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[3100,17964,17965,17968],{},[1829,17966,17967],{},"求出立方体的面积和体积",[1829,17969,17970],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[231,17972,17974],{"className":2112,"code":17973,"language":2114,"meta":236,"style":236},"#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",[23,17975,17976,17982,17992,17999,18003,18007,18012,18042,18046,18056,18066,18076,18080,18089,18093,18129,18133,18142,18146,18162,18166,18171,18180,18184,18191,18195,18204,18208,18215,18219,18228,18232,18239,18243,18248,18265,18269,18315,18319,18328,18332,18336,18340,18349,18353,18357,18362,18366,18372,18378,18384,18388,18392,18397,18419,18423,18477,18481,18489,18493,18498,18503,18516,18523,18539,18550,18556,18579,18585,18608,18622,18642,18648,18659,18682,18704,18709,18715,18729,18742,18747,18761,18766,18772,18777,18791,18796,18801,18815,18827,18832,18845,18850,18855,18860,18873,18878],{"__ignoreMap":236},[240,17977,17978,17980],{"class":242,"line":243},[240,17979,3903],{"class":288},[240,17981,3906],{"class":443},[240,17983,17984,17986,17988,17990],{"class":242,"line":250},[240,17985,3911],{"class":288},[240,17987,3914],{"class":288},[240,17989,3917],{"class":436},[240,17991,274],{"class":257},[240,17993,17994,17996],{"class":242,"line":261},[240,17995,16643],{"class":288},[240,17997,17998],{"class":436}," Cube\n",[240,18000,18001],{"class":242,"line":277},[240,18002,3504],{"class":257},[240,18004,18005],{"class":242,"line":294},[240,18006,16665],{"class":288},[240,18008,18009],{"class":242,"line":309},[240,18010,18011],{"class":246},"    \u002F\u002F输入长宽高\n",[240,18013,18014,18016,18019,18021,18023,18026,18028,18030,18033,18035,18037,18040],{"class":242,"line":529},[240,18015,16858],{"class":288},[240,18017,18018],{"class":436}," setLwh",[240,18020,789],{"class":257},[240,18022,2126],{"class":288},[240,18024,18025],{"class":792}," l",[240,18027,2479],{"class":257},[240,18029,2126],{"class":288},[240,18031,18032],{"class":792}," w",[240,18034,2479],{"class":257},[240,18036,2126],{"class":288},[240,18038,18039],{"class":792}," h",[240,18041,2129],{"class":257},[240,18043,18044],{"class":242,"line":549},[240,18045,3983],{"class":257},[240,18047,18048,18051,18053],{"class":242,"line":569},[240,18049,18050],{"class":257},"        m_L",[240,18052,440],{"class":288},[240,18054,18055],{"class":257},"l;\n",[240,18057,18058,18061,18063],{"class":242,"line":589},[240,18059,18060],{"class":257},"        m_W",[240,18062,440],{"class":288},[240,18064,18065],{"class":257},"w;\n",[240,18067,18068,18071,18073],{"class":242,"line":715},[240,18069,18070],{"class":257},"        m_H",[240,18072,440],{"class":288},[240,18074,18075],{"class":257},"h;\n",[240,18077,18078],{"class":242,"line":727},[240,18079,4140],{"class":257},[240,18081,18082,18084,18087],{"class":242,"line":1730},[240,18083,3938],{"class":288},[240,18085,18086],{"class":436}," mianji",[240,18088,3929],{"class":257},[240,18090,18091],{"class":242,"line":3582},[240,18092,3983],{"class":257},[240,18094,18095,18097,18099,18101,18104,18106,18109,18111,18114,18116,18119,18121,18124,18126],{"class":242,"line":3596},[240,18096,16701],{"class":288},[240,18098,16704],{"class":264},[240,18100,2554],{"class":288},[240,18102,18103],{"class":257},"(m_L",[240,18105,2554],{"class":288},[240,18107,18108],{"class":257},"m_W ",[240,18110,2580],{"class":288},[240,18112,18113],{"class":257}," m_L",[240,18115,2554],{"class":288},[240,18117,18118],{"class":257},"m_H ",[240,18120,2580],{"class":288},[240,18122,18123],{"class":257}," m_W",[240,18125,2554],{"class":288},[240,18127,18128],{"class":257},"m_H);\n",[240,18130,18131],{"class":242,"line":3601},[240,18132,4140],{"class":257},[240,18134,18135,18137,18140],{"class":242,"line":3607},[240,18136,3938],{"class":288},[240,18138,18139],{"class":436}," tiji",[240,18141,3929],{"class":257},[240,18143,18144],{"class":242,"line":3628},[240,18145,3983],{"class":257},[240,18147,18148,18150,18152,18154,18157,18159],{"class":242,"line":3633},[240,18149,16701],{"class":288},[240,18151,18113],{"class":257},[240,18153,2554],{"class":288},[240,18155,18156],{"class":257},"m_W",[240,18158,2554],{"class":288},[240,18160,18161],{"class":257},"m_H;\n",[240,18163,18164],{"class":242,"line":3647},[240,18165,4140],{"class":257},[240,18167,18168],{"class":242,"line":3652},[240,18169,18170],{"class":246},"    \u002F\u002F获取长宽高\n",[240,18172,18173,18175,18178],{"class":242,"line":3681},[240,18174,3938],{"class":288},[240,18176,18177],{"class":436}," getLength",[240,18179,3929],{"class":257},[240,18181,18182],{"class":242,"line":3686},[240,18183,3983],{"class":257},[240,18185,18186,18188],{"class":242,"line":3703},[240,18187,16701],{"class":288},[240,18189,18190],{"class":257}," m_L;\n",[240,18192,18193],{"class":242,"line":3708},[240,18194,4140],{"class":257},[240,18196,18197,18199,18202],{"class":242,"line":3713},[240,18198,3938],{"class":288},[240,18200,18201],{"class":436}," getWidth",[240,18203,3929],{"class":257},[240,18205,18206],{"class":242,"line":3718},[240,18207,3983],{"class":257},[240,18209,18210,18212],{"class":242,"line":3732},[240,18211,16701],{"class":288},[240,18213,18214],{"class":257}," m_W;\n",[240,18216,18217],{"class":242,"line":3737},[240,18218,4140],{"class":257},[240,18220,18221,18223,18226],{"class":242,"line":4530},[240,18222,3938],{"class":288},[240,18224,18225],{"class":436}," getHeight",[240,18227,3929],{"class":257},[240,18229,18230],{"class":242,"line":4544},[240,18231,3983],{"class":257},[240,18233,18234,18236],{"class":242,"line":4552},[240,18235,16701],{"class":288},[240,18237,18238],{"class":257}," m_H;\n",[240,18240,18241],{"class":242,"line":4557},[240,18242,4140],{"class":257},[240,18244,18245],{"class":242,"line":4563},[240,18246,18247],{"class":246},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[240,18249,18250,18253,18256,18258,18261,18263],{"class":242,"line":4569},[240,18251,18252],{"class":288},"    bool",[240,18254,18255],{"class":436}," isEqual",[240,18257,789],{"class":257},[240,18259,18260],{"class":436},"Cube",[240,18262,4801],{"class":792},[240,18264,2129],{"class":257},[240,18266,18267],{"class":242,"line":4574},[240,18268,3983],{"class":257},[240,18270,18271,18273,18276,18279,18281,18283,18286,18288,18291,18294,18296,18298,18301,18303,18305,18308,18310,18312],{"class":242,"line":9899},[240,18272,4450],{"class":288},[240,18274,18275],{"class":257}," (c.",[240,18277,18278],{"class":436},"getLength",[240,18280,15000],{"class":257},[240,18282,4901],{"class":288},[240,18284,18285],{"class":257}," m_L ",[240,18287,3669],{"class":288},[240,18289,18290],{"class":257}," c.",[240,18292,18293],{"class":436},"getWidth",[240,18295,15000],{"class":257},[240,18297,4901],{"class":288},[240,18299,18300],{"class":257}," m_W ",[240,18302,3669],{"class":288},[240,18304,18290],{"class":257},[240,18306,18307],{"class":436},"getHeight",[240,18309,15000],{"class":257},[240,18311,4901],{"class":288},[240,18313,18314],{"class":257}," m_H)\n",[240,18316,18317],{"class":242,"line":9923},[240,18318,4463],{"class":257},[240,18320,18321,18323,18326],{"class":242,"line":9928},[240,18322,17680],{"class":288},[240,18324,18325],{"class":264}," true",[240,18327,274],{"class":257},[240,18329,18330],{"class":242,"line":9934},[240,18331,4482],{"class":257},[240,18333,18334],{"class":242,"line":9961},[240,18335,4523],{"class":288},[240,18337,18338],{"class":242,"line":9966},[240,18339,4463],{"class":257},[240,18341,18342,18344,18347],{"class":242,"line":9972},[240,18343,17680],{"class":288},[240,18345,18346],{"class":264}," false",[240,18348,274],{"class":257},[240,18350,18351],{"class":242,"line":9984},[240,18352,4482],{"class":257},[240,18354,18355],{"class":242,"line":9996},[240,18356,4140],{"class":257},[240,18358,18359],{"class":242,"line":10008},[240,18360,18361],{"class":246},"    \u002F\u002F私有属性\n",[240,18363,18364],{"class":242,"line":11667},[240,18365,17171],{"class":288},[240,18367,18368,18370],{"class":242,"line":11692},[240,18369,3938],{"class":288},[240,18371,18190],{"class":257},[240,18373,18374,18376],{"class":242,"line":11715},[240,18375,3938],{"class":288},[240,18377,18214],{"class":257},[240,18379,18380,18382],{"class":242,"line":11739},[240,18381,3938],{"class":288},[240,18383,18238],{"class":257},[240,18385,18386],{"class":242,"line":11744},[240,18387,4353],{"emptyLinePlaceholder":2051},[240,18389,18390],{"class":242,"line":11749},[240,18391,5947],{"class":257},[240,18393,18394],{"class":242,"line":11754},[240,18395,18396],{"class":246},"\u002F\u002F全局函数判断两个立方体是否相等\n",[240,18398,18399,18401,18403,18405,18407,18410,18412,18414,18417],{"class":242,"line":11763},[240,18400,3314],{"class":288},[240,18402,18255],{"class":436},[240,18404,789],{"class":257},[240,18406,18260],{"class":436},[240,18408,18409],{"class":792}," c1",[240,18411,2479],{"class":257},[240,18413,18260],{"class":436},[240,18415,18416],{"class":792}," c2",[240,18418,2129],{"class":257},[240,18420,18421],{"class":242,"line":11768},[240,18422,3504],{"class":257},[240,18424,18425,18427,18430,18432,18434,18436,18439,18441,18444,18446,18448,18450,18452,18454,18456,18458,18460,18462,18464,18466,18468,18470,18472,18474],{"class":242,"line":11774},[240,18426,6042],{"class":288},[240,18428,18429],{"class":257}," (c1.",[240,18431,18278],{"class":436},[240,18433,15000],{"class":257},[240,18435,4901],{"class":288},[240,18437,18438],{"class":257}," c2.",[240,18440,18278],{"class":436},[240,18442,18443],{"class":257},"()) ",[240,18445,3669],{"class":288},[240,18447,18429],{"class":257},[240,18449,18293],{"class":436},[240,18451,15000],{"class":257},[240,18453,4901],{"class":288},[240,18455,18438],{"class":257},[240,18457,18293],{"class":436},[240,18459,18443],{"class":257},[240,18461,3669],{"class":288},[240,18463,18429],{"class":257},[240,18465,18307],{"class":436},[240,18467,15000],{"class":257},[240,18469,4901],{"class":288},[240,18471,18438],{"class":257},[240,18473,18307],{"class":436},[240,18475,18476],{"class":257},"());\n",[240,18478,18479],{"class":242,"line":11795},[240,18480,312],{"class":257},[240,18482,18483,18485,18487],{"class":242,"line":11801},[240,18484,2126],{"class":288},[240,18486,3926],{"class":436},[240,18488,3929],{"class":257},[240,18490,18491],{"class":242,"line":11815},[240,18492,3504],{"class":257},[240,18494,18495],{"class":242,"line":11821},[240,18496,18497],{"class":257},"    Cube c1;\n",[240,18499,18500],{"class":242,"line":11848},[240,18501,18502],{"class":246},"    \u002F\u002F输入立方体的长宽高\n",[240,18504,18505,18507,18509,18512,18514],{"class":242,"line":11857},[240,18506,3509],{"class":257},[240,18508,3137],{"class":288},[240,18510,18511],{"class":443},"\"请输入第一个立方体的长、宽、高：\"",[240,18513,3137],{"class":288},[240,18515,3159],{"class":257},[240,18517,18518,18520],{"class":242,"line":11863},[240,18519,3938],{"class":288},[240,18521,18522],{"class":257}," l,w,h,l1,w1,h1;\n",[240,18524,18525,18527,18529,18531,18533,18535,18537],{"class":242,"line":11871},[240,18526,3965],{"class":257},[240,18528,3388],{"class":288},[240,18530,2617],{"class":257},[240,18532,3388],{"class":288},[240,18534,2892],{"class":257},[240,18536,3388],{"class":288},[240,18538,18075],{"class":257},[240,18540,18541,18544,18547],{"class":242,"line":11876},[240,18542,18543],{"class":257},"    c1.",[240,18545,18546],{"class":436},"setLwh",[240,18548,18549],{"class":257},"(l,w,h);\n",[240,18551,18553],{"class":242,"line":18552},66,[240,18554,18555],{"class":246},"    \u002F\u002F面积\n",[240,18557,18559,18561,18563,18566,18568,18570,18573,18575,18577],{"class":242,"line":18558},67,[240,18560,3509],{"class":257},[240,18562,3137],{"class":288},[240,18564,18565],{"class":443},"\"立方体的表面积为：\"",[240,18567,3137],{"class":288},[240,18569,16779],{"class":257},[240,18571,18572],{"class":436},"mianji",[240,18574,4380],{"class":257},[240,18576,3137],{"class":288},[240,18578,3159],{"class":257},[240,18580,18582],{"class":242,"line":18581},68,[240,18583,18584],{"class":246},"    \u002F\u002F体积\n",[240,18586,18588,18590,18592,18595,18597,18599,18602,18604,18606],{"class":242,"line":18587},69,[240,18589,3509],{"class":257},[240,18591,3137],{"class":288},[240,18593,18594],{"class":443},"\"立方体的体积为：\"",[240,18596,3137],{"class":288},[240,18598,16779],{"class":257},[240,18600,18601],{"class":436},"tiji",[240,18603,4380],{"class":257},[240,18605,3137],{"class":288},[240,18607,3159],{"class":257},[240,18609,18611,18613,18615,18618,18620],{"class":242,"line":18610},70,[240,18612,3509],{"class":257},[240,18614,3137],{"class":288},[240,18616,18617],{"class":443},"\"请输入第二个立方体的长、宽、高：\"",[240,18619,3137],{"class":288},[240,18621,3159],{"class":257},[240,18623,18625,18627,18629,18632,18634,18637,18639],{"class":242,"line":18624},71,[240,18626,3965],{"class":257},[240,18628,3388],{"class":288},[240,18630,18631],{"class":257},"l1",[240,18633,3388],{"class":288},[240,18635,18636],{"class":257},"w1",[240,18638,3388],{"class":288},[240,18640,18641],{"class":257},"h1;\n",[240,18643,18645],{"class":242,"line":18644},72,[240,18646,18647],{"class":257},"    Cube c2;\n",[240,18649,18651,18654,18656],{"class":242,"line":18650},73,[240,18652,18653],{"class":257},"    c2.",[240,18655,18546],{"class":436},[240,18657,18658],{"class":257},"(l1,w1,h1);\n",[240,18660,18662,18664,18666,18669,18671,18674,18676,18678,18680],{"class":242,"line":18661},74,[240,18663,3509],{"class":257},[240,18665,3137],{"class":288},[240,18667,18668],{"class":443},"\"第二个立方体的表面积为：\"",[240,18670,3137],{"class":288},[240,18672,18673],{"class":257},"c2.",[240,18675,18572],{"class":436},[240,18677,4380],{"class":257},[240,18679,3137],{"class":288},[240,18681,3159],{"class":257},[240,18683,18685,18687,18689,18692,18694,18696,18698,18700,18702],{"class":242,"line":18684},75,[240,18686,3509],{"class":257},[240,18688,3137],{"class":288},[240,18690,18691],{"class":443},"\"第二个立方体的体积为：\"",[240,18693,3137],{"class":288},[240,18695,18673],{"class":257},[240,18697,18601],{"class":436},[240,18699,4380],{"class":257},[240,18701,3137],{"class":288},[240,18703,3159],{"class":257},[240,18705,18707],{"class":242,"line":18706},76,[240,18708,4353],{"emptyLinePlaceholder":2051},[240,18710,18712],{"class":242,"line":18711},77,[240,18713,18714],{"class":246},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[240,18716,18718,18720,18722,18725,18727],{"class":242,"line":18717},78,[240,18719,3509],{"class":257},[240,18721,3137],{"class":288},[240,18723,18724],{"class":443},"\"内部函数判断结果：\"",[240,18726,3137],{"class":288},[240,18728,3159],{"class":257},[240,18730,18732,18734,18736,18739],{"class":242,"line":18731},79,[240,18733,5053],{"class":288},[240,18735,18429],{"class":257},[240,18737,18738],{"class":436},"isEqual",[240,18740,18741],{"class":257},"(c2))\n",[240,18743,18745],{"class":242,"line":18744},80,[240,18746,3983],{"class":257},[240,18748,18750,18752,18754,18757,18759],{"class":242,"line":18749},81,[240,18751,5403],{"class":257},[240,18753,3137],{"class":288},[240,18755,18756],{"class":443},"\"两个立方体相等\"",[240,18758,3137],{"class":288},[240,18760,3159],{"class":257},[240,18762,18764],{"class":242,"line":18763},82,[240,18765,4140],{"class":257},[240,18767,18769],{"class":242,"line":18768},83,[240,18770,18771],{"class":288},"    else\n",[240,18773,18775],{"class":242,"line":18774},84,[240,18776,3983],{"class":257},[240,18778,18780,18782,18784,18787,18789],{"class":242,"line":18779},85,[240,18781,5403],{"class":257},[240,18783,3137],{"class":288},[240,18785,18786],{"class":443},"\"两个立方体不相等\"",[240,18788,3137],{"class":288},[240,18790,3159],{"class":257},[240,18792,18794],{"class":242,"line":18793},86,[240,18795,4140],{"class":257},[240,18797,18799],{"class":242,"line":18798},87,[240,18800,4353],{"emptyLinePlaceholder":2051},[240,18802,18804,18806,18808,18811,18813],{"class":242,"line":18803},88,[240,18805,3509],{"class":257},[240,18807,3137],{"class":288},[240,18809,18810],{"class":443},"\"全局函数判断结果：\"",[240,18812,3137],{"class":288},[240,18814,3159],{"class":257},[240,18816,18818,18820,18822,18824],{"class":242,"line":18817},89,[240,18819,5053],{"class":288},[240,18821,3612],{"class":257},[240,18823,18738],{"class":436},[240,18825,18826],{"class":257},"(c1, c2))\n",[240,18828,18830],{"class":242,"line":18829},90,[240,18831,3983],{"class":257},[240,18833,18835,18837,18839,18841,18843],{"class":242,"line":18834},91,[240,18836,5403],{"class":257},[240,18838,3137],{"class":288},[240,18840,18756],{"class":443},[240,18842,3137],{"class":288},[240,18844,3159],{"class":257},[240,18846,18848],{"class":242,"line":18847},92,[240,18849,4140],{"class":257},[240,18851,18853],{"class":242,"line":18852},93,[240,18854,18771],{"class":288},[240,18856,18858],{"class":242,"line":18857},94,[240,18859,3983],{"class":257},[240,18861,18863,18865,18867,18869,18871],{"class":242,"line":18862},95,[240,18864,5403],{"class":257},[240,18866,3137],{"class":288},[240,18868,18786],{"class":443},[240,18870,3137],{"class":288},[240,18872,3159],{"class":257},[240,18874,18876],{"class":242,"line":18875},96,[240,18877,4140],{"class":257},[240,18879,18881],{"class":242,"line":18880},97,[240,18882,312],{"class":257},[1826,18884,18885],{"start":250},[1829,18886,18887],{},[68,18888,18889],{},"练习案例2：点和圆的关系",[3100,18891,18892],{},[1829,18893,18894],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[231,18896,18898],{"className":2112,"code":18897,"language":2114,"meta":236,"style":236},"#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",[23,18899,18900,18906,18916,18923,18930,18934,18938,18943,18977,18982,18998,19012,19016,19020,19027,19034,19038,19044,19048,19052,19056,19078,19100,19105,19119,19134,19138,19142,19148,19153,19158,19162,19188,19192,19222,19250,19278,19295,19299,19312,19316,19320,19324,19337,19341,19345,19353,19357,19361,19365,19370,19374,19385,19392,19401,19411,19422,19429,19442,19453,19463,19474,19481,19495,19500,19510,19518],{"__ignoreMap":236},[240,18901,18902,18904],{"class":242,"line":243},[240,18903,3903],{"class":288},[240,18905,3906],{"class":443},[240,18907,18908,18910,18912,18914],{"class":242,"line":250},[240,18909,3911],{"class":288},[240,18911,3914],{"class":288},[240,18913,3917],{"class":436},[240,18915,274],{"class":257},[240,18917,18918,18920],{"class":242,"line":261},[240,18919,3903],{"class":288},[240,18921,18922],{"class":443},"\u003Ccmath>\n",[240,18924,18925,18927],{"class":242,"line":277},[240,18926,16643],{"class":288},[240,18928,18929],{"class":436}," Point\n",[240,18931,18932],{"class":242,"line":294},[240,18933,3504],{"class":257},[240,18935,18936],{"class":242,"line":309},[240,18937,16665],{"class":288},[240,18939,18940],{"class":242,"line":529},[240,18941,18942],{"class":246},"    \u002F\u002F赋值\n",[240,18944,18945,18947,18950,18952,18954,18957,18959,18961,18964,18967,18969,18972,18974],{"class":242,"line":549},[240,18946,16858],{"class":288},[240,18948,18949],{"class":436}," setPoint",[240,18951,789],{"class":257},[240,18953,15986],{"class":288},[240,18955,18956],{"class":792}," x",[240,18958,1277],{"class":257},[240,18960,15986],{"class":288},[240,18962,18963],{"class":792}," y",[240,18965,18966],{"class":257},") { m_x ",[240,18968,440],{"class":288},[240,18970,18971],{"class":257}," x; m_y ",[240,18973,440],{"class":288},[240,18975,18976],{"class":257}," y; }\n",[240,18978,18979],{"class":242,"line":569},[240,18980,18981],{"class":246},"    \u002F\u002F获取坐标\n",[240,18983,18984,18986,18989,18992,18995],{"class":242,"line":589},[240,18985,16687],{"class":288},[240,18987,18988],{"class":436}," getX",[240,18990,18991],{"class":257},"() { ",[240,18993,18994],{"class":288},"return",[240,18996,18997],{"class":257}," m_x; }\n",[240,18999,19000,19002,19005,19007,19009],{"class":242,"line":715},[240,19001,16687],{"class":288},[240,19003,19004],{"class":436}," getY",[240,19006,18991],{"class":257},[240,19008,18994],{"class":288},[240,19010,19011],{"class":257}," m_y; }\n",[240,19013,19014],{"class":242,"line":727},[240,19015,4353],{"emptyLinePlaceholder":2051},[240,19017,19018],{"class":242,"line":1730},[240,19019,17171],{"class":288},[240,19021,19022,19024],{"class":242,"line":3582},[240,19023,16687],{"class":288},[240,19025,19026],{"class":257}," m_x;\n",[240,19028,19029,19031],{"class":242,"line":3596},[240,19030,16687],{"class":288},[240,19032,19033],{"class":257}," m_y;\n",[240,19035,19036],{"class":242,"line":3601},[240,19037,5947],{"class":257},[240,19039,19040,19042],{"class":242,"line":3607},[240,19041,16643],{"class":288},[240,19043,16646],{"class":436},[240,19045,19046],{"class":242,"line":3628},[240,19047,3504],{"class":257},[240,19049,19050],{"class":242,"line":3633},[240,19051,16665],{"class":288},[240,19053,19054],{"class":242,"line":3647},[240,19055,18942],{"class":246},[240,19057,19058,19060,19063,19065,19067,19070,19073,19075],{"class":242,"line":3652},[240,19059,16858],{"class":288},[240,19061,19062],{"class":436}," setRadius",[240,19064,789],{"class":257},[240,19066,15986],{"class":288},[240,19068,19069],{"class":792}," r",[240,19071,19072],{"class":257},") { m_r ",[240,19074,440],{"class":288},[240,19076,19077],{"class":257}," r; }\n",[240,19079,19080,19082,19085,19087,19090,19092,19095,19097],{"class":242,"line":3681},[240,19081,16858],{"class":288},[240,19083,19084],{"class":436}," setCenter",[240,19086,789],{"class":257},[240,19088,19089],{"class":436},"Point",[240,19091,1037],{"class":792},[240,19093,19094],{"class":257},") { m_center ",[240,19096,440],{"class":288},[240,19098,19099],{"class":257}," center; }\n",[240,19101,19102],{"class":242,"line":3686},[240,19103,19104],{"class":246},"    \u002F\u002F获取属性\n",[240,19106,19107,19109,19112,19114,19116],{"class":242,"line":3703},[240,19108,16687],{"class":288},[240,19110,19111],{"class":436}," getRadius",[240,19113,18991],{"class":257},[240,19115,18994],{"class":288},[240,19117,19118],{"class":257}," m_r; }\n",[240,19120,19121,19124,19127,19129,19131],{"class":242,"line":3708},[240,19122,19123],{"class":436},"    Point",[240,19125,19126],{"class":436}," getCenter",[240,19128,18991],{"class":257},[240,19130,18994],{"class":288},[240,19132,19133],{"class":257}," m_center; }\n",[240,19135,19136],{"class":242,"line":3713},[240,19137,4353],{"emptyLinePlaceholder":2051},[240,19139,19140],{"class":242,"line":3718},[240,19141,17171],{"class":288},[240,19143,19144,19146],{"class":242,"line":3732},[240,19145,16687],{"class":288},[240,19147,16677],{"class":257},[240,19149,19150],{"class":242,"line":3737},[240,19151,19152],{"class":246},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[240,19154,19155],{"class":242,"line":4530},[240,19156,19157],{"class":257},"    Point m_center;\n",[240,19159,19160],{"class":242,"line":4544},[240,19161,5947],{"class":257},[240,19163,19164,19166,19169,19171,19174,19176,19178,19180,19182,19184,19186],{"class":242,"line":4552},[240,19165,7315],{"class":288},[240,19167,19168],{"class":436}," isInCircle",[240,19170,789],{"class":257},[240,19172,19173],{"class":436},"Circle",[240,19175,12535],{"class":288},[240,19177,2392],{"class":792},[240,19179,2479],{"class":257},[240,19181,19089],{"class":436},[240,19183,12535],{"class":288},[240,19185,19],{"class":792},[240,19187,2129],{"class":257},[240,19189,19190],{"class":242,"line":4557},[240,19191,3504],{"class":257},[240,19193,19194,19196,19199,19201,19203,19206,19209,19212,19214,19216,19218,19220],{"class":242,"line":4563},[240,19195,16687],{"class":288},[240,19197,19198],{"class":257}," dx ",[240,19200,440],{"class":288},[240,19202,18290],{"class":257},[240,19204,19205],{"class":436},"getCenter",[240,19207,19208],{"class":257},"().",[240,19210,19211],{"class":436},"getX",[240,19213,15000],{"class":257},[240,19215,2631],{"class":288},[240,19217,17836],{"class":257},[240,19219,19211],{"class":436},[240,19221,7587],{"class":257},[240,19223,19224,19226,19229,19231,19233,19235,19237,19240,19242,19244,19246,19248],{"class":242,"line":4569},[240,19225,16687],{"class":288},[240,19227,19228],{"class":257}," dy ",[240,19230,440],{"class":288},[240,19232,18290],{"class":257},[240,19234,19205],{"class":436},[240,19236,19208],{"class":257},[240,19238,19239],{"class":436},"getY",[240,19241,15000],{"class":257},[240,19243,2631],{"class":288},[240,19245,17836],{"class":257},[240,19247,19239],{"class":436},[240,19249,7587],{"class":257},[240,19251,19252,19254,19257,19259,19262,19265,19267,19269,19271,19273,19275],{"class":242,"line":4574},[240,19253,16687],{"class":288},[240,19255,19256],{"class":257}," distance ",[240,19258,440],{"class":288},[240,19260,19261],{"class":436}," sqrt",[240,19263,19264],{"class":257},"(dx ",[240,19266,2554],{"class":288},[240,19268,19198],{"class":257},[240,19270,2580],{"class":288},[240,19272,19228],{"class":257},[240,19274,2554],{"class":288},[240,19276,19277],{"class":257}," dy);\n",[240,19279,19280,19282,19285,19287,19289,19292],{"class":242,"line":9899},[240,19281,5053],{"class":288},[240,19283,19284],{"class":257}," (distance ",[240,19286,431],{"class":288},[240,19288,18290],{"class":257},[240,19290,19291],{"class":436},"getRadius",[240,19293,19294],{"class":257},"())\n",[240,19296,19297],{"class":242,"line":9923},[240,19298,3983],{"class":257},[240,19300,19301,19303,19305,19308,19310],{"class":242,"line":9928},[240,19302,11620],{"class":257},[240,19304,3137],{"class":288},[240,19306,19307],{"class":443}," \"点在圆内\"",[240,19309,3403],{"class":288},[240,19311,10791],{"class":257},[240,19313,19314],{"class":242,"line":9934},[240,19315,4140],{"class":257},[240,19317,19318],{"class":242,"line":9961},[240,19319,18771],{"class":288},[240,19321,19322],{"class":242,"line":9966},[240,19323,3983],{"class":257},[240,19325,19326,19328,19330,19333,19335],{"class":242,"line":9972},[240,19327,11620],{"class":257},[240,19329,3137],{"class":288},[240,19331,19332],{"class":443}," \"点在圆外\"",[240,19334,3403],{"class":288},[240,19336,10791],{"class":257},[240,19338,19339],{"class":242,"line":9984},[240,19340,4140],{"class":257},[240,19342,19343],{"class":242,"line":9996},[240,19344,312],{"class":257},[240,19346,19347,19349,19351],{"class":242,"line":10008},[240,19348,2126],{"class":288},[240,19350,3926],{"class":436},[240,19352,3929],{"class":257},[240,19354,19355],{"class":242,"line":11667},[240,19356,3504],{"class":257},[240,19358,19359],{"class":242,"line":11692},[240,19360,17002],{"class":246},[240,19362,19363],{"class":242,"line":11715},[240,19364,16749],{"class":257},[240,19366,19367],{"class":242,"line":11739},[240,19368,19369],{"class":257},"    Point p1;\n",[240,19371,19372],{"class":242,"line":11744},[240,19373,18942],{"class":246},[240,19375,19376,19378,19380,19383],{"class":242,"line":11749},[240,19377,3509],{"class":257},[240,19379,3137],{"class":288},[240,19381,19382],{"class":443},"\"请输入圆的半径：\"",[240,19384,274],{"class":257},[240,19386,19387,19389],{"class":242,"line":11754},[240,19388,16687],{"class":288},[240,19390,19391],{"class":257}," r;\n",[240,19393,19394,19396,19398],{"class":242,"line":11763},[240,19395,3965],{"class":257},[240,19397,3388],{"class":288},[240,19399,19400],{"class":257},"r;\n",[240,19402,19403,19405,19408],{"class":242,"line":11768},[240,19404,18543],{"class":257},[240,19406,19407],{"class":436},"setRadius",[240,19409,19410],{"class":257},"(r);\n",[240,19412,19413,19415,19417,19420],{"class":242,"line":11774},[240,19414,3509],{"class":257},[240,19416,3137],{"class":288},[240,19418,19419],{"class":443},"\"请输入圆心坐标：\"",[240,19421,274],{"class":257},[240,19423,19424,19426],{"class":242,"line":11795},[240,19425,16687],{"class":288},[240,19427,19428],{"class":257}," x, y;\n",[240,19430,19431,19433,19435,19437,19439],{"class":242,"line":11801},[240,19432,3965],{"class":257},[240,19434,3388],{"class":288},[240,19436,2916],{"class":257},[240,19438,3388],{"class":288},[240,19440,19441],{"class":257},"y;\n",[240,19443,19444,19447,19450],{"class":242,"line":11815},[240,19445,19446],{"class":257},"    p1.",[240,19448,19449],{"class":436},"setPoint",[240,19451,19452],{"class":257},"(x, y);\n",[240,19454,19455,19457,19460],{"class":242,"line":11821},[240,19456,18543],{"class":257},[240,19458,19459],{"class":436},"setCenter",[240,19461,19462],{"class":257},"(p1);\n",[240,19464,19465,19467,19469,19472],{"class":242,"line":11848},[240,19466,3509],{"class":257},[240,19468,3137],{"class":288},[240,19470,19471],{"class":443},"\"请输入测试点坐标：\"",[240,19473,274],{"class":257},[240,19475,19476,19478],{"class":242,"line":11857},[240,19477,16687],{"class":288},[240,19479,19480],{"class":257}," x1, y1;\n",[240,19482,19483,19485,19487,19490,19492],{"class":242,"line":11863},[240,19484,3965],{"class":257},[240,19486,3388],{"class":288},[240,19488,19489],{"class":257},"x1",[240,19491,3388],{"class":288},[240,19493,19494],{"class":257},"y1;\n",[240,19496,19497],{"class":242,"line":11871},[240,19498,19499],{"class":257},"    Point p2;\n",[240,19501,19502,19505,19507],{"class":242,"line":11876},[240,19503,19504],{"class":257},"    p2.",[240,19506,19449],{"class":436},[240,19508,19509],{"class":257},"(x1, y1);\n",[240,19511,19512,19515],{"class":242,"line":18552},[240,19513,19514],{"class":436},"    isInCircle",[240,19516,19517],{"class":257},"(c1, p2);\n",[240,19519,19520],{"class":242,"line":18558},[240,19521,312],{"class":257},[19,19523,19524],{},"在类中可以让另一个类作为本来的成员",[19,19526,19527],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[19,19529,19530],{},"创建point.h",[231,19532,19534],{"className":2112,"code":19533,"language":2114,"meta":236,"style":236},"#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",[23,19535,19536,19547,19553,19563,19569,19573,19578,19582,19586,19606,19610,19618,19626,19630,19634,19640,19646],{"__ignoreMap":236},[240,19537,19538,19541,19544],{"class":242,"line":243},[240,19539,19540],{"class":288},"#pragma",[240,19542,19543],{"class":436}," once",[240,19545,19546],{"class":246}," \u002F\u002F防止头文件重复包含\n",[240,19548,19549,19551],{"class":242,"line":250},[240,19550,3903],{"class":288},[240,19552,3906],{"class":443},[240,19554,19555,19557,19559,19561],{"class":242,"line":261},[240,19556,3911],{"class":288},[240,19558,3914],{"class":288},[240,19560,3917],{"class":436},[240,19562,274],{"class":257},[240,19564,19565,19567],{"class":242,"line":277},[240,19566,16643],{"class":288},[240,19568,18929],{"class":436},[240,19570,19571],{"class":242,"line":294},[240,19572,3504],{"class":257},[240,19574,19575],{"class":242,"line":309},[240,19576,19577],{"class":246},"\u002F\u002F做好声明与变量定义就可以\n",[240,19579,19580],{"class":242,"line":529},[240,19581,16665],{"class":288},[240,19583,19584],{"class":242,"line":549},[240,19585,18942],{"class":246},[240,19587,19588,19590,19592,19594,19596,19598,19600,19602,19604],{"class":242,"line":569},[240,19589,16858],{"class":288},[240,19591,18949],{"class":436},[240,19593,789],{"class":257},[240,19595,15986],{"class":288},[240,19597,18956],{"class":792},[240,19599,1277],{"class":257},[240,19601,15986],{"class":288},[240,19603,18963],{"class":792},[240,19605,796],{"class":257},[240,19607,19608],{"class":242,"line":589},[240,19609,18981],{"class":246},[240,19611,19612,19614,19616],{"class":242,"line":715},[240,19613,16687],{"class":288},[240,19615,18988],{"class":436},[240,19617,7587],{"class":257},[240,19619,19620,19622,19624],{"class":242,"line":727},[240,19621,16687],{"class":288},[240,19623,19004],{"class":436},[240,19625,7587],{"class":257},[240,19627,19628],{"class":242,"line":1730},[240,19629,4353],{"emptyLinePlaceholder":2051},[240,19631,19632],{"class":242,"line":3582},[240,19633,17171],{"class":288},[240,19635,19636,19638],{"class":242,"line":3596},[240,19637,16687],{"class":288},[240,19639,19026],{"class":257},[240,19641,19642,19644],{"class":242,"line":3601},[240,19643,16687],{"class":288},[240,19645,19033],{"class":257},[240,19647,19648],{"class":242,"line":3607},[240,19649,5947],{"class":257},[19,19651,19652],{},"创建point.cpp",[231,19654,19656],{"className":2112,"code":19655,"language":2114,"meta":236,"style":236},"#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",[23,19657,19658,19665,19670,19704,19708,19724],{"__ignoreMap":236},[240,19659,19660,19662],{"class":242,"line":243},[240,19661,3903],{"class":288},[240,19663,19664],{"class":443},"\u003Cpoint.h>\n",[240,19666,19667],{"class":242,"line":250},[240,19668,19669],{"class":246},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[240,19671,19672,19674,19677,19680,19682,19684,19686,19688,19690,19692,19694,19696,19698,19700,19702],{"class":242,"line":261},[240,19673,16858],{"class":288},[240,19675,19676],{"class":436}," Point",[240,19678,19679],{"class":257},"::",[240,19681,19449],{"class":436},[240,19683,789],{"class":257},[240,19685,15986],{"class":288},[240,19687,18956],{"class":792},[240,19689,1277],{"class":257},[240,19691,15986],{"class":288},[240,19693,18963],{"class":792},[240,19695,18966],{"class":257},[240,19697,440],{"class":288},[240,19699,18971],{"class":257},[240,19701,440],{"class":288},[240,19703,18976],{"class":257},[240,19705,19706],{"class":242,"line":277},[240,19707,18981],{"class":246},[240,19709,19710,19712,19714,19716,19718,19720,19722],{"class":242,"line":294},[240,19711,16687],{"class":288},[240,19713,19676],{"class":436},[240,19715,19679],{"class":257},[240,19717,19211],{"class":436},[240,19719,18991],{"class":257},[240,19721,18994],{"class":288},[240,19723,18997],{"class":257},[240,19725,19726,19728,19730,19732,19734,19736,19738],{"class":242,"line":309},[240,19727,16687],{"class":288},[240,19729,19676],{"class":436},[240,19731,19679],{"class":257},[240,19733,19239],{"class":436},[240,19735,18991],{"class":257},[240,19737,18994],{"class":288},[240,19739,19011],{"class":257},[19,19741,19742],{},"创建circle.h",[231,19744,19746],{"className":2112,"code":19745,"language":2114,"meta":236,"style":236},"#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",[23,19747,19748,19755,19761,19771,19777,19783,19787,19791,19795,19809,19823,19827,19835,19843,19847,19851,19857,19861,19865],{"__ignoreMap":236},[240,19749,19750,19752],{"class":242,"line":243},[240,19751,19540],{"class":288},[240,19753,19754],{"class":436}," once\n",[240,19756,19757,19759],{"class":242,"line":250},[240,19758,3903],{"class":288},[240,19760,3906],{"class":443},[240,19762,19763,19765,19767,19769],{"class":242,"line":261},[240,19764,3911],{"class":288},[240,19766,3914],{"class":288},[240,19768,3917],{"class":436},[240,19770,274],{"class":257},[240,19772,19773,19775],{"class":242,"line":277},[240,19774,3903],{"class":288},[240,19776,19664],{"class":443},[240,19778,19779,19781],{"class":242,"line":294},[240,19780,16643],{"class":288},[240,19782,16646],{"class":436},[240,19784,19785],{"class":242,"line":309},[240,19786,3504],{"class":257},[240,19788,19789],{"class":242,"line":529},[240,19790,16665],{"class":288},[240,19792,19793],{"class":242,"line":549},[240,19794,18942],{"class":246},[240,19796,19797,19799,19801,19803,19805,19807],{"class":242,"line":569},[240,19798,16858],{"class":288},[240,19800,19062],{"class":436},[240,19802,789],{"class":257},[240,19804,15986],{"class":288},[240,19806,19069],{"class":792},[240,19808,796],{"class":257},[240,19810,19811,19813,19815,19817,19819,19821],{"class":242,"line":589},[240,19812,16858],{"class":288},[240,19814,19084],{"class":436},[240,19816,789],{"class":257},[240,19818,19089],{"class":436},[240,19820,1037],{"class":792},[240,19822,796],{"class":257},[240,19824,19825],{"class":242,"line":715},[240,19826,19104],{"class":246},[240,19828,19829,19831,19833],{"class":242,"line":727},[240,19830,16687],{"class":288},[240,19832,19111],{"class":436},[240,19834,7587],{"class":257},[240,19836,19837,19839,19841],{"class":242,"line":1730},[240,19838,19123],{"class":436},[240,19840,19126],{"class":436},[240,19842,7587],{"class":257},[240,19844,19845],{"class":242,"line":3582},[240,19846,4353],{"emptyLinePlaceholder":2051},[240,19848,19849],{"class":242,"line":3596},[240,19850,17171],{"class":288},[240,19852,19853,19855],{"class":242,"line":3601},[240,19854,16687],{"class":288},[240,19856,16677],{"class":257},[240,19858,19859],{"class":242,"line":3607},[240,19860,19152],{"class":246},[240,19862,19863],{"class":242,"line":3628},[240,19864,19157],{"class":257},[240,19866,19867],{"class":242,"line":3633},[240,19868,5947],{"class":257},[19,19870,19871],{},"创建circle.cpp",[231,19873,19875],{"className":2112,"code":19874,"language":2114,"meta":236,"style":236},"#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",[23,19876,19877,19884,19907,19929,19934,19950],{"__ignoreMap":236},[240,19878,19879,19881],{"class":242,"line":243},[240,19880,3903],{"class":288},[240,19882,19883],{"class":443},"\u003Ccircle.h>\n",[240,19885,19886,19888,19891,19893,19895,19897,19899,19901,19903,19905],{"class":242,"line":250},[240,19887,7315],{"class":288},[240,19889,19890],{"class":436}," Circle",[240,19892,19679],{"class":257},[240,19894,19407],{"class":436},[240,19896,789],{"class":257},[240,19898,15986],{"class":288},[240,19900,19069],{"class":792},[240,19902,19072],{"class":257},[240,19904,440],{"class":288},[240,19906,19077],{"class":257},[240,19908,19909,19911,19913,19915,19917,19919,19921,19923,19925,19927],{"class":242,"line":261},[240,19910,7315],{"class":288},[240,19912,19890],{"class":436},[240,19914,19679],{"class":257},[240,19916,19459],{"class":436},[240,19918,789],{"class":257},[240,19920,19089],{"class":436},[240,19922,1037],{"class":792},[240,19924,19094],{"class":257},[240,19926,440],{"class":288},[240,19928,19099],{"class":257},[240,19930,19931],{"class":242,"line":277},[240,19932,19933],{"class":246},"\u002F\u002F获取属性\n",[240,19935,19936,19938,19940,19942,19944,19946,19948],{"class":242,"line":294},[240,19937,15986],{"class":288},[240,19939,19890],{"class":436},[240,19941,19679],{"class":257},[240,19943,19291],{"class":436},[240,19945,18991],{"class":257},[240,19947,18994],{"class":288},[240,19949,19118],{"class":257},[240,19951,19952,19954,19956,19958,19960,19962,19964],{"class":242,"line":309},[240,19953,19089],{"class":436},[240,19955,19890],{"class":436},[240,19957,19679],{"class":257},[240,19959,19205],{"class":436},[240,19961,18991],{"class":257},[240,19963,18994],{"class":288},[240,19965,19133],{"class":257},[19,19967,19968],{},"使用封装的类",[231,19970,19972],{"className":2112,"code":19971,"language":2114,"meta":236,"style":236},"#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",[23,19973,19974,19980,19990,19996,20002,20026,20030,20056,20082,20106,20120,20124,20136,20140,20144,20148,20160,20164,20168,20176,20180,20184,20188,20192,20196,20206,20212,20220,20228,20238,20244,20256,20264,20272,20282,20288,20300,20304,20312,20318],{"__ignoreMap":236},[240,19975,19976,19978],{"class":242,"line":243},[240,19977,3903],{"class":288},[240,19979,3906],{"class":443},[240,19981,19982,19984,19986,19988],{"class":242,"line":250},[240,19983,3911],{"class":288},[240,19985,3914],{"class":288},[240,19987,3917],{"class":436},[240,19989,274],{"class":257},[240,19991,19992,19994],{"class":242,"line":261},[240,19993,3903],{"class":288},[240,19995,19883],{"class":443},[240,19997,19998,20000],{"class":242,"line":277},[240,19999,3903],{"class":288},[240,20001,19664],{"class":443},[240,20003,20004,20006,20008,20010,20012,20014,20016,20018,20020,20022,20024],{"class":242,"line":294},[240,20005,7315],{"class":288},[240,20007,19168],{"class":436},[240,20009,789],{"class":257},[240,20011,19173],{"class":436},[240,20013,12535],{"class":288},[240,20015,2392],{"class":792},[240,20017,2479],{"class":257},[240,20019,19089],{"class":436},[240,20021,12535],{"class":288},[240,20023,19],{"class":792},[240,20025,2129],{"class":257},[240,20027,20028],{"class":242,"line":309},[240,20029,3504],{"class":257},[240,20031,20032,20034,20036,20038,20040,20042,20044,20046,20048,20050,20052,20054],{"class":242,"line":529},[240,20033,16687],{"class":288},[240,20035,19198],{"class":257},[240,20037,440],{"class":288},[240,20039,18290],{"class":257},[240,20041,19205],{"class":436},[240,20043,19208],{"class":257},[240,20045,19211],{"class":436},[240,20047,15000],{"class":257},[240,20049,2631],{"class":288},[240,20051,17836],{"class":257},[240,20053,19211],{"class":436},[240,20055,7587],{"class":257},[240,20057,20058,20060,20062,20064,20066,20068,20070,20072,20074,20076,20078,20080],{"class":242,"line":549},[240,20059,16687],{"class":288},[240,20061,19228],{"class":257},[240,20063,440],{"class":288},[240,20065,18290],{"class":257},[240,20067,19205],{"class":436},[240,20069,19208],{"class":257},[240,20071,19239],{"class":436},[240,20073,15000],{"class":257},[240,20075,2631],{"class":288},[240,20077,17836],{"class":257},[240,20079,19239],{"class":436},[240,20081,7587],{"class":257},[240,20083,20084,20086,20088,20090,20092,20094,20096,20098,20100,20102,20104],{"class":242,"line":569},[240,20085,16687],{"class":288},[240,20087,19256],{"class":257},[240,20089,440],{"class":288},[240,20091,19261],{"class":436},[240,20093,19264],{"class":257},[240,20095,2554],{"class":288},[240,20097,19198],{"class":257},[240,20099,2580],{"class":288},[240,20101,19228],{"class":257},[240,20103,2554],{"class":288},[240,20105,19277],{"class":257},[240,20107,20108,20110,20112,20114,20116,20118],{"class":242,"line":589},[240,20109,5053],{"class":288},[240,20111,19284],{"class":257},[240,20113,431],{"class":288},[240,20115,18290],{"class":257},[240,20117,19291],{"class":436},[240,20119,19294],{"class":257},[240,20121,20122],{"class":242,"line":715},[240,20123,3983],{"class":257},[240,20125,20126,20128,20130,20132,20134],{"class":242,"line":727},[240,20127,11620],{"class":257},[240,20129,3137],{"class":288},[240,20131,19307],{"class":443},[240,20133,3403],{"class":288},[240,20135,10791],{"class":257},[240,20137,20138],{"class":242,"line":1730},[240,20139,4140],{"class":257},[240,20141,20142],{"class":242,"line":3582},[240,20143,18771],{"class":288},[240,20145,20146],{"class":242,"line":3596},[240,20147,3983],{"class":257},[240,20149,20150,20152,20154,20156,20158],{"class":242,"line":3601},[240,20151,11620],{"class":257},[240,20153,3137],{"class":288},[240,20155,19332],{"class":443},[240,20157,3403],{"class":288},[240,20159,10791],{"class":257},[240,20161,20162],{"class":242,"line":3607},[240,20163,4140],{"class":257},[240,20165,20166],{"class":242,"line":3628},[240,20167,312],{"class":257},[240,20169,20170,20172,20174],{"class":242,"line":3633},[240,20171,2126],{"class":288},[240,20173,3926],{"class":436},[240,20175,3929],{"class":257},[240,20177,20178],{"class":242,"line":3647},[240,20179,3504],{"class":257},[240,20181,20182],{"class":242,"line":3652},[240,20183,17002],{"class":246},[240,20185,20186],{"class":242,"line":3681},[240,20187,16749],{"class":257},[240,20189,20190],{"class":242,"line":3686},[240,20191,19369],{"class":257},[240,20193,20194],{"class":242,"line":3703},[240,20195,18942],{"class":246},[240,20197,20198,20200,20202,20204],{"class":242,"line":3708},[240,20199,3509],{"class":257},[240,20201,3137],{"class":288},[240,20203,19382],{"class":443},[240,20205,274],{"class":257},[240,20207,20208,20210],{"class":242,"line":3713},[240,20209,16687],{"class":288},[240,20211,19391],{"class":257},[240,20213,20214,20216,20218],{"class":242,"line":3718},[240,20215,3965],{"class":257},[240,20217,3388],{"class":288},[240,20219,19400],{"class":257},[240,20221,20222,20224,20226],{"class":242,"line":3732},[240,20223,18543],{"class":257},[240,20225,19407],{"class":436},[240,20227,19410],{"class":257},[240,20229,20230,20232,20234,20236],{"class":242,"line":3737},[240,20231,3509],{"class":257},[240,20233,3137],{"class":288},[240,20235,19419],{"class":443},[240,20237,274],{"class":257},[240,20239,20240,20242],{"class":242,"line":4530},[240,20241,16687],{"class":288},[240,20243,19428],{"class":257},[240,20245,20246,20248,20250,20252,20254],{"class":242,"line":4544},[240,20247,3965],{"class":257},[240,20249,3388],{"class":288},[240,20251,2916],{"class":257},[240,20253,3388],{"class":288},[240,20255,19441],{"class":257},[240,20257,20258,20260,20262],{"class":242,"line":4552},[240,20259,19446],{"class":257},[240,20261,19449],{"class":436},[240,20263,19452],{"class":257},[240,20265,20266,20268,20270],{"class":242,"line":4557},[240,20267,18543],{"class":257},[240,20269,19459],{"class":436},[240,20271,19462],{"class":257},[240,20273,20274,20276,20278,20280],{"class":242,"line":4563},[240,20275,3509],{"class":257},[240,20277,3137],{"class":288},[240,20279,19471],{"class":443},[240,20281,274],{"class":257},[240,20283,20284,20286],{"class":242,"line":4569},[240,20285,16687],{"class":288},[240,20287,19480],{"class":257},[240,20289,20290,20292,20294,20296,20298],{"class":242,"line":4574},[240,20291,3965],{"class":257},[240,20293,3388],{"class":288},[240,20295,19489],{"class":257},[240,20297,3388],{"class":288},[240,20299,19494],{"class":257},[240,20301,20302],{"class":242,"line":9899},[240,20303,19499],{"class":257},[240,20305,20306,20308,20310],{"class":242,"line":9923},[240,20307,19504],{"class":257},[240,20309,19449],{"class":436},[240,20311,19509],{"class":257},[240,20313,20314,20316],{"class":242,"line":9928},[240,20315,19514],{"class":436},[240,20317,19517],{"class":257},[240,20319,20320],{"class":242,"line":9934},[240,20321,312],{"class":257},[14,20323,20325],{"id":20324},"_82对象的初始化清理","8.2对象的初始化清理",[3100,20327,20328,20331],{},[1829,20329,20330],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[1829,20332,20333],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[32,20335,20337],{"id":20336},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[19,20339,20340,20341,20344],{},"对象的",[68,20342,20343],{},"初始化和清理","也是两个非常重要的安全问题",[19,20346,20347],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[19,20349,20350],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[19,20352,20353,20354,20357,20358,20361],{},"c++利用了",[68,20355,20356],{},"构造函数","和",[68,20359,20360],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[19,20363,20364,20365],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[68,20366,20367],{},"我们不提供构造和析构，编译器会提供",[19,20369,20370],{},[68,20371,20372],{},"编译器提供的构造函数和析构函数是空实现。",[3100,20374,20375,20378],{},[1829,20376,20377],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[1829,20379,20380,20381,20384],{},"析构函数：主要作用在于对象",[68,20382,20383],{},"销毁前","系统自动调用，执行一些清理工作。",[19,20386,20387,20390],{},[68,20388,20389],{},"构造函数语法：",[23,20391,20392],{},"类名(){}",[1826,20394,20395,20398,20401,20404,20407],{},[1829,20396,20397],{},"构造函数，没有返回值也不写void",[1829,20399,20400],{},"函数名称与类名相同",[1829,20402,20403],{},"构造函数可以有参数，因此可以发生重载",[1829,20405,20406],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[1829,20408,20409,20410,2529],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[23,20411,20412],{},"Person(){}",[19,20414,20415,15744,20418],{},[68,20416,20417],{},"析构函数语法：",[23,20419,20420],{},"~类名(){}",[1826,20422,20423,20426,20429,20435],{},[1829,20424,20425],{},"析构函数，没有返回值也不写void",[1829,20427,20428],{},"函数名称与类名相同,在名称前加上符号  ~",[1829,20430,20431,20432],{},"析构函数不可以有参数，因此",[68,20433,20434],{},"不可以发生重载",[1829,20436,20437],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[231,20439,20441],{"className":2112,"code":20440,"language":2114,"meta":236,"style":236},"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",[23,20442,20443,20449,20453,20457,20462,20469,20473,20486,20490,20495,20502,20506,20519,20523,20527,20531,20535,20543,20547,20555,20559,20563,20571,20575,20580,20584,20591,20595,20608,20612,20620],{"__ignoreMap":236},[240,20444,20445,20447],{"class":242,"line":243},[240,20446,16643],{"class":288},[240,20448,17120],{"class":436},[240,20450,20451],{"class":242,"line":250},[240,20452,3504],{"class":257},[240,20454,20455],{"class":242,"line":261},[240,20456,16665],{"class":288},[240,20458,20459],{"class":242,"line":277},[240,20460,20461],{"class":246},"    \u002F\u002F构造函数\n",[240,20463,20464,20467],{"class":242,"line":294},[240,20465,20466],{"class":436},"    Person",[240,20468,3929],{"class":257},[240,20470,20471],{"class":242,"line":309},[240,20472,3983],{"class":257},[240,20474,20475,20477,20479,20482,20484],{"class":242,"line":529},[240,20476,11620],{"class":257},[240,20478,3137],{"class":288},[240,20480,20481],{"class":443}," \"Person的构造函数调用\"",[240,20483,3403],{"class":288},[240,20485,10791],{"class":257},[240,20487,20488],{"class":242,"line":549},[240,20489,4140],{"class":257},[240,20491,20492],{"class":242,"line":569},[240,20493,20494],{"class":246},"    \u002F\u002F析构函数\n",[240,20496,20497,20500],{"class":242,"line":589},[240,20498,20499],{"class":436},"    ~Person",[240,20501,3929],{"class":257},[240,20503,20504],{"class":242,"line":715},[240,20505,3983],{"class":257},[240,20507,20508,20510,20512,20515,20517],{"class":242,"line":727},[240,20509,11620],{"class":257},[240,20511,3137],{"class":288},[240,20513,20514],{"class":443}," \"Person的析构函数调用\"",[240,20516,3403],{"class":288},[240,20518,10791],{"class":257},[240,20520,20521],{"class":242,"line":1730},[240,20522,4140],{"class":257},[240,20524,20525],{"class":242,"line":3582},[240,20526,4353],{"emptyLinePlaceholder":2051},[240,20528,20529],{"class":242,"line":3596},[240,20530,5947],{"class":257},[240,20532,20533],{"class":242,"line":3601},[240,20534,4353],{"emptyLinePlaceholder":2051},[240,20536,20537,20539,20541],{"class":242,"line":3607},[240,20538,7315],{"class":288},[240,20540,7539],{"class":436},[240,20542,3929],{"class":257},[240,20544,20545],{"class":242,"line":3628},[240,20546,3504],{"class":257},[240,20548,20549,20552],{"class":242,"line":3633},[240,20550,20551],{"class":257},"    Person p;",[240,20553,20554],{"class":246},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[240,20556,20557],{"class":242,"line":3647},[240,20558,312],{"class":257},[240,20560,20561],{"class":242,"line":3652},[240,20562,4353],{"emptyLinePlaceholder":2051},[240,20564,20565,20567,20569],{"class":242,"line":3681},[240,20566,2126],{"class":288},[240,20568,3926],{"class":436},[240,20570,12804],{"class":257},[240,20572,20573],{"class":242,"line":3686},[240,20574,15160],{"class":257},[240,20576,20577],{"class":242,"line":3703},[240,20578,20579],{"class":246},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[240,20581,20582],{"class":242,"line":3708},[240,20583,4353],{"emptyLinePlaceholder":2051},[240,20585,20586,20588],{"class":242,"line":3713},[240,20587,20551],{"class":257},[240,20589,20590],{"class":246},"\u002F\u002F只有构造函数\n",[240,20592,20593],{"class":242,"line":3718},[240,20594,4353],{"emptyLinePlaceholder":2051},[240,20596,20597,20599,20601,20603,20605],{"class":242,"line":3732},[240,20598,4256],{"class":436},[240,20600,789],{"class":257},[240,20602,4261],{"class":443},[240,20604,7917],{"class":257},[240,20606,20607],{"class":246},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[240,20609,20610],{"class":242,"line":3737},[240,20611,4353],{"emptyLinePlaceholder":2051},[240,20613,20614,20616,20618],{"class":242,"line":4530},[240,20615,6042],{"class":288},[240,20617,6045],{"class":264},[240,20619,274],{"class":257},[240,20621,20622],{"class":242,"line":4544},[240,20623,312],{"class":257},[19,20625,20626],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[32,20628,20630],{"id":20629},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[19,20632,20633],{},"两种分类方式：",[19,20635,20636],{},"​\t按参数分为： 有参构造和无参构造",[19,20638,20639],{},"​\t按类型分为： 普通构造和拷贝构造",[19,20641,20642],{},"三种调用方式：",[19,20644,20645],{},"​\t括号法",[19,20647,20648],{},"​\t显示法",[19,20650,20651],{},"​\t隐式转换法",[231,20653,20655],{"className":2112,"code":20654,"language":2114,"meta":236,"style":236},"#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",[23,20656,20657,20663,20673,20678,20683,20688,20693,20697,20705,20709,20713,20717,20723,20727,20740,20744,20756,20760,20769,20782,20786,20790,20796,20800,20813,20817,20822,20838,20842,20847,20856,20869,20873,20879,20883,20888,20896,20900,20905,20909,20917,20921,20926,20931,20936,20941,20946,20950,20955,20960,20965,20970,20974,20979,20984,21000,21012,21017,21021,21026,21031,21036,21040,21045,21059,21072,21076,21084,21088,21094,21100,21108],{"__ignoreMap":236},[240,20658,20659,20661],{"class":242,"line":243},[240,20660,3903],{"class":288},[240,20662,3906],{"class":443},[240,20664,20665,20667,20669,20671],{"class":242,"line":250},[240,20666,3911],{"class":288},[240,20668,3914],{"class":288},[240,20670,3917],{"class":436},[240,20672,274],{"class":257},[240,20674,20675],{"class":242,"line":261},[240,20676,20677],{"class":246},"\u002F\u002F1.构造函数的分类及调用\n",[240,20679,20680],{"class":242,"line":277},[240,20681,20682],{"class":246},"\u002F\u002F分类\n",[240,20684,20685],{"class":242,"line":294},[240,20686,20687],{"class":246},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[240,20689,20690],{"class":242,"line":309},[240,20691,20692],{"class":246},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[240,20694,20695],{"class":242,"line":529},[240,20696,4353],{"emptyLinePlaceholder":2051},[240,20698,20699,20701,20703],{"class":242,"line":549},[240,20700,16643],{"class":288},[240,20702,17518],{"class":436},[240,20704,4627],{"class":257},[240,20706,20707],{"class":242,"line":569},[240,20708,3504],{"class":257},[240,20710,20711],{"class":242,"line":589},[240,20712,16665],{"class":288},[240,20714,20715],{"class":242,"line":715},[240,20716,20461],{"class":246},[240,20718,20719,20721],{"class":242,"line":727},[240,20720,20466],{"class":436},[240,20722,3929],{"class":257},[240,20724,20725],{"class":242,"line":1730},[240,20726,3983],{"class":257},[240,20728,20729,20731,20733,20736,20738],{"class":242,"line":3582},[240,20730,5403],{"class":257},[240,20732,3137],{"class":288},[240,20734,20735],{"class":443},"\"Person构造函数无参构造\"",[240,20737,3137],{"class":288},[240,20739,3159],{"class":257},[240,20741,20742],{"class":242,"line":3596},[240,20743,4140],{"class":257},[240,20745,20746,20748,20750,20752,20754],{"class":242,"line":3601},[240,20747,20466],{"class":436},[240,20749,789],{"class":257},[240,20751,2126],{"class":288},[240,20753,609],{"class":792},[240,20755,2129],{"class":257},[240,20757,20758],{"class":242,"line":3607},[240,20759,3983],{"class":257},[240,20761,20762,20765,20767],{"class":242,"line":3628},[240,20763,20764],{"class":257},"        age",[240,20766,440],{"class":288},[240,20768,8148],{"class":257},[240,20770,20771,20773,20775,20778,20780],{"class":242,"line":3633},[240,20772,5403],{"class":257},[240,20774,3137],{"class":288},[240,20776,20777],{"class":443},"\"Person构造函数有参构造\"",[240,20779,3137],{"class":288},[240,20781,3159],{"class":257},[240,20783,20784],{"class":242,"line":3647},[240,20785,4140],{"class":257},[240,20787,20788],{"class":242,"line":3652},[240,20789,20494],{"class":246},[240,20791,20792,20794],{"class":242,"line":3681},[240,20793,20499],{"class":436},[240,20795,3929],{"class":257},[240,20797,20798],{"class":242,"line":3686},[240,20799,3983],{"class":257},[240,20801,20802,20804,20806,20809,20811],{"class":242,"line":3703},[240,20803,5403],{"class":257},[240,20805,3137],{"class":288},[240,20807,20808],{"class":443},"\"Person析构函数被调用\"",[240,20810,3137],{"class":288},[240,20812,3159],{"class":257},[240,20814,20815],{"class":242,"line":3708},[240,20816,4140],{"class":257},[240,20818,20819],{"class":242,"line":3713},[240,20820,20821],{"class":246},"    \u002F\u002F拷贝构造函数\n",[240,20823,20824,20826,20828,20830,20832,20834,20836],{"class":242,"line":3718},[240,20825,20466],{"class":436},[240,20827,789],{"class":257},[240,20829,8743],{"class":288},[240,20831,17518],{"class":436},[240,20833,12535],{"class":288},[240,20835,19],{"class":792},[240,20837,2129],{"class":257},[240,20839,20840],{"class":242,"line":3732},[240,20841,3983],{"class":257},[240,20843,20844],{"class":242,"line":3737},[240,20845,20846],{"class":246},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[240,20848,20849,20851,20853],{"class":242,"line":4530},[240,20850,20764],{"class":257},[240,20852,440],{"class":288},[240,20854,20855],{"class":257},"p.age;\n",[240,20857,20858,20860,20862,20865,20867],{"class":242,"line":4544},[240,20859,5403],{"class":257},[240,20861,3137],{"class":288},[240,20863,20864],{"class":443},"\"Person拷贝构造函数被调用\"",[240,20866,3137],{"class":288},[240,20868,3159],{"class":257},[240,20870,20871],{"class":242,"line":4552},[240,20872,4140],{"class":257},[240,20874,20875,20877],{"class":242,"line":4557},[240,20876,3938],{"class":288},[240,20878,9748],{"class":257},[240,20880,20881],{"class":242,"line":4563},[240,20882,5947],{"class":257},[240,20884,20885],{"class":242,"line":4569},[240,20886,20887],{"class":246},"\u002F\u002F调用\n",[240,20889,20890,20892,20894],{"class":242,"line":4574},[240,20891,7315],{"class":288},[240,20893,7539],{"class":436},[240,20895,3929],{"class":257},[240,20897,20898],{"class":242,"line":9899},[240,20899,3504],{"class":257},[240,20901,20902],{"class":242,"line":9923},[240,20903,20904],{"class":246},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[240,20906,20907],{"class":242,"line":9928},[240,20908,312],{"class":257},[240,20910,20911,20913,20915],{"class":242,"line":9934},[240,20912,7315],{"class":288},[240,20914,7608],{"class":436},[240,20916,3929],{"class":257},[240,20918,20919],{"class":242,"line":9961},[240,20920,3504],{"class":257},[240,20922,20923],{"class":242,"line":9966},[240,20924,20925],{"class":246},"    \u002F\u002F1.括号法\n",[240,20927,20928],{"class":242,"line":9972},[240,20929,20930],{"class":246},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[240,20932,20933],{"class":242,"line":9984},[240,20934,20935],{"class":246},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[240,20937,20938],{"class":242,"line":9996},[240,20939,20940],{"class":246},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[240,20942,20943],{"class":242,"line":10008},[240,20944,20945],{"class":246},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[240,20947,20948],{"class":242,"line":11667},[240,20949,4353],{"emptyLinePlaceholder":2051},[240,20951,20952],{"class":242,"line":11692},[240,20953,20954],{"class":246},"    \u002F\u002F注意事项\n",[240,20956,20957],{"class":242,"line":11715},[240,20958,20959],{"class":246},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[240,20961,20962],{"class":242,"line":11739},[240,20963,20964],{"class":246},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[240,20966,20967],{"class":242,"line":11744},[240,20968,20969],{"class":246},"    \u002F\u002F Person p4();\n",[240,20971,20972],{"class":242,"line":11749},[240,20973,4353],{"emptyLinePlaceholder":2051},[240,20975,20976],{"class":242,"line":11754},[240,20977,20978],{"class":246},"    \u002F\u002F2.显示法\n",[240,20980,20981],{"class":242,"line":11763},[240,20982,20983],{"class":257},"    Person p1;\n",[240,20985,20986,20989,20991,20994,20996,20998],{"class":242,"line":11768},[240,20987,20988],{"class":257},"    Person p2",[240,20990,440],{"class":288},[240,20992,20993],{"class":436},"Person",[240,20995,789],{"class":257},[240,20997,2546],{"class":264},[240,20999,796],{"class":257},[240,21001,21002,21005,21007,21009],{"class":242,"line":11774},[240,21003,21004],{"class":257},"    Person p3",[240,21006,440],{"class":288},[240,21008,20993],{"class":436},[240,21010,21011],{"class":257},"(p2);\n",[240,21013,21014],{"class":242,"line":11795},[240,21015,21016],{"class":246},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[240,21018,21019],{"class":242,"line":11801},[240,21020,4353],{"emptyLinePlaceholder":2051},[240,21022,21023],{"class":242,"line":11815},[240,21024,21025],{"class":246},"    \u002F\u002F 注意事项2\n",[240,21027,21028],{"class":242,"line":11821},[240,21029,21030],{"class":246},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[240,21032,21033],{"class":242,"line":11848},[240,21034,21035],{"class":246},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[240,21037,21038],{"class":242,"line":11857},[240,21039,4353],{"emptyLinePlaceholder":2051},[240,21041,21042],{"class":242,"line":11863},[240,21043,21044],{"class":246},"    \u002F\u002F3.隐士转换法\n",[240,21046,21047,21050,21052,21054,21056],{"class":242,"line":11871},[240,21048,21049],{"class":257},"    Person p4",[240,21051,440],{"class":288},[240,21053,2546],{"class":264},[240,21055,2175],{"class":257},[240,21057,21058],{"class":246},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[240,21060,21061,21064,21066,21069],{"class":242,"line":11876},[240,21062,21063],{"class":257},"    Person p5",[240,21065,440],{"class":288},[240,21067,21068],{"class":257},"p4;",[240,21070,21071],{"class":246}," \u002F\u002F 这里会调用拷贝构造函数\n",[240,21073,21074],{"class":242,"line":18552},[240,21075,312],{"class":257},[240,21077,21078,21080,21082],{"class":242,"line":18558},[240,21079,2126],{"class":288},[240,21081,3926],{"class":436},[240,21083,3929],{"class":257},[240,21085,21086],{"class":242,"line":18581},[240,21087,3504],{"class":257},[240,21089,21090,21092],{"class":242,"line":18587},[240,21091,7584],{"class":436},[240,21093,7587],{"class":257},[240,21095,21096,21098],{"class":242,"line":18610},[240,21097,7653],{"class":436},[240,21099,7587],{"class":257},[240,21101,21102,21104,21106],{"class":242,"line":18624},[240,21103,6042],{"class":288},[240,21105,6045],{"class":264},[240,21107,274],{"class":257},[240,21109,21110],{"class":242,"line":18644},[240,21111,312],{"class":257},[19,21113,21114,21117],{},[68,21115,21116],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[32,21119,21121],{"id":21120},"_823拷贝构造函数","8.2.3拷贝构造函数",[19,21123,21124],{},"C++中拷贝构造函数调用时机通常有三种情况",[3100,21126,21127,21130,21133],{},[1829,21128,21129],{},"使用一个已经创建完毕的对象来初始化一个新对象",[1829,21131,21132],{},"值传递的方式给函数参数传值",[1829,21134,21135],{},"以值方式返回局部对象",[231,21137,21139],{"className":2112,"code":21138,"language":2114,"meta":236,"style":236},"#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",[23,21140,21141,21147,21157,21161,21166,21170,21175,21180,21185,21191,21195,21199,21205,21209,21222,21226,21231,21243,21247,21255,21268,21272,21276,21292,21296,21305,21318,21322,21328,21332,21344,21348,21354,21358,21362,21370,21374,21387,21395,21413,21417,21422,21427,21442,21446,21459,21463,21471,21475,21479,21487,21491,21496,21505,21509,21513,21538,21548,21552,21560,21564,21575,21600,21604,21608,21612,21620,21624,21629,21634,21641,21646,21651,21656,21661,21665,21670,21674,21679,21683,21688,21693,21697,21701,21706,21711,21719],{"__ignoreMap":236},[240,21142,21143,21145],{"class":242,"line":243},[240,21144,3903],{"class":288},[240,21146,3906],{"class":443},[240,21148,21149,21151,21153,21155],{"class":242,"line":250},[240,21150,3911],{"class":288},[240,21152,3914],{"class":288},[240,21154,3917],{"class":436},[240,21156,274],{"class":257},[240,21158,21159],{"class":242,"line":261},[240,21160,4353],{"emptyLinePlaceholder":2051},[240,21162,21163],{"class":242,"line":277},[240,21164,21165],{"class":246},"\u002F\u002F拷贝构造函数调用时机\n",[240,21167,21168],{"class":242,"line":294},[240,21169,4353],{"emptyLinePlaceholder":2051},[240,21171,21172],{"class":242,"line":309},[240,21173,21174],{"class":246},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[240,21176,21177],{"class":242,"line":529},[240,21178,21179],{"class":246},"\u002F\u002F2.值传递的方式给函数参数传值\n",[240,21181,21182],{"class":242,"line":549},[240,21183,21184],{"class":246},"\u002F\u002F3.以值方式返回局部对象\n",[240,21186,21187,21189],{"class":242,"line":569},[240,21188,16643],{"class":288},[240,21190,17120],{"class":436},[240,21192,21193],{"class":242,"line":589},[240,21194,3504],{"class":257},[240,21196,21197],{"class":242,"line":715},[240,21198,16665],{"class":288},[240,21200,21201,21203],{"class":242,"line":727},[240,21202,20466],{"class":436},[240,21204,3929],{"class":257},[240,21206,21207],{"class":242,"line":1730},[240,21208,3983],{"class":257},[240,21210,21211,21213,21215,21218,21220],{"class":242,"line":3582},[240,21212,11620],{"class":257},[240,21214,3137],{"class":288},[240,21216,21217],{"class":443}," \"Person的默认构造函数调用\"",[240,21219,3403],{"class":288},[240,21221,10791],{"class":257},[240,21223,21224],{"class":242,"line":3596},[240,21225,4140],{"class":257},[240,21227,21228],{"class":242,"line":3601},[240,21229,21230],{"class":246},"    \u002F\u002F有参构造\n",[240,21232,21233,21235,21237,21239,21241],{"class":242,"line":3607},[240,21234,20466],{"class":436},[240,21236,789],{"class":257},[240,21238,2126],{"class":288},[240,21240,17637],{"class":792},[240,21242,2129],{"class":257},[240,21244,21245],{"class":242,"line":3628},[240,21246,3983],{"class":257},[240,21248,21249,21251,21253],{"class":242,"line":3633},[240,21250,17691],{"class":257},[240,21252,440],{"class":288},[240,21254,9748],{"class":257},[240,21256,21257,21259,21261,21264,21266],{"class":242,"line":3647},[240,21258,11620],{"class":257},[240,21260,3137],{"class":288},[240,21262,21263],{"class":443}," \"Person的有参构造函数调用\"",[240,21265,3403],{"class":288},[240,21267,10791],{"class":257},[240,21269,21270],{"class":242,"line":3652},[240,21271,4140],{"class":257},[240,21273,21274],{"class":242,"line":3681},[240,21275,20821],{"class":246},[240,21277,21278,21280,21282,21284,21286,21288,21290],{"class":242,"line":3686},[240,21279,20466],{"class":436},[240,21281,789],{"class":257},[240,21283,8743],{"class":288},[240,21285,17518],{"class":436},[240,21287,12535],{"class":288},[240,21289,19],{"class":792},[240,21291,2129],{"class":257},[240,21293,21294],{"class":242,"line":3703},[240,21295,3983],{"class":257},[240,21297,21298,21300,21302],{"class":242,"line":3708},[240,21299,17691],{"class":257},[240,21301,440],{"class":288},[240,21303,21304],{"class":257}," p.m_Age;\n",[240,21306,21307,21309,21311,21314,21316],{"class":242,"line":3713},[240,21308,11620],{"class":257},[240,21310,3137],{"class":288},[240,21312,21313],{"class":443}," \"Person的拷贝构造函数调用\"",[240,21315,3403],{"class":288},[240,21317,10791],{"class":257},[240,21319,21320],{"class":242,"line":3718},[240,21321,4140],{"class":257},[240,21323,21324,21326],{"class":242,"line":3732},[240,21325,20499],{"class":436},[240,21327,3929],{"class":257},[240,21329,21330],{"class":242,"line":3737},[240,21331,3983],{"class":257},[240,21333,21334,21336,21338,21340,21342],{"class":242,"line":4530},[240,21335,11620],{"class":257},[240,21337,3137],{"class":288},[240,21339,20514],{"class":443},[240,21341,3403],{"class":288},[240,21343,10791],{"class":257},[240,21345,21346],{"class":242,"line":4544},[240,21347,4140],{"class":257},[240,21349,21350,21352],{"class":242,"line":4552},[240,21351,3938],{"class":288},[240,21353,17614],{"class":257},[240,21355,21356],{"class":242,"line":4557},[240,21357,5947],{"class":257},[240,21359,21360],{"class":242,"line":4563},[240,21361,21174],{"class":246},[240,21363,21364,21366,21368],{"class":242,"line":4569},[240,21365,7315],{"class":288},[240,21367,7539],{"class":436},[240,21369,3929],{"class":257},[240,21371,21372],{"class":242,"line":4574},[240,21373,3504],{"class":257},[240,21375,21376,21379,21381,21383,21385],{"class":242,"line":9899},[240,21377,21378],{"class":257},"    Person ",[240,21380,9081],{"class":436},[240,21382,789],{"class":257},[240,21384,1000],{"class":264},[240,21386,796],{"class":257},[240,21388,21389,21391,21393],{"class":242,"line":9923},[240,21390,21378],{"class":257},[240,21392,8984],{"class":436},[240,21394,19462],{"class":257},[240,21396,21397,21399,21401,21404,21406,21409,21411],{"class":242,"line":9928},[240,21398,3509],{"class":257},[240,21400,3137],{"class":288},[240,21402,21403],{"class":443},"\"P2的年龄为：\"",[240,21405,3137],{"class":288},[240,21407,21408],{"class":257},"p2.m_Age",[240,21410,3137],{"class":288},[240,21412,3159],{"class":257},[240,21414,21415],{"class":242,"line":9934},[240,21416,312],{"class":257},[240,21418,21419],{"class":242,"line":9961},[240,21420,21421],{"class":246},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[240,21423,21424],{"class":242,"line":9966},[240,21425,21426],{"class":246},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[240,21428,21429,21431,21434,21436,21438,21440],{"class":242,"line":9972},[240,21430,7315],{"class":288},[240,21432,21433],{"class":436}," doWork",[240,21435,789],{"class":257},[240,21437,20993],{"class":436},[240,21439,8776],{"class":792},[240,21441,2129],{"class":257},[240,21443,21444],{"class":242,"line":9984},[240,21445,3504],{"class":257},[240,21447,21448,21450,21452,21455,21457],{"class":242,"line":9996},[240,21449,8480],{"class":257},[240,21451,3137],{"class":288},[240,21453,21454],{"class":443}," \"doWork函数调用\"",[240,21456,3403],{"class":288},[240,21458,10791],{"class":257},[240,21460,21461],{"class":242,"line":10008},[240,21462,312],{"class":257},[240,21464,21465,21467,21469],{"class":242,"line":11667},[240,21466,7315],{"class":288},[240,21468,7608],{"class":436},[240,21470,3929],{"class":257},[240,21472,21473],{"class":242,"line":11692},[240,21474,3504],{"class":257},[240,21476,21477],{"class":242,"line":11715},[240,21478,17262],{"class":257},[240,21480,21481,21484],{"class":242,"line":11739},[240,21482,21483],{"class":436},"    doWork",[240,21485,21486],{"class":257},"(p);\n",[240,21488,21489],{"class":242,"line":11744},[240,21490,312],{"class":257},[240,21492,21493],{"class":242,"line":11749},[240,21494,21495],{"class":246},"\u002F\u002F 3.以值方式返回局部对象\n",[240,21497,21498,21500,21503],{"class":242,"line":11754},[240,21499,20993],{"class":436},[240,21501,21502],{"class":436}," doWork2",[240,21504,3929],{"class":257},[240,21506,21507],{"class":242,"line":11763},[240,21508,3504],{"class":257},[240,21510,21511],{"class":242,"line":11768},[240,21512,20983],{"class":257},[240,21514,21515,21517,21519,21521,21523,21525,21527,21529,21531,21533,21535],{"class":242,"line":11774},[240,21516,3509],{"class":257},[240,21518,3137],{"class":288},[240,21520,789],{"class":257},[240,21522,2126],{"class":288},[240,21524,8469],{"class":288},[240,21526,2529],{"class":257},[240,21528,2454],{"class":288},[240,21530,9081],{"class":257},[240,21532,3137],{"class":288},[240,21534,3202],{"class":257},[240,21536,21537],{"class":246},"\u002F\u002F打印p1的地址\n",[240,21539,21540,21542,21545],{"class":242,"line":11795},[240,21541,6042],{"class":288},[240,21543,21544],{"class":257}," p1;",[240,21546,21547],{"class":246},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[240,21549,21550],{"class":242,"line":11801},[240,21551,312],{"class":257},[240,21553,21554,21556,21558],{"class":242,"line":11815},[240,21555,7315],{"class":288},[240,21557,7680],{"class":436},[240,21559,3929],{"class":257},[240,21561,21562],{"class":242,"line":11821},[240,21563,3504],{"class":257},[240,21565,21566,21569,21571,21573],{"class":242,"line":11848},[240,21567,21568],{"class":257},"    Person p ",[240,21570,440],{"class":288},[240,21572,21502],{"class":436},[240,21574,7587],{"class":257},[240,21576,21577,21579,21581,21583,21585,21587,21589,21591,21593,21595,21597],{"class":242,"line":11857},[240,21578,3509],{"class":257},[240,21580,3137],{"class":288},[240,21582,789],{"class":257},[240,21584,2126],{"class":288},[240,21586,8469],{"class":288},[240,21588,2529],{"class":257},[240,21590,2454],{"class":288},[240,21592,19],{"class":257},[240,21594,3137],{"class":288},[240,21596,3202],{"class":257},[240,21598,21599],{"class":246},"\u002F\u002F打印p的地址\n",[240,21601,21602],{"class":242,"line":11863},[240,21603,312],{"class":257},[240,21605,21606],{"class":242,"line":11871},[240,21607,4353],{"emptyLinePlaceholder":2051},[240,21609,21610],{"class":242,"line":11876},[240,21611,4353],{"emptyLinePlaceholder":2051},[240,21613,21614,21616,21618],{"class":242,"line":18552},[240,21615,2126],{"class":288},[240,21617,3926],{"class":436},[240,21619,3929],{"class":257},[240,21621,21622],{"class":242,"line":18558},[240,21623,3504],{"class":257},[240,21625,21626],{"class":242,"line":18581},[240,21627,21628],{"class":246},"    \u002F\u002F test01();\n",[240,21630,21631],{"class":242,"line":18587},[240,21632,21633],{"class":246},"    \u002F\u002F test02();\n",[240,21635,21636,21639],{"class":242,"line":18610},[240,21637,21638],{"class":436},"    test03",[240,21640,7587],{"class":257},[240,21642,21643],{"class":242,"line":18624},[240,21644,21645],{"class":246},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[240,21647,21648],{"class":242,"line":18644},[240,21649,21650],{"class":246},"\u002F\u002F 输出结果如下：\n",[240,21652,21653],{"class":242,"line":18650},[240,21654,21655],{"class":246},"\u002F\u002F Person的默认构造函数调用\n",[240,21657,21658],{"class":242,"line":18661},[240,21659,21660],{"class":246},"\u002F\u002F 0x7fffffffceec\n",[240,21662,21663],{"class":242,"line":18684},[240,21664,21660],{"class":246},[240,21666,21667],{"class":242,"line":18706},[240,21668,21669],{"class":246},"\u002F\u002F Person的析构函数调用\n",[240,21671,21672],{"class":242,"line":18711},[240,21673,4353],{"emptyLinePlaceholder":2051},[240,21675,21676],{"class":242,"line":18717},[240,21677,21678],{"class":246},"\u002F\u002F 之前的输出结果如下：\n",[240,21680,21681],{"class":242,"line":18731},[240,21682,21655],{"class":246},[240,21684,21685],{"class":242,"line":18744},[240,21686,21687],{"class":246},"\u002F\u002F 地址\n",[240,21689,21690],{"class":242,"line":18749},[240,21691,21692],{"class":246},"\u002F\u002F Person的拷贝构造函数调用\n",[240,21694,21695],{"class":242,"line":18763},[240,21696,21669],{"class":246},[240,21698,21699],{"class":242,"line":18768},[240,21700,21687],{"class":246},[240,21702,21703],{"class":242,"line":18774},[240,21704,21705],{"class":246},"\u002F\u002F (这两次输出的地址也是不同的) \n",[240,21707,21708],{"class":242,"line":18779},[240,21709,21710],{"class":246},"\u002F\u002F Person的析构函数调用     \n",[240,21712,21713,21715,21717],{"class":242,"line":18793},[240,21714,6042],{"class":288},[240,21716,6045],{"class":264},[240,21718,274],{"class":257},[240,21720,21721],{"class":242,"line":18798},[240,21722,312],{"class":257},[19,21724,21725],{},"简化版理解",[231,21727,21729],{"className":2112,"code":21728,"language":2114,"meta":236,"style":236},"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",[23,21730,21731,21739,21743,21749,21762,21773,21777,21789,21802,21810,21814,21830,21843,21852,21856,21861,21867,21880,21884,21888,21895,21899,21903,21908,21916,21920,21936,21949,21962,21966,21971,21979,21983,21987,21992,21997,22013,22021,22028,22034,22038,22042,22047,22055,22059,22063,22086,22093,22097,22101,22109,22113,22123,22145,22149,22153,22157,22165,22169,22174,22179,22185,22189,22199,22203,22211],{"__ignoreMap":236},[240,21732,21733,21735,21737],{"class":242,"line":243},[240,21734,16643],{"class":288},[240,21736,17518],{"class":436},[240,21738,258],{"class":257},[240,21740,21741],{"class":242,"line":250},[240,21742,16665],{"class":288},[240,21744,21745,21747],{"class":242,"line":261},[240,21746,20466],{"class":436},[240,21748,12804],{"class":257},[240,21750,21751,21753,21755,21758,21760],{"class":242,"line":277},[240,21752,11620],{"class":257},[240,21754,3137],{"class":288},[240,21756,21757],{"class":443}," \"无参构造函数!\"",[240,21759,3403],{"class":288},[240,21761,10791],{"class":257},[240,21763,21764,21767,21769,21771],{"class":242,"line":294},[240,21765,21766],{"class":257},"        mAge ",[240,21768,440],{"class":288},[240,21770,6045],{"class":264},[240,21772,274],{"class":257},[240,21774,21775],{"class":242,"line":309},[240,21776,4140],{"class":257},[240,21778,21779,21781,21783,21785,21787],{"class":242,"line":529},[240,21780,20466],{"class":436},[240,21782,789],{"class":257},[240,21784,2126],{"class":288},[240,21786,17637],{"class":792},[240,21788,14392],{"class":257},[240,21790,21791,21793,21795,21798,21800],{"class":242,"line":549},[240,21792,11620],{"class":257},[240,21794,3137],{"class":288},[240,21796,21797],{"class":443}," \"有参构造函数!\"",[240,21799,3403],{"class":288},[240,21801,10791],{"class":257},[240,21803,21804,21806,21808],{"class":242,"line":569},[240,21805,21766],{"class":257},[240,21807,440],{"class":288},[240,21809,9748],{"class":257},[240,21811,21812],{"class":242,"line":589},[240,21813,4140],{"class":257},[240,21815,21816,21818,21820,21822,21824,21826,21828],{"class":242,"line":715},[240,21817,20466],{"class":436},[240,21819,789],{"class":257},[240,21821,8743],{"class":288},[240,21823,17518],{"class":436},[240,21825,2454],{"class":288},[240,21827,8776],{"class":792},[240,21829,14392],{"class":257},[240,21831,21832,21834,21836,21839,21841],{"class":242,"line":727},[240,21833,11620],{"class":257},[240,21835,3137],{"class":288},[240,21837,21838],{"class":443}," \"拷贝构造函数!\"",[240,21840,3403],{"class":288},[240,21842,10791],{"class":257},[240,21844,21845,21847,21849],{"class":242,"line":1730},[240,21846,21766],{"class":257},[240,21848,440],{"class":288},[240,21850,21851],{"class":257}," p.mAge;\n",[240,21853,21854],{"class":242,"line":3582},[240,21855,4140],{"class":257},[240,21857,21858],{"class":242,"line":3596},[240,21859,21860],{"class":246},"    \u002F\u002F析构函数在释放内存之前调用\n",[240,21862,21863,21865],{"class":242,"line":3601},[240,21864,20499],{"class":436},[240,21866,12804],{"class":257},[240,21868,21869,21871,21873,21876,21878],{"class":242,"line":3607},[240,21870,11620],{"class":257},[240,21872,3137],{"class":288},[240,21874,21875],{"class":443}," \"析构函数!\"",[240,21877,3403],{"class":288},[240,21879,10791],{"class":257},[240,21881,21882],{"class":242,"line":3628},[240,21883,4140],{"class":257},[240,21885,21886],{"class":242,"line":3633},[240,21887,16665],{"class":288},[240,21889,21890,21892],{"class":242,"line":3647},[240,21891,3938],{"class":288},[240,21893,21894],{"class":257}," mAge;\n",[240,21896,21897],{"class":242,"line":3652},[240,21898,5947],{"class":257},[240,21900,21901],{"class":242,"line":3681},[240,21902,4353],{"emptyLinePlaceholder":2051},[240,21904,21905],{"class":242,"line":3686},[240,21906,21907],{"class":246},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[240,21909,21910,21912,21914],{"class":242,"line":3703},[240,21911,7315],{"class":288},[240,21913,7539],{"class":436},[240,21915,12804],{"class":257},[240,21917,21918],{"class":242,"line":3708},[240,21919,4353],{"emptyLinePlaceholder":2051},[240,21921,21922,21924,21927,21929,21931,21933],{"class":242,"line":3713},[240,21923,21378],{"class":257},[240,21925,21926],{"class":436},"man",[240,21928,789],{"class":257},[240,21930,285],{"class":264},[240,21932,7917],{"class":257},[240,21934,21935],{"class":246}," \u002F\u002Fp对象已经创建完毕\n",[240,21937,21938,21940,21943,21946],{"class":242,"line":3718},[240,21939,21378],{"class":257},[240,21941,21942],{"class":436},"newman",[240,21944,21945],{"class":257},"(man);",[240,21947,21948],{"class":246}," \u002F\u002F调用拷贝构造函数\n",[240,21950,21951,21954,21956,21959],{"class":242,"line":3732},[240,21952,21953],{"class":257},"    Person newman2 ",[240,21955,440],{"class":288},[240,21957,21958],{"class":257}," man;",[240,21960,21961],{"class":246}," \u002F\u002F拷贝构造\n",[240,21963,21964],{"class":242,"line":3737},[240,21965,4353],{"emptyLinePlaceholder":2051},[240,21967,21968],{"class":242,"line":4530},[240,21969,21970],{"class":246},"    \u002F\u002FPerson newman3;\n",[240,21972,21973,21976],{"class":242,"line":4544},[240,21974,21975],{"class":246},"    \u002F\u002Fnewman3 = man;",[240,21977,21978],{"class":246}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[240,21980,21981],{"class":242,"line":4552},[240,21982,312],{"class":257},[240,21984,21985],{"class":242,"line":4557},[240,21986,4353],{"emptyLinePlaceholder":2051},[240,21988,21989],{"class":242,"line":4563},[240,21990,21991],{"class":246},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[240,21993,21994],{"class":242,"line":4569},[240,21995,21996],{"class":246},"\u002F\u002F相当于Person p1 = p;\n",[240,21998,21999,22001,22003,22005,22007,22010],{"class":242,"line":4574},[240,22000,7315],{"class":288},[240,22002,21433],{"class":436},[240,22004,789],{"class":257},[240,22006,20993],{"class":436},[240,22008,22009],{"class":792}," p1",[240,22011,22012],{"class":257},") {}\n",[240,22014,22015,22017,22019],{"class":242,"line":9899},[240,22016,7315],{"class":288},[240,22018,7608],{"class":436},[240,22020,12804],{"class":257},[240,22022,22023,22025],{"class":242,"line":9923},[240,22024,20551],{"class":257},[240,22026,22027],{"class":246}," \u002F\u002F无参构造函数\n",[240,22029,22030,22032],{"class":242,"line":9928},[240,22031,21483],{"class":436},[240,22033,21486],{"class":257},[240,22035,22036],{"class":242,"line":9934},[240,22037,312],{"class":257},[240,22039,22040],{"class":242,"line":9961},[240,22041,4353],{"emptyLinePlaceholder":2051},[240,22043,22044],{"class":242,"line":9966},[240,22045,22046],{"class":246},"\u002F\u002F3. 以值方式返回局部对象\n",[240,22048,22049,22051,22053],{"class":242,"line":9972},[240,22050,20993],{"class":436},[240,22052,21502],{"class":436},[240,22054,3929],{"class":257},[240,22056,22057],{"class":242,"line":9984},[240,22058,3504],{"class":257},[240,22060,22061],{"class":242,"line":9996},[240,22062,20983],{"class":257},[240,22064,22065,22067,22069,22071,22073,22075,22077,22079,22082,22084],{"class":242,"line":10008},[240,22066,8480],{"class":257},[240,22068,3137],{"class":288},[240,22070,3612],{"class":257},[240,22072,2126],{"class":288},[240,22074,8469],{"class":288},[240,22076,2529],{"class":257},[240,22078,2454],{"class":288},[240,22080,22081],{"class":257},"p1 ",[240,22083,3137],{"class":288},[240,22085,10791],{"class":257},[240,22087,22088,22090],{"class":242,"line":11667},[240,22089,6042],{"class":288},[240,22091,22092],{"class":257}," p1;\n",[240,22094,22095],{"class":242,"line":11692},[240,22096,312],{"class":257},[240,22098,22099],{"class":242,"line":11715},[240,22100,4353],{"emptyLinePlaceholder":2051},[240,22102,22103,22105,22107],{"class":242,"line":11739},[240,22104,7315],{"class":288},[240,22106,7680],{"class":436},[240,22108,3929],{"class":257},[240,22110,22111],{"class":242,"line":11744},[240,22112,3504],{"class":257},[240,22114,22115,22117,22119,22121],{"class":242,"line":11749},[240,22116,21568],{"class":257},[240,22118,440],{"class":288},[240,22120,21502],{"class":436},[240,22122,7587],{"class":257},[240,22124,22125,22127,22129,22131,22133,22135,22137,22139,22141,22143],{"class":242,"line":11754},[240,22126,8480],{"class":257},[240,22128,3137],{"class":288},[240,22130,3612],{"class":257},[240,22132,2126],{"class":288},[240,22134,8469],{"class":288},[240,22136,2529],{"class":257},[240,22138,2454],{"class":288},[240,22140,13399],{"class":257},[240,22142,3137],{"class":288},[240,22144,10791],{"class":257},[240,22146,22147],{"class":242,"line":11763},[240,22148,312],{"class":257},[240,22150,22151],{"class":242,"line":11768},[240,22152,4353],{"emptyLinePlaceholder":2051},[240,22154,22155],{"class":242,"line":11774},[240,22156,4353],{"emptyLinePlaceholder":2051},[240,22158,22159,22161,22163],{"class":242,"line":11795},[240,22160,2126],{"class":288},[240,22162,3926],{"class":436},[240,22164,12804],{"class":257},[240,22166,22167],{"class":242,"line":11801},[240,22168,4353],{"emptyLinePlaceholder":2051},[240,22170,22171],{"class":242,"line":11815},[240,22172,22173],{"class":246},"    \u002F\u002Ftest01();\n",[240,22175,22176],{"class":242,"line":11821},[240,22177,22178],{"class":246},"    \u002F\u002Ftest02();\n",[240,22180,22181,22183],{"class":242,"line":11848},[240,22182,21638],{"class":436},[240,22184,7587],{"class":257},[240,22186,22187],{"class":242,"line":11857},[240,22188,4353],{"emptyLinePlaceholder":2051},[240,22190,22191,22193,22195,22197],{"class":242,"line":11863},[240,22192,4256],{"class":436},[240,22194,789],{"class":257},[240,22196,4261],{"class":443},[240,22198,796],{"class":257},[240,22200,22201],{"class":242,"line":11871},[240,22202,4353],{"emptyLinePlaceholder":2051},[240,22204,22205,22207,22209],{"class":242,"line":11876},[240,22206,6042],{"class":288},[240,22208,6045],{"class":264},[240,22210,274],{"class":257},[240,22212,22213],{"class":242,"line":18552},[240,22214,312],{"class":257},[32,22216,22218],{"id":22217},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[19,22220,22221],{},"默认情况下，c++编译器至少给一个类添加3个函数",[19,22223,22224],{},"1．默认构造函数(无参，函数体为空)",[19,22226,22227],{},"2．默认析构函数(无参，函数体为空)",[19,22229,22230],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[19,22232,22233],{},"构造函数调用规则如下：",[3100,22235,22236,22239],{},[1829,22237,22238],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[1829,22240,22241],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[231,22243,22245],{"className":2112,"code":22244,"language":2114,"meta":236,"style":236},"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",[23,22246,22247,22255,22259,22264,22270,22282,22286,22291,22303,22312,22324,22328,22332,22348,22357,22369,22373,22377,22383,22395,22399,22403,22409,22413,22417,22425,22429,22441,22446,22454,22458,22476,22480,22484,22492,22496,22501,22509,22524,22537,22541,22546,22553,22569,22582,22586,22590,22598,22602,22608,22612,22622,22626,22634],{"__ignoreMap":236},[240,22248,22249,22251,22253],{"class":242,"line":243},[240,22250,16643],{"class":288},[240,22252,17518],{"class":436},[240,22254,258],{"class":257},[240,22256,22257],{"class":242,"line":250},[240,22258,16665],{"class":288},[240,22260,22261],{"class":242,"line":261},[240,22262,22263],{"class":246},"    \u002F\u002F无参（默认）构造函数\n",[240,22265,22266,22268],{"class":242,"line":277},[240,22267,20466],{"class":436},[240,22269,12804],{"class":257},[240,22271,22272,22274,22276,22278,22280],{"class":242,"line":294},[240,22273,11620],{"class":257},[240,22275,3137],{"class":288},[240,22277,21757],{"class":443},[240,22279,3403],{"class":288},[240,22281,10791],{"class":257},[240,22283,22284],{"class":242,"line":309},[240,22285,4140],{"class":257},[240,22287,22288],{"class":242,"line":529},[240,22289,22290],{"class":246},"    \u002F\u002F有参构造函数\n",[240,22292,22293,22295,22297,22299,22301],{"class":242,"line":549},[240,22294,20466],{"class":436},[240,22296,789],{"class":257},[240,22298,2126],{"class":288},[240,22300,609],{"class":792},[240,22302,14392],{"class":257},[240,22304,22305,22308,22310],{"class":242,"line":569},[240,22306,22307],{"class":257},"        age ",[240,22309,440],{"class":288},[240,22311,3391],{"class":257},[240,22313,22314,22316,22318,22320,22322],{"class":242,"line":589},[240,22315,11620],{"class":257},[240,22317,3137],{"class":288},[240,22319,21797],{"class":443},[240,22321,3403],{"class":288},[240,22323,10791],{"class":257},[240,22325,22326],{"class":242,"line":715},[240,22327,4140],{"class":257},[240,22329,22330],{"class":242,"line":727},[240,22331,20821],{"class":246},[240,22333,22334,22336,22338,22340,22342,22344,22346],{"class":242,"line":1730},[240,22335,20466],{"class":436},[240,22337,789],{"class":257},[240,22339,8743],{"class":288},[240,22341,17518],{"class":436},[240,22343,2454],{"class":288},[240,22345,8776],{"class":792},[240,22347,14392],{"class":257},[240,22349,22350,22352,22354],{"class":242,"line":3582},[240,22351,22307],{"class":257},[240,22353,440],{"class":288},[240,22355,22356],{"class":257}," p.age;\n",[240,22358,22359,22361,22363,22365,22367],{"class":242,"line":3596},[240,22360,11620],{"class":257},[240,22362,3137],{"class":288},[240,22364,21838],{"class":443},[240,22366,3403],{"class":288},[240,22368,10791],{"class":257},[240,22370,22371],{"class":242,"line":3601},[240,22372,4140],{"class":257},[240,22374,22375],{"class":242,"line":3607},[240,22376,20494],{"class":246},[240,22378,22379,22381],{"class":242,"line":3628},[240,22380,20499],{"class":436},[240,22382,12804],{"class":257},[240,22384,22385,22387,22389,22391,22393],{"class":242,"line":3633},[240,22386,11620],{"class":257},[240,22388,3137],{"class":288},[240,22390,21875],{"class":443},[240,22392,3403],{"class":288},[240,22394,10791],{"class":257},[240,22396,22397],{"class":242,"line":3647},[240,22398,4140],{"class":257},[240,22400,22401],{"class":242,"line":3652},[240,22402,16665],{"class":288},[240,22404,22405,22407],{"class":242,"line":3681},[240,22406,3938],{"class":288},[240,22408,9748],{"class":257},[240,22410,22411],{"class":242,"line":3686},[240,22412,5947],{"class":257},[240,22414,22415],{"class":242,"line":3703},[240,22416,4353],{"emptyLinePlaceholder":2051},[240,22418,22419,22421,22423],{"class":242,"line":3708},[240,22420,7315],{"class":288},[240,22422,7539],{"class":436},[240,22424,3929],{"class":257},[240,22426,22427],{"class":242,"line":3713},[240,22428,3504],{"class":257},[240,22430,22431,22433,22435,22437,22439],{"class":242,"line":3718},[240,22432,21378],{"class":257},[240,22434,9081],{"class":436},[240,22436,789],{"class":257},[240,22438,2748],{"class":264},[240,22440,796],{"class":257},[240,22442,22443],{"class":242,"line":3732},[240,22444,22445],{"class":246},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[240,22447,22448,22450,22452],{"class":242,"line":3737},[240,22449,21378],{"class":257},[240,22451,8984],{"class":436},[240,22453,19462],{"class":257},[240,22455,22456],{"class":242,"line":4530},[240,22457,4353],{"emptyLinePlaceholder":2051},[240,22459,22460,22462,22464,22467,22469,22472,22474],{"class":242,"line":4544},[240,22461,8480],{"class":257},[240,22463,3137],{"class":288},[240,22465,22466],{"class":443}," \"p2的年龄为： \"",[240,22468,3403],{"class":288},[240,22470,22471],{"class":257}," p2.age ",[240,22473,3137],{"class":288},[240,22475,10791],{"class":257},[240,22477,22478],{"class":242,"line":4552},[240,22479,312],{"class":257},[240,22481,22482],{"class":242,"line":4557},[240,22483,4353],{"emptyLinePlaceholder":2051},[240,22485,22486,22488,22490],{"class":242,"line":4563},[240,22487,7315],{"class":288},[240,22489,7608],{"class":436},[240,22491,3929],{"class":257},[240,22493,22494],{"class":242,"line":4569},[240,22495,3504],{"class":257},[240,22497,22498],{"class":242,"line":4574},[240,22499,22500],{"class":246},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[240,22502,22503,22506],{"class":242,"line":9899},[240,22504,22505],{"class":257},"    Person p1;",[240,22507,22508],{"class":246}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[240,22510,22511,22513,22515,22517,22519,22521],{"class":242,"line":9923},[240,22512,21378],{"class":257},[240,22514,8984],{"class":436},[240,22516,789],{"class":257},[240,22518,2546],{"class":264},[240,22520,7917],{"class":257},[240,22522,22523],{"class":246}," \u002F\u002F用户提供的有参\n",[240,22525,22526,22528,22531,22534],{"class":242,"line":9928},[240,22527,21378],{"class":257},[240,22529,22530],{"class":436},"p3",[240,22532,22533],{"class":257},"(p2);",[240,22535,22536],{"class":246}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[240,22538,22539],{"class":242,"line":9934},[240,22540,4353],{"emptyLinePlaceholder":2051},[240,22542,22543],{"class":242,"line":9961},[240,22544,22545],{"class":246},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[240,22547,22548,22551],{"class":242,"line":9966},[240,22549,22550],{"class":257},"    Person p4;",[240,22552,22508],{"class":246},[240,22554,22555,22557,22560,22562,22564,22566],{"class":242,"line":9972},[240,22556,21378],{"class":257},[240,22558,22559],{"class":436},"p5",[240,22561,789],{"class":257},[240,22563,2546],{"class":264},[240,22565,7917],{"class":257},[240,22567,22568],{"class":246}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[240,22570,22571,22573,22576,22579],{"class":242,"line":9984},[240,22572,21378],{"class":257},[240,22574,22575],{"class":436},"p6",[240,22577,22578],{"class":257},"(p5);",[240,22580,22581],{"class":246}," \u002F\u002F用户自己提供拷贝构造\n",[240,22583,22584],{"class":242,"line":9996},[240,22585,312],{"class":257},[240,22587,22588],{"class":242,"line":10008},[240,22589,4353],{"emptyLinePlaceholder":2051},[240,22591,22592,22594,22596],{"class":242,"line":11667},[240,22593,2126],{"class":288},[240,22595,3926],{"class":436},[240,22597,12804],{"class":257},[240,22599,22600],{"class":242,"line":11692},[240,22601,4353],{"emptyLinePlaceholder":2051},[240,22603,22604,22606],{"class":242,"line":11715},[240,22605,7584],{"class":436},[240,22607,7587],{"class":257},[240,22609,22610],{"class":242,"line":11739},[240,22611,4353],{"emptyLinePlaceholder":2051},[240,22613,22614,22616,22618,22620],{"class":242,"line":11744},[240,22615,4256],{"class":436},[240,22617,789],{"class":257},[240,22619,4261],{"class":443},[240,22621,796],{"class":257},[240,22623,22624],{"class":242,"line":11749},[240,22625,4353],{"emptyLinePlaceholder":2051},[240,22627,22628,22630,22632],{"class":242,"line":11754},[240,22629,6042],{"class":288},[240,22631,6045],{"class":264},[240,22633,274],{"class":257},[240,22635,22636],{"class":242,"line":11763},[240,22637,312],{"class":257},[32,22639,22641],{"id":22640},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[19,22643,22644],{},"浅拷贝：简单的赋值拷贝操作",[19,22646,22647],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[231,22649,22651],{"className":2112,"code":22650,"language":2114,"meta":236,"style":236},"#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",[23,22652,22653,22659,22669,22675,22679,22683,22688,22694,22698,22711,22715,22719,22726,22730,22740,22755,22768,22772,22777,22782,22798,22802,22815,22820,22825,22830,22839,22844,22859,22863,22867,22871,22877,22881,22886,22901,22905,22916,22930,22934,22943,22947,22953,22965,22969,22977,22981,22998,23029,23037,23065,23069,23073,23081,23085,23091],{"__ignoreMap":236},[240,22654,22655,22657],{"class":242,"line":243},[240,22656,3903],{"class":288},[240,22658,3906],{"class":443},[240,22660,22661,22663,22665,22667],{"class":242,"line":250},[240,22662,3911],{"class":288},[240,22664,3914],{"class":288},[240,22666,3917],{"class":436},[240,22668,274],{"class":257},[240,22670,22671,22673],{"class":242,"line":261},[240,22672,16643],{"class":288},[240,22674,17120],{"class":436},[240,22676,22677],{"class":242,"line":277},[240,22678,3504],{"class":257},[240,22680,22681],{"class":242,"line":294},[240,22682,16665],{"class":288},[240,22684,22685],{"class":242,"line":309},[240,22686,22687],{"class":246},"    \u002F\u002F默认构造函数\n",[240,22689,22690,22692],{"class":242,"line":529},[240,22691,20466],{"class":436},[240,22693,3929],{"class":257},[240,22695,22696],{"class":242,"line":549},[240,22697,3983],{"class":257},[240,22699,22700,22702,22704,22707,22709],{"class":242,"line":569},[240,22701,5403],{"class":257},[240,22703,3137],{"class":288},[240,22705,22706],{"class":443},"\"默认构造函数\"",[240,22708,3137],{"class":288},[240,22710,3159],{"class":257},[240,22712,22713],{"class":242,"line":589},[240,22714,4140],{"class":257},[240,22716,22717],{"class":242,"line":715},[240,22718,22290],{"class":246},[240,22720,22721,22723],{"class":242,"line":727},[240,22722,20499],{"class":436},[240,22724,22725],{"class":257},"(int age,int height)\n",[240,22727,22728],{"class":242,"line":1730},[240,22729,3983],{"class":257},[240,22731,22732,22735,22737],{"class":242,"line":3582},[240,22733,22734],{"class":257},"        m_Age",[240,22736,440],{"class":288},[240,22738,22739],{"class":257},"age;\n",[240,22741,22742,22745,22747,22749,22752],{"class":242,"line":3596},[240,22743,22744],{"class":257},"        m_Height",[240,22746,13668],{"class":288},[240,22748,4335],{"class":288},[240,22750,22751],{"class":257},"(height);",[240,22753,22754],{"class":246},"\u002F\u002F放到堆区\n",[240,22756,22757,22759,22761,22764,22766],{"class":242,"line":3601},[240,22758,5403],{"class":257},[240,22760,3137],{"class":288},[240,22762,22763],{"class":443},"\"有参构造函数\"",[240,22765,3137],{"class":288},[240,22767,3159],{"class":257},[240,22769,22770],{"class":242,"line":3607},[240,22771,4140],{"class":257},[240,22773,22774],{"class":242,"line":3628},[240,22775,22776],{"class":246},"    \u002F\u002F深拷贝解决上述问题\n",[240,22778,22779],{"class":242,"line":3633},[240,22780,22781],{"class":246},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[240,22783,22784,22786,22788,22790,22792,22794,22796],{"class":242,"line":3647},[240,22785,20466],{"class":436},[240,22787,789],{"class":257},[240,22789,8743],{"class":288},[240,22791,17518],{"class":436},[240,22793,12535],{"class":288},[240,22795,19],{"class":792},[240,22797,2129],{"class":257},[240,22799,22800],{"class":242,"line":3652},[240,22801,3983],{"class":257},[240,22803,22804,22806,22808,22811,22813],{"class":242,"line":3681},[240,22805,5403],{"class":257},[240,22807,3137],{"class":288},[240,22809,22810],{"class":443},"\"拷贝构造函数\"",[240,22812,3137],{"class":288},[240,22814,3159],{"class":257},[240,22816,22817],{"class":242,"line":3686},[240,22818,22819],{"class":246},"        \u002F\u002F编译器默认的写如下注释部分\n",[240,22821,22822],{"class":242,"line":3703},[240,22823,22824],{"class":246},"        \u002F\u002Fm_Age=p.m_Age;\n",[240,22826,22827],{"class":242,"line":3708},[240,22828,22829],{"class":246},"        \u002F\u002Fm_Height=p.m_Height;\n",[240,22831,22832,22834,22836],{"class":242,"line":3713},[240,22833,22734],{"class":257},[240,22835,440],{"class":288},[240,22837,22838],{"class":257},"p.m_Age;\n",[240,22840,22841],{"class":242,"line":3718},[240,22842,22843],{"class":246},"        \u002F\u002F深拷贝操作\n",[240,22845,22846,22848,22850,22852,22854,22856],{"class":242,"line":3732},[240,22847,22744],{"class":257},[240,22849,13668],{"class":288},[240,22851,4335],{"class":288},[240,22853,789],{"class":257},[240,22855,2554],{"class":288},[240,22857,22858],{"class":257},"p.m_Height);\n",[240,22860,22861],{"class":242,"line":3737},[240,22862,4140],{"class":257},[240,22864,22865],{"class":242,"line":4530},[240,22866,4353],{"emptyLinePlaceholder":2051},[240,22868,22869],{"class":242,"line":4544},[240,22870,20494],{"class":246},[240,22872,22873,22875],{"class":242,"line":4552},[240,22874,20499],{"class":436},[240,22876,3929],{"class":257},[240,22878,22879],{"class":242,"line":4557},[240,22880,3983],{"class":257},[240,22882,22883],{"class":242,"line":4563},[240,22884,22885],{"class":246},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[240,22887,22888,22890,22893,22896,22899],{"class":242,"line":4569},[240,22889,4450],{"class":288},[240,22891,22892],{"class":257},"(m_Height ",[240,22894,22895],{"class":288},"!=",[240,22897,22898],{"class":264}," NULL",[240,22900,2129],{"class":257},[240,22902,22903],{"class":242,"line":4574},[240,22904,4463],{"class":257},[240,22906,22907,22910,22913],{"class":242,"line":9899},[240,22908,22909],{"class":288},"            delete",[240,22911,22912],{"class":257}," m_Height;",[240,22914,22915],{"class":246}," \u002F\u002F释放堆区内存\n",[240,22917,22918,22921,22923,22925,22927],{"class":242,"line":9923},[240,22919,22920],{"class":257},"            m_Height",[240,22922,440],{"class":288},[240,22924,4345],{"class":264},[240,22926,2175],{"class":257},[240,22928,22929],{"class":246}," \u002F\u002F防止野指针\n",[240,22931,22932],{"class":242,"line":9928},[240,22933,4482],{"class":257},[240,22935,22936,22938,22940],{"class":242,"line":9934},[240,22937,5403],{"class":257},[240,22939,3137],{"class":288},[240,22941,22942],{"class":443},"\"Person的析构函数调用\"\n",[240,22944,22945],{"class":242,"line":9961},[240,22946,4140],{"class":257},[240,22948,22949,22951],{"class":242,"line":9966},[240,22950,3938],{"class":288},[240,22952,17614],{"class":257},[240,22954,22955,22957,22959,22962],{"class":242,"line":9972},[240,22956,3938],{"class":288},[240,22958,8469],{"class":288},[240,22960,22961],{"class":257},"m_Height;",[240,22963,22964],{"class":246}," \u002F\u002F定义一个指针，指向身高\n",[240,22966,22967],{"class":242,"line":9984},[240,22968,5947],{"class":257},[240,22970,22971,22973,22975],{"class":242,"line":9996},[240,22972,7315],{"class":288},[240,22974,7539],{"class":436},[240,22976,3929],{"class":257},[240,22978,22979],{"class":242,"line":10008},[240,22980,3504],{"class":257},[240,22982,22983,22985,22987,22989,22991,22993,22996],{"class":242,"line":11667},[240,22984,21378],{"class":257},[240,22986,9081],{"class":436},[240,22988,789],{"class":257},[240,22990,2748],{"class":264},[240,22992,2479],{"class":257},[240,22994,22995],{"class":264},"160",[240,22997,796],{"class":257},[240,22999,23000,23002,23004,23007,23009,23012,23014,23017,23019,23022,23024,23026],{"class":242,"line":11692},[240,23001,3509],{"class":257},[240,23003,3137],{"class":288},[240,23005,23006],{"class":443},"\"p1的年龄为:\"",[240,23008,3137],{"class":288},[240,23010,23011],{"class":257},"p1.m_Age",[240,23013,3137],{"class":288},[240,23015,23016],{"class":443},"\"身高为：\"",[240,23018,8370],{"class":288},[240,23020,23021],{"class":257},"p1.m_Height",[240,23023,3137],{"class":288},[240,23025,3202],{"class":257},[240,23027,23028],{"class":246},"  \u002F\u002F18\n",[240,23030,23031,23033,23035],{"class":242,"line":11715},[240,23032,21378],{"class":257},[240,23034,8984],{"class":436},[240,23036,19462],{"class":257},[240,23038,23039,23041,23043,23046,23048,23050,23052,23054,23056,23059,23061,23063],{"class":242,"line":11739},[240,23040,3509],{"class":257},[240,23042,3137],{"class":288},[240,23044,23045],{"class":443},"\"p2的年龄为：\"",[240,23047,3137],{"class":288},[240,23049,21408],{"class":257},[240,23051,3137],{"class":288},[240,23053,23016],{"class":443},[240,23055,8370],{"class":288},[240,23057,23058],{"class":257},"p2.m_Height",[240,23060,3137],{"class":288},[240,23062,3202],{"class":257},[240,23064,23028],{"class":246},[240,23066,23067],{"class":242,"line":11744},[240,23068,15160],{"class":257},[240,23070,23071],{"class":242,"line":11749},[240,23072,312],{"class":257},[240,23074,23075,23077,23079],{"class":242,"line":11754},[240,23076,2126],{"class":288},[240,23078,3926],{"class":436},[240,23080,3929],{"class":257},[240,23082,23083],{"class":242,"line":11763},[240,23084,3504],{"class":257},[240,23086,23087,23089],{"class":242,"line":11768},[240,23088,7584],{"class":436},[240,23090,7587],{"class":257},[240,23092,23093],{"class":242,"line":11774},[240,23094,312],{"class":257},[19,23096,23097],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[19,23099,23100],{},"浅拷贝带来的问题是堆区的内存重复释放",[19,23102,23103],{},[219,23104],{"alt":236,"src":23105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[19,23107,23108],{},"浅拷贝问题要使用深拷贝来解决",[19,23110,23111],{},[219,23112],{"alt":236,"src":23113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[19,23115,23116],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[32,23118,23120],{"id":23119},"_826初始化列表","8.2.6初始化列表",[19,23122,23123],{},"作用：初始化属性",[19,23125,7133],{},[231,23127,23130],{"className":23128,"code":23129,"language":7139},[7137],"构造函数():属性1(值1),属性2(值2).....{}\n",[23,23131,23129],{"__ignoreMap":236},[19,23133,23134],{},"例子",[231,23136,23138],{"className":2112,"code":23137,"language":2114,"meta":236,"style":236},"#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",[23,23139,23140,23146,23156,23162,23166,23171,23175,23180,23185,23190,23195,23200,23205,23209,23214,23219,23262,23271,23289,23307,23325,23329,23333,23340,23347,23354,23358,23362,23370,23374,23378,23398,23407,23411,23415,23425,23429,23437],{"__ignoreMap":236},[240,23141,23142,23144],{"class":242,"line":243},[240,23143,3903],{"class":288},[240,23145,3906],{"class":443},[240,23147,23148,23150,23152,23154],{"class":242,"line":250},[240,23149,3911],{"class":288},[240,23151,3914],{"class":288},[240,23153,3917],{"class":436},[240,23155,274],{"class":257},[240,23157,23158,23160],{"class":242,"line":261},[240,23159,16643],{"class":288},[240,23161,17120],{"class":436},[240,23163,23164],{"class":242,"line":277},[240,23165,3504],{"class":257},[240,23167,23168],{"class":242,"line":294},[240,23169,23170],{"class":288},"    public:\n",[240,23172,23173],{"class":242,"line":309},[240,23174,4353],{"emptyLinePlaceholder":2051},[240,23176,23177],{"class":242,"line":529},[240,23178,23179],{"class":246},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[240,23181,23182],{"class":242,"line":549},[240,23183,23184],{"class":246},"    \u002F\u002FPerson(int a, int b, int c) {\n",[240,23186,23187],{"class":242,"line":569},[240,23188,23189],{"class":246},"    \u002F\u002F  m_A = a;\n",[240,23191,23192],{"class":242,"line":589},[240,23193,23194],{"class":246},"    \u002F\u002F  m_B = b;\n",[240,23196,23197],{"class":242,"line":715},[240,23198,23199],{"class":246},"    \u002F\u002F  m_C = c;\n",[240,23201,23202],{"class":242,"line":727},[240,23203,23204],{"class":246},"    \u002F\u002F}\n",[240,23206,23207],{"class":242,"line":1730},[240,23208,4353],{"emptyLinePlaceholder":2051},[240,23210,23211],{"class":242,"line":3582},[240,23212,23213],{"class":246},"    \u002F\u002F初始化列表方式初始化\n",[240,23215,23216],{"class":242,"line":3596},[240,23217,23218],{"class":246},"    \u002F\u002F使用有参构造函数\n",[240,23220,23221,23223,23225,23227,23229,23231,23233,23235,23237,23239,23241,23244,23247,23250,23253,23256,23259],{"class":242,"line":3601},[240,23222,20466],{"class":436},[240,23224,789],{"class":257},[240,23226,2126],{"class":288},[240,23228,609],{"class":792},[240,23230,1277],{"class":257},[240,23232,2126],{"class":288},[240,23234,4785],{"class":792},[240,23236,1277],{"class":257},[240,23238,2126],{"class":288},[240,23240,4801],{"class":792},[240,23242,23243],{"class":257},") :",[240,23245,23246],{"class":436},"m_A",[240,23248,23249],{"class":257},"(a), ",[240,23251,23252],{"class":436},"m_B",[240,23254,23255],{"class":257},"(b), ",[240,23257,23258],{"class":436},"m_C",[240,23260,23261],{"class":257},"(c) {}\n",[240,23263,23264,23266,23269],{"class":242,"line":3607},[240,23265,16858],{"class":288},[240,23267,23268],{"class":436}," PrintPerson",[240,23270,12804],{"class":257},[240,23272,23273,23275,23277,23280,23282,23285,23287],{"class":242,"line":3628},[240,23274,11620],{"class":257},[240,23276,3137],{"class":288},[240,23278,23279],{"class":443}," \"mA:\"",[240,23281,3403],{"class":288},[240,23283,23284],{"class":257}," m_A ",[240,23286,3137],{"class":288},[240,23288,10791],{"class":257},[240,23290,23291,23293,23295,23298,23300,23303,23305],{"class":242,"line":3633},[240,23292,11620],{"class":257},[240,23294,3137],{"class":288},[240,23296,23297],{"class":443}," \"mB:\"",[240,23299,3403],{"class":288},[240,23301,23302],{"class":257}," m_B ",[240,23304,3137],{"class":288},[240,23306,10791],{"class":257},[240,23308,23309,23311,23313,23316,23318,23321,23323],{"class":242,"line":3647},[240,23310,11620],{"class":257},[240,23312,3137],{"class":288},[240,23314,23315],{"class":443}," \"mC:\"",[240,23317,3403],{"class":288},[240,23319,23320],{"class":257}," m_C ",[240,23322,3137],{"class":288},[240,23324,10791],{"class":257},[240,23326,23327],{"class":242,"line":3652},[240,23328,4140],{"class":257},[240,23330,23331],{"class":242,"line":3681},[240,23332,17171],{"class":288},[240,23334,23335,23337],{"class":242,"line":3686},[240,23336,3938],{"class":288},[240,23338,23339],{"class":257}," m_A;\n",[240,23341,23342,23344],{"class":242,"line":3703},[240,23343,3938],{"class":288},[240,23345,23346],{"class":257}," m_B;\n",[240,23348,23349,23351],{"class":242,"line":3708},[240,23350,3938],{"class":288},[240,23352,23353],{"class":257}," m_C;\n",[240,23355,23356],{"class":242,"line":3713},[240,23357,5947],{"class":257},[240,23359,23360],{"class":242,"line":3718},[240,23361,4353],{"emptyLinePlaceholder":2051},[240,23363,23364,23366,23368],{"class":242,"line":3732},[240,23365,2126],{"class":288},[240,23367,3926],{"class":436},[240,23369,7929],{"class":257},[240,23371,23372],{"class":242,"line":3737},[240,23373,3504],{"class":257},[240,23375,23376],{"class":242,"line":4530},[240,23377,4353],{"emptyLinePlaceholder":2051},[240,23379,23380,23382,23384,23386,23388,23390,23392,23394,23396],{"class":242,"line":4544},[240,23381,21378],{"class":257},[240,23383,19],{"class":436},[240,23385,789],{"class":257},[240,23387,1643],{"class":264},[240,23389,1277],{"class":257},[240,23391,1668],{"class":264},[240,23393,1277],{"class":257},[240,23395,1692],{"class":264},[240,23397,796],{"class":257},[240,23399,23400,23402,23405],{"class":242,"line":4552},[240,23401,17814],{"class":257},[240,23403,23404],{"class":436},"PrintPerson",[240,23406,7587],{"class":257},[240,23408,23409],{"class":242,"line":4557},[240,23410,4353],{"emptyLinePlaceholder":2051},[240,23412,23413],{"class":242,"line":4563},[240,23414,4353],{"emptyLinePlaceholder":2051},[240,23416,23417,23419,23421,23423],{"class":242,"line":4569},[240,23418,4256],{"class":436},[240,23420,789],{"class":257},[240,23422,4261],{"class":443},[240,23424,796],{"class":257},[240,23426,23427],{"class":242,"line":4574},[240,23428,4353],{"emptyLinePlaceholder":2051},[240,23430,23431,23433,23435],{"class":242,"line":9899},[240,23432,6042],{"class":288},[240,23434,6045],{"class":264},[240,23436,274],{"class":257},[240,23438,23439],{"class":242,"line":9923},[240,23440,312],{"class":257},[19,23442,23443,23444,23447,23448],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[68,23445,23446],{},"参数名就是定义的对象属性","，",[68,23449,23450],{},"属性后面的值为有参构造函数的形参",[231,23452,23454],{"className":2112,"code":23453,"language":2114,"meta":236,"style":236},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[23,23455,23456],{"__ignoreMap":236},[240,23457,23458,23460,23462,23464,23467,23469,23472,23474,23477,23479,23482,23484,23487,23489],{"class":242,"line":243},[240,23459,20993],{"class":436},[240,23461,789],{"class":257},[240,23463,2126],{"class":288},[240,23465,23466],{"class":257}," a.",[240,23468,2126],{"class":288},[240,23470,23471],{"class":257}," b,",[240,23473,2126],{"class":288},[240,23475,23476],{"class":257}," b):",[240,23478,23246],{"class":436},[240,23480,23481],{"class":257},"(a),",[240,23483,23252],{"class":436},[240,23485,23486],{"class":257},"(c),",[240,23488,23258],{"class":436},[240,23490,23491],{"class":257},"(b) {}\n",[32,23493,23495],{"id":23494},"_827类对象作为类成员","8.2.7类对象作为类成员",[19,23497,23498],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[19,23500,16582],{},[231,23502,23504],{"className":2112,"code":23503,"language":2114,"meta":236,"style":236},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[23,23505,23506,23511,23516,23520,23525,23529],{"__ignoreMap":236},[240,23507,23508],{"class":242,"line":243},[240,23509,23510],{"class":257},"A{};\n",[240,23512,23513],{"class":242,"line":250},[240,23514,23515],{"class":257},"B\n",[240,23517,23518],{"class":242,"line":261},[240,23519,3504],{"class":257},[240,23521,23522],{"class":242,"line":277},[240,23523,23524],{"class":257},"    A a;\n",[240,23526,23527],{"class":242,"line":294},[240,23528,312],{"class":257},[240,23530,23531],{"class":242,"line":309},[240,23532,23533],{"class":246},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[19,23535,23536],{},"案例",[231,23538,23540],{"className":2112,"code":23539,"language":2114,"meta":236,"style":236},"\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",[23,23541,23542,23547,23554,23558,23563,23568,23582,23586,23596,23607,23611,23618,23622,23635,23639,23644,23649,23653,23659,23663,23667,23671,23702,23706,23717,23721,23727,23731,23744,23748,23752,23756,23761,23766,23770,23778,23782,23799,23818,23822,23830,23834,23840],{"__ignoreMap":236},[240,23543,23544],{"class":242,"line":243},[240,23545,23546],{"class":246},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[240,23548,23549,23551],{"class":242,"line":250},[240,23550,16643],{"class":288},[240,23552,23553],{"class":436}," Phone\n",[240,23555,23556],{"class":242,"line":261},[240,23557,3504],{"class":257},[240,23559,23560],{"class":242,"line":277},[240,23561,23562],{"class":257},"public：\n",[240,23564,23565],{"class":242,"line":294},[240,23566,23567],{"class":246},"    \u002F\u002F 赋值(构造函数)\n",[240,23569,23570,23573,23575,23577,23580],{"class":242,"line":309},[240,23571,23572],{"class":436},"    Phone",[240,23574,789],{"class":257},[240,23576,16866],{"class":436},[240,23578,23579],{"class":792}," pName",[240,23581,2129],{"class":257},[240,23583,23584],{"class":242,"line":529},[240,23585,3983],{"class":257},[240,23587,23588,23591,23593],{"class":242,"line":549},[240,23589,23590],{"class":257},"        m_pName",[240,23592,440],{"class":288},[240,23594,23595],{"class":257},"pName;\n",[240,23597,23598,23600,23602,23605],{"class":242,"line":569},[240,23599,5403],{"class":257},[240,23601,3137],{"class":288},[240,23603,23604],{"class":443},"\"Phone的构造函数调用\"",[240,23606,274],{"class":257},[240,23608,23609],{"class":242,"line":589},[240,23610,4140],{"class":257},[240,23612,23613,23616],{"class":242,"line":715},[240,23614,23615],{"class":436},"    ~Phone",[240,23617,3929],{"class":257},[240,23619,23620],{"class":242,"line":727},[240,23621,3983],{"class":257},[240,23623,23624,23626,23628,23631,23633],{"class":242,"line":1730},[240,23625,5403],{"class":257},[240,23627,3137],{"class":288},[240,23629,23630],{"class":443},"\"Phone析构函数调用\"",[240,23632,3137],{"class":288},[240,23634,3159],{"class":257},[240,23636,23637],{"class":242,"line":3582},[240,23638,4140],{"class":257},[240,23640,23641],{"class":242,"line":3596},[240,23642,23643],{"class":246},"    \u002F\u002F\n",[240,23645,23646],{"class":242,"line":3601},[240,23647,23648],{"class":257},"    string m_PName;\n",[240,23650,23651],{"class":242,"line":3607},[240,23652,5947],{"class":257},[240,23654,23655,23657],{"class":242,"line":3628},[240,23656,16643],{"class":288},[240,23658,17120],{"class":436},[240,23660,23661],{"class":242,"line":3633},[240,23662,3504],{"class":257},[240,23664,23665],{"class":242,"line":3647},[240,23666,16665],{"class":288},[240,23668,23669],{"class":242,"line":3652},[240,23670,18942],{"class":246},[240,23672,23673,23675,23677,23679,23681,23683,23685,23688,23691,23693,23696,23699],{"class":242,"line":3681},[240,23674,20466],{"class":436},[240,23676,789],{"class":257},[240,23678,16866],{"class":436},[240,23680,16869],{"class":792},[240,23682,2479],{"class":257},[240,23684,16866],{"class":436},[240,23686,23687],{"class":792}," pname",[240,23689,23690],{"class":257},"):",[240,23692,16959],{"class":436},[240,23694,23695],{"class":257},"(name),m_phone.",[240,23697,23698],{"class":436},"m_PName",[240,23700,23701],{"class":257},"(pname) \n",[240,23703,23704],{"class":242,"line":3686},[240,23705,3983],{"class":257},[240,23707,23708,23710,23712,23715],{"class":242,"line":3703},[240,23709,5403],{"class":257},[240,23711,3137],{"class":288},[240,23713,23714],{"class":443},"\"Person的构造函数调用\"",[240,23716,274],{"class":257},[240,23718,23719],{"class":242,"line":3708},[240,23720,4140],{"class":257},[240,23722,23723,23725],{"class":242,"line":3713},[240,23724,20499],{"class":436},[240,23726,3929],{"class":257},[240,23728,23729],{"class":242,"line":3718},[240,23730,3983],{"class":257},[240,23732,23733,23735,23737,23740,23742],{"class":242,"line":3732},[240,23734,5403],{"class":257},[240,23736,3137],{"class":288},[240,23738,23739],{"class":443},"\"Person析构函数调用\"",[240,23741,3137],{"class":288},[240,23743,3159],{"class":257},[240,23745,23746],{"class":242,"line":3737},[240,23747,4140],{"class":257},[240,23749,23750],{"class":242,"line":4530},[240,23751,9731],{"class":246},[240,23753,23754],{"class":242,"line":4544},[240,23755,16841],{"class":257},[240,23757,23758],{"class":242,"line":4552},[240,23759,23760],{"class":246},"    \u002F\u002F手机\n",[240,23762,23763],{"class":242,"line":4557},[240,23764,23765],{"class":257},"    Phone m_Phone;\n",[240,23767,23768],{"class":242,"line":4563},[240,23769,5947],{"class":257},[240,23771,23772,23774,23776],{"class":242,"line":4569},[240,23773,7315],{"class":288},[240,23775,7539],{"class":436},[240,23777,3929],{"class":257},[240,23779,23780],{"class":242,"line":4574},[240,23781,3504],{"class":257},[240,23783,23784,23786,23788,23790,23792,23794,23797],{"class":242,"line":9899},[240,23785,21378],{"class":257},[240,23787,19],{"class":436},[240,23789,789],{"class":257},[240,23791,9867],{"class":443},[240,23793,2479],{"class":257},[240,23795,23796],{"class":443},"\"安卓\"",[240,23798,796],{"class":257},[240,23800,23801,23803,23805,23808,23810,23813,23815],{"class":242,"line":9923},[240,23802,3509],{"class":257},[240,23804,3137],{"class":288},[240,23806,23807],{"class":257},"p.Name",[240,23809,3137],{"class":288},[240,23811,23812],{"class":443},"\"拿着：\"",[240,23814,3137],{"class":288},[240,23816,23817],{"class":257},"p.m_phone.m_PName;\n",[240,23819,23820],{"class":242,"line":9928},[240,23821,312],{"class":257},[240,23823,23824,23826,23828],{"class":242,"line":9934},[240,23825,2126],{"class":288},[240,23827,3926],{"class":436},[240,23829,3929],{"class":257},[240,23831,23832],{"class":242,"line":9961},[240,23833,3504],{"class":257},[240,23835,23836,23838],{"class":242,"line":9966},[240,23837,7584],{"class":436},[240,23839,7587],{"class":257},[240,23841,23842],{"class":242,"line":9972},[240,23843,312],{"class":257},[19,23845,10976],{},[231,23847,23849],{"className":2112,"code":23848,"language":2114,"meta":236,"style":236},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[23,23850,23851,23856],{"__ignoreMap":236},[240,23852,23853],{"class":242,"line":243},[240,23854,23855],{"class":246},"    \u002F\u002F不需要写这个：\n",[240,23857,23858],{"class":242,"line":250},[240,23859,23860],{"class":246},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[19,23862,23863],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[231,23865,23867],{"className":2112,"code":23866,"language":2114,"meta":236,"style":236},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[23,23868,23869],{"__ignoreMap":236},[240,23870,23871,23873,23876,23878,23881,23884],{"class":242,"line":243},[240,23872,20993],{"class":436},[240,23874,23875],{"class":257},"(string name.string pname):",[240,23877,16959],{"class":436},[240,23879,23880],{"class":257},"(name),",[240,23882,23883],{"class":436},"m_phone",[240,23885,23886],{"class":257},"(pname) {}\n",[19,23888,23889,23890,440,23893],{},"采用的是隐式转换法，实际为如下：\n",[23,23891,23892],{},"m_phone(pname)",[23,23894,23895],{},"Phone m_phone=pname",[19,23897,23898,23901],{},[68,23899,23900],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[19,23903,23904],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[32,23906,23908],{"id":23907},"_828静态对象","8.2.8静态对象",[19,23910,23911],{},"静态对象在成员对象前static，称为静态对象",[19,23913,23914],{},"静态对象分为两类：",[1826,23916,23917],{},[1829,23918,23919],{},"静态成员变量",[3100,23921,23922,23925,23928],{},[1829,23923,23924],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[1829,23926,23927],{},"②在编译阶段分配内存",[1829,23929,23930],{},"③类内声明，类外初始化",[1826,23932,23933],{"start":250},[1829,23934,23935],{},"静态成员函数",[3100,23937,23938,23941],{},[1829,23939,23940],{},"①所有对象共享同一个函数",[1829,23942,23943],{},"②静态成员函数只能访问静态成员变量",[23945,23946,23948],"h4",{"id":23947},"_8281静态成员变量","8.2.8.1静态成员变量",[231,23950,23952],{"className":2112,"code":23951,"language":2114,"meta":236,"style":236},"#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",[23,23953,23954,23960,23970,23976,23980,23984,23989,23994,23999,24007,24011,24015,24019,24027,24031,24035,24040,24053,24057,24065,24069,24075],{"__ignoreMap":236},[240,23955,23956,23958],{"class":242,"line":243},[240,23957,3903],{"class":288},[240,23959,3906],{"class":443},[240,23961,23962,23964,23966,23968],{"class":242,"line":250},[240,23963,3911],{"class":288},[240,23965,3914],{"class":288},[240,23967,3917],{"class":436},[240,23969,274],{"class":257},[240,23971,23972,23974],{"class":242,"line":261},[240,23973,16643],{"class":288},[240,23975,17120],{"class":436},[240,23977,23978],{"class":242,"line":277},[240,23979,3504],{"class":257},[240,23981,23982],{"class":242,"line":294},[240,23983,16665],{"class":288},[240,23985,23986],{"class":242,"line":309},[240,23987,23988],{"class":246},"    \u002F\u002F非静态成员变量\n",[240,23990,23991],{"class":242,"line":529},[240,23992,23993],{"class":246},"    \u002F\u002F int m_A;\n",[240,23995,23996],{"class":242,"line":549},[240,23997,23998],{"class":246},"    \u002F\u002F定义静态成员变量\n",[240,24000,24001,24003,24005],{"class":242,"line":569},[240,24002,12971],{"class":288},[240,24004,4335],{"class":288},[240,24006,23339],{"class":257},[240,24008,24009],{"class":242,"line":589},[240,24010,4353],{"emptyLinePlaceholder":2051},[240,24012,24013],{"class":242,"line":715},[240,24014,4353],{"emptyLinePlaceholder":2051},[240,24016,24017],{"class":242,"line":727},[240,24018,5947],{"class":257},[240,24020,24021,24023,24025],{"class":242,"line":1730},[240,24022,7315],{"class":288},[240,24024,7539],{"class":436},[240,24026,3929],{"class":257},[240,24028,24029],{"class":242,"line":3582},[240,24030,3504],{"class":257},[240,24032,24033],{"class":242,"line":3596},[240,24034,17262],{"class":257},[240,24036,24037],{"class":242,"line":3601},[240,24038,24039],{"class":246},"    \u002F\u002F输出类成员变量这块内存\n",[240,24041,24042,24044,24046,24049,24051],{"class":242,"line":3607},[240,24043,3509],{"class":257},[240,24045,3137],{"class":288},[240,24047,24048],{"class":257},"p.m_A",[240,24050,3137],{"class":288},[240,24052,3159],{"class":257},[240,24054,24055],{"class":242,"line":3628},[240,24056,312],{"class":257},[240,24058,24059,24061,24063],{"class":242,"line":3633},[240,24060,2126],{"class":288},[240,24062,3926],{"class":436},[240,24064,3929],{"class":257},[240,24066,24067],{"class":242,"line":3647},[240,24068,3504],{"class":257},[240,24070,24071,24073],{"class":242,"line":3652},[240,24072,7584],{"class":436},[240,24074,3929],{"class":257},[240,24076,24077],{"class":242,"line":3681},[240,24078,312],{"class":257},[19,24080,24081],{},"此时输出是报错的：无法解析外部命令",[19,24083,24084],{},"解决这一问题：必须用到类内声明，类外初始化操作",[231,24086,24088],{"className":2112,"code":24087,"language":2114,"meta":236,"style":236},"#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",[23,24089,24090,24096,24106,24112,24116,24120,24125,24133,24137,24142,24157,24165,24169,24173,24178,24183,24195,24200,24211,24216,24221,24234,24238,24246,24250,24256],{"__ignoreMap":236},[240,24091,24092,24094],{"class":242,"line":243},[240,24093,3903],{"class":288},[240,24095,3906],{"class":443},[240,24097,24098,24100,24102,24104],{"class":242,"line":250},[240,24099,3911],{"class":288},[240,24101,3914],{"class":288},[240,24103,3917],{"class":436},[240,24105,274],{"class":257},[240,24107,24108,24110],{"class":242,"line":261},[240,24109,16643],{"class":288},[240,24111,17120],{"class":436},[240,24113,24114],{"class":242,"line":277},[240,24115,3504],{"class":257},[240,24117,24118],{"class":242,"line":294},[240,24119,16665],{"class":288},[240,24121,24122],{"class":242,"line":309},[240,24123,24124],{"class":246},"    \u002F\u002F类内声明\n",[240,24126,24127,24129,24131],{"class":242,"line":529},[240,24128,12971],{"class":288},[240,24130,4335],{"class":288},[240,24132,23339],{"class":257},[240,24134,24135],{"class":242,"line":549},[240,24136,5947],{"class":257},[240,24138,24139],{"class":242,"line":569},[240,24140,24141],{"class":246},"\u002F\u002F类外初始化\n",[240,24143,24144,24146,24148,24151,24153,24155],{"class":242,"line":589},[240,24145,2126],{"class":288},[240,24147,17518],{"class":436},[240,24149,24150],{"class":257},"::m_A",[240,24152,440],{"class":288},[240,24154,2546],{"class":264},[240,24156,274],{"class":257},[240,24158,24159,24161,24163],{"class":242,"line":715},[240,24160,7315],{"class":288},[240,24162,7539],{"class":436},[240,24164,3929],{"class":257},[240,24166,24167],{"class":242,"line":727},[240,24168,3504],{"class":257},[240,24170,24171],{"class":242,"line":1730},[240,24172,17262],{"class":257},[240,24174,24175],{"class":242,"line":3582},[240,24176,24177],{"class":246},"    \u002F\u002F访问变量的原内存空间\n",[240,24179,24180],{"class":242,"line":3596},[240,24181,24182],{"class":246},"    \u002F\u002F100\n",[240,24184,24185,24187,24189,24191,24193],{"class":242,"line":3601},[240,24186,3509],{"class":257},[240,24188,3137],{"class":288},[240,24190,24048],{"class":257},[240,24192,3137],{"class":288},[240,24194,3159],{"class":257},[240,24196,24197],{"class":242,"line":3607},[240,24198,24199],{"class":257},"    Person p2;\n",[240,24201,24202,24205,24207,24209],{"class":242,"line":3628},[240,24203,24204],{"class":257},"    p2.m_A",[240,24206,440],{"class":288},[240,24208,3676],{"class":264},[240,24210,274],{"class":257},[240,24212,24213],{"class":242,"line":3633},[240,24214,24215],{"class":246},"    \u002F\u002F继续访问这片空间\n",[240,24217,24218],{"class":242,"line":3647},[240,24219,24220],{"class":246},"    \u002F\u002F200\n",[240,24222,24223,24225,24227,24230,24232],{"class":242,"line":3652},[240,24224,3509],{"class":257},[240,24226,3137],{"class":288},[240,24228,24229],{"class":257},"p2.m_A",[240,24231,3137],{"class":288},[240,24233,3159],{"class":257},[240,24235,24236],{"class":242,"line":3681},[240,24237,312],{"class":257},[240,24239,24240,24242,24244],{"class":242,"line":3686},[240,24241,2126],{"class":288},[240,24243,3926],{"class":436},[240,24245,3929],{"class":257},[240,24247,24248],{"class":242,"line":3703},[240,24249,3504],{"class":257},[240,24251,24252,24254],{"class":242,"line":3708},[240,24253,7584],{"class":436},[240,24255,7587],{"class":257},[240,24257,24258],{"class":242,"line":3713},[240,24259,312],{"class":257},[19,24261,24262],{},[68,24263,24264],{},"静态变量的访问",[231,24266,24268],{"className":2112,"code":24267,"language":2114,"meta":236,"style":236},"#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",[23,24269,24270,24276,24286,24292,24296,24300,24304,24312,24316,24321,24329,24333,24337,24351,24366,24374,24378,24383,24388,24393,24398,24410,24415,24420,24434,24451,24455,24463,24467,24473],{"__ignoreMap":236},[240,24271,24272,24274],{"class":242,"line":243},[240,24273,3903],{"class":288},[240,24275,3906],{"class":443},[240,24277,24278,24280,24282,24284],{"class":242,"line":250},[240,24279,3911],{"class":288},[240,24281,3914],{"class":288},[240,24283,3917],{"class":436},[240,24285,274],{"class":257},[240,24287,24288,24290],{"class":242,"line":261},[240,24289,16643],{"class":288},[240,24291,17120],{"class":436},[240,24293,24294],{"class":242,"line":277},[240,24295,3504],{"class":257},[240,24297,24298],{"class":242,"line":294},[240,24299,16665],{"class":288},[240,24301,24302],{"class":242,"line":309},[240,24303,24124],{"class":246},[240,24305,24306,24308,24310],{"class":242,"line":529},[240,24307,12971],{"class":288},[240,24309,4335],{"class":288},[240,24311,23339],{"class":257},[240,24313,24314],{"class":242,"line":549},[240,24315,17171],{"class":288},[240,24317,24318],{"class":242,"line":569},[240,24319,24320],{"class":246},"    \u002F\u002F静态成员变量也是有访问权限的\n",[240,24322,24323,24325,24327],{"class":242,"line":589},[240,24324,12971],{"class":288},[240,24326,4335],{"class":288},[240,24328,23346],{"class":257},[240,24330,24331],{"class":242,"line":715},[240,24332,5947],{"class":257},[240,24334,24335],{"class":242,"line":727},[240,24336,24141],{"class":246},[240,24338,24339,24341,24343,24345,24347,24349],{"class":242,"line":1730},[240,24340,2126],{"class":288},[240,24342,17518],{"class":436},[240,24344,24150],{"class":257},[240,24346,440],{"class":288},[240,24348,2546],{"class":264},[240,24350,274],{"class":257},[240,24352,24353,24355,24357,24360,24362,24364],{"class":242,"line":3582},[240,24354,2126],{"class":288},[240,24356,17518],{"class":436},[240,24358,24359],{"class":257},"::m_B",[240,24361,440],{"class":288},[240,24363,1000],{"class":264},[240,24365,274],{"class":257},[240,24367,24368,24370,24372],{"class":242,"line":3596},[240,24369,7315],{"class":288},[240,24371,7608],{"class":436},[240,24373,3929],{"class":257},[240,24375,24376],{"class":242,"line":3601},[240,24377,3504],{"class":257},[240,24379,24380],{"class":242,"line":3607},[240,24381,24382],{"class":246},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[240,24384,24385],{"class":242,"line":3628},[240,24386,24387],{"class":246},"    \u002F\u002F静态成员变量有两种访问方式：\n",[240,24389,24390],{"class":242,"line":3633},[240,24391,24392],{"class":246},"    \u002F\u002F1.通过对象进行访问\n",[240,24394,24395],{"class":242,"line":3647},[240,24396,24397],{"class":257},"    Person p;  \n",[240,24399,24400,24402,24404,24406,24408],{"class":242,"line":3652},[240,24401,3509],{"class":257},[240,24403,3137],{"class":288},[240,24405,24048],{"class":257},[240,24407,3137],{"class":288},[240,24409,3159],{"class":257},[240,24411,24412],{"class":242,"line":3681},[240,24413,24414],{"class":246},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[240,24416,24417],{"class":242,"line":3686},[240,24418,24419],{"class":246},"    \u002F\u002F2.通过类名进行访问\n",[240,24421,24422,24424,24426,24428,24430,24432],{"class":242,"line":3703},[240,24423,3509],{"class":257},[240,24425,3137],{"class":288},[240,24427,20993],{"class":436},[240,24429,24150],{"class":257},[240,24431,3137],{"class":288},[240,24433,3159],{"class":257},[240,24435,24436,24438,24440,24442,24444,24446,24448],{"class":242,"line":3708},[240,24437,3509],{"class":257},[240,24439,3137],{"class":288},[240,24441,20993],{"class":436},[240,24443,24359],{"class":257},[240,24445,3137],{"class":288},[240,24447,3202],{"class":257},[240,24449,24450],{"class":246}," \u002F\u002F没有访问权限，报错\n",[240,24452,24453],{"class":242,"line":3713},[240,24454,312],{"class":257},[240,24456,24457,24459,24461],{"class":242,"line":3718},[240,24458,2126],{"class":288},[240,24460,3926],{"class":436},[240,24462,3929],{"class":257},[240,24464,24465],{"class":242,"line":3732},[240,24466,3504],{"class":257},[240,24468,24469,24471],{"class":242,"line":3737},[240,24470,7653],{"class":436},[240,24472,7587],{"class":257},[240,24474,24475],{"class":242,"line":4530},[240,24476,312],{"class":257},[23945,24478,24480],{"id":24479},"_8282静态成员函数","8.2.8.2静态成员函数",[19,24482,24483],{},"1.静态成员函数定义与访问",[231,24485,24487],{"className":2112,"code":24486,"language":2114,"meta":236,"style":236},"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",[23,24488,24489,24495,24499,24503,24508,24519,24523,24537,24541,24545,24553,24557,24562,24567,24571,24579,24584,24594],{"__ignoreMap":236},[240,24490,24491,24493],{"class":242,"line":243},[240,24492,16643],{"class":288},[240,24494,17120],{"class":436},[240,24496,24497],{"class":242,"line":250},[240,24498,3504],{"class":257},[240,24500,24501],{"class":242,"line":261},[240,24502,16665],{"class":288},[240,24504,24505],{"class":242,"line":277},[240,24506,24507],{"class":246},"    \u002F\u002F在公共权限下定义静态成员函数\n",[240,24509,24510,24512,24515,24517],{"class":242,"line":294},[240,24511,12971],{"class":288},[240,24513,24514],{"class":288}," void",[240,24516,13336],{"class":436},[240,24518,3929],{"class":257},[240,24520,24521],{"class":242,"line":309},[240,24522,3983],{"class":257},[240,24524,24525,24528,24530,24533,24535],{"class":242,"line":529},[240,24526,24527],{"class":257},"        coout",[240,24529,3137],{"class":288},[240,24531,24532],{"class":443},"\"静态成员函数的调用\"",[240,24534,3137],{"class":288},[240,24536,3159],{"class":257},[240,24538,24539],{"class":242,"line":549},[240,24540,4140],{"class":257},[240,24542,24543],{"class":242,"line":569},[240,24544,5947],{"class":257},[240,24546,24547,24549,24551],{"class":242,"line":589},[240,24548,7315],{"class":288},[240,24550,7539],{"class":436},[240,24552,3929],{"class":257},[240,24554,24555],{"class":242,"line":715},[240,24556,3504],{"class":257},[240,24558,24559],{"class":242,"line":727},[240,24560,24561],{"class":246},"    \u002F\u002F静态成员函数的调用方式:\n",[240,24563,24564],{"class":242,"line":1730},[240,24565,24566],{"class":246},"    \u002F\u002F1.通过对象访问\n",[240,24568,24569],{"class":242,"line":3582},[240,24570,17262],{"class":257},[240,24572,24573,24575,24577],{"class":242,"line":3596},[240,24574,17814],{"class":257},[240,24576,13502],{"class":436},[240,24578,7587],{"class":257},[240,24580,24581],{"class":242,"line":3601},[240,24582,24583],{"class":246},"    \u002F\u002F2.通过类名访问\n",[240,24585,24586,24588,24590,24592],{"class":242,"line":3607},[240,24587,20466],{"class":436},[240,24589,19679],{"class":257},[240,24591,13502],{"class":436},[240,24593,7587],{"class":257},[240,24595,24596],{"class":242,"line":3628},[240,24597,312],{"class":257},[1826,24599,24600],{"start":250},[1829,24601,24602],{},"静态成员函数只能访问静态成员变量",[231,24604,24606],{"className":2112,"code":24605,"language":2114,"meta":236,"style":236},"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",[23,24607,24608,24614,24618,24622,24626,24636,24640,24654,24659,24671,24675,24686,24696,24700,24704,24708,24718,24722,24735,24739,24743,24747,24751,24765,24773,24777,24781,24785,24789,24797,24801,24811,24816,24820,24828,24832,24838],{"__ignoreMap":236},[240,24609,24610,24612],{"class":242,"line":243},[240,24611,16643],{"class":288},[240,24613,17120],{"class":436},[240,24615,24616],{"class":242,"line":250},[240,24617,3504],{"class":257},[240,24619,24620],{"class":242,"line":261},[240,24621,16665],{"class":288},[240,24623,24624],{"class":242,"line":277},[240,24625,24507],{"class":246},[240,24627,24628,24630,24632,24634],{"class":242,"line":294},[240,24629,12971],{"class":288},[240,24631,24514],{"class":288},[240,24633,13336],{"class":436},[240,24635,3929],{"class":257},[240,24637,24638],{"class":242,"line":309},[240,24639,3983],{"class":257},[240,24641,24642,24645,24647,24649,24651],{"class":242,"line":529},[240,24643,24644],{"class":257},"        m_A",[240,24646,440],{"class":288},[240,24648,285],{"class":264},[240,24650,2175],{"class":257},[240,24652,24653],{"class":246}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[240,24655,24656],{"class":242,"line":549},[240,24657,24658],{"class":246},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[240,24660,24661,24663,24665,24667,24669],{"class":242,"line":569},[240,24662,24527],{"class":257},[240,24664,3137],{"class":288},[240,24666,24532],{"class":443},[240,24668,3137],{"class":288},[240,24670,3159],{"class":257},[240,24672,24673],{"class":242,"line":589},[240,24674,4140],{"class":257},[240,24676,24677,24679,24681,24683],{"class":242,"line":715},[240,24678,12971],{"class":288},[240,24680,4335],{"class":288},[240,24682,17397],{"class":257},[240,24684,24685],{"class":246}," \u002F\u002F静态成员变量\n",[240,24687,24688,24690,24693],{"class":242,"line":727},[240,24689,3938],{"class":288},[240,24691,24692],{"class":257}," m_B;",[240,24694,24695],{"class":246}," \u002F\u002F非静态成员变量\n",[240,24697,24698],{"class":242,"line":1730},[240,24699,4353],{"emptyLinePlaceholder":2051},[240,24701,24702],{"class":242,"line":3582},[240,24703,17171],{"class":288},[240,24705,24706],{"class":242,"line":3596},[240,24707,24320],{"class":246},[240,24709,24710,24712,24714,24716],{"class":242,"line":3601},[240,24711,12971],{"class":288},[240,24713,24514],{"class":288},[240,24715,15568],{"class":436},[240,24717,3929],{"class":257},[240,24719,24720],{"class":242,"line":3607},[240,24721,3983],{"class":257},[240,24723,24724,24726,24728,24731,24733],{"class":242,"line":3628},[240,24725,5403],{"class":257},[240,24727,3137],{"class":288},[240,24729,24730],{"class":443},"\"这是私有权限下的静态函数调用\"",[240,24732,3137],{"class":288},[240,24734,3159],{"class":257},[240,24736,24737],{"class":242,"line":3633},[240,24738,4140],{"class":257},[240,24740,24741],{"class":242,"line":3647},[240,24742,4353],{"emptyLinePlaceholder":2051},[240,24744,24745],{"class":242,"line":3652},[240,24746,4353],{"emptyLinePlaceholder":2051},[240,24748,24749],{"class":242,"line":3681},[240,24750,5947],{"class":257},[240,24752,24753,24755,24757,24759,24761,24763],{"class":242,"line":3686},[240,24754,2126],{"class":288},[240,24756,17518],{"class":436},[240,24758,24150],{"class":257},[240,24760,440],{"class":288},[240,24762,1274],{"class":264},[240,24764,274],{"class":257},[240,24766,24767,24769,24771],{"class":242,"line":3703},[240,24768,7315],{"class":288},[240,24770,7539],{"class":436},[240,24772,3929],{"class":257},[240,24774,24775],{"class":242,"line":3708},[240,24776,3504],{"class":257},[240,24778,24779],{"class":242,"line":3713},[240,24780,24561],{"class":246},[240,24782,24783],{"class":242,"line":3718},[240,24784,24566],{"class":246},[240,24786,24787],{"class":242,"line":3732},[240,24788,17262],{"class":257},[240,24790,24791,24793,24795],{"class":242,"line":3737},[240,24792,17814],{"class":257},[240,24794,13502],{"class":436},[240,24796,7587],{"class":257},[240,24798,24799],{"class":242,"line":4530},[240,24800,24583],{"class":246},[240,24802,24803,24805,24807,24809],{"class":242,"line":4544},[240,24804,20466],{"class":436},[240,24806,19679],{"class":257},[240,24808,13502],{"class":436},[240,24810,7587],{"class":257},[240,24812,24813],{"class":242,"line":4552},[240,24814,24815],{"class":246},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[240,24817,24818],{"class":242,"line":4557},[240,24819,312],{"class":257},[240,24821,24822,24824,24826],{"class":242,"line":4563},[240,24823,2126],{"class":288},[240,24825,3926],{"class":436},[240,24827,3929],{"class":257},[240,24829,24830],{"class":242,"line":4569},[240,24831,3504],{"class":257},[240,24833,24834,24836],{"class":242,"line":4574},[240,24835,7584],{"class":436},[240,24837,7587],{"class":257},[240,24839,24840],{"class":242,"line":9899},[240,24841,312],{"class":257},[32,24843,24845],{"id":24844},"_83c对象模型和this指针","8.3C++对象模型和this指针",[23945,24847,24849],{"id":24848},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[19,24851,24852],{},"在c++中，类内的成员变量和成员函数分开存储",[19,24854,24855],{},"只有非静态成员变量才属于类的对象上",[24857,24858,24860],"h5",{"id":24859},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[231,24862,24864],{"className":2112,"code":24863,"language":2114,"meta":236,"style":236},"#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",[23,24865,24866,24873,24883,24889,24893,24897,24901,24909,24913,24917,24940,24944,24952,24956,24962],{"__ignoreMap":236},[240,24867,24868,24870],{"class":242,"line":243},[240,24869,3903],{"class":288},[240,24871,24872],{"class":443},"\u003Ciostraem>\n",[240,24874,24875,24877,24879,24881],{"class":242,"line":250},[240,24876,3911],{"class":288},[240,24878,3914],{"class":288},[240,24880,3917],{"class":436},[240,24882,274],{"class":257},[240,24884,24885,24887],{"class":242,"line":261},[240,24886,16643],{"class":288},[240,24888,17120],{"class":436},[240,24890,24891],{"class":242,"line":277},[240,24892,3504],{"class":257},[240,24894,24895],{"class":242,"line":294},[240,24896,4353],{"emptyLinePlaceholder":2051},[240,24898,24899],{"class":242,"line":309},[240,24900,5947],{"class":257},[240,24902,24903,24905,24907],{"class":242,"line":529},[240,24904,7315],{"class":288},[240,24906,7539],{"class":436},[240,24908,3929],{"class":257},[240,24910,24911],{"class":242,"line":549},[240,24912,3504],{"class":257},[240,24914,24915],{"class":242,"line":569},[240,24916,17262],{"class":257},[240,24918,24919,24921,24923,24926,24928,24931,24933,24935,24937],{"class":242,"line":589},[240,24920,3509],{"class":257},[240,24922,3137],{"class":288},[240,24924,24925],{"class":443},"\"size of p=\"",[240,24927,3137],{"class":288},[240,24929,24930],{"class":436},"sizeoif",[240,24932,8490],{"class":257},[240,24934,3137],{"class":288},[240,24936,3202],{"class":257},[240,24938,24939],{"class":246}," \u002F\u002F查看这个空类的占用的内存空间\n",[240,24941,24942],{"class":242,"line":715},[240,24943,312],{"class":257},[240,24945,24946,24948,24950],{"class":242,"line":727},[240,24947,2126],{"class":288},[240,24949,3926],{"class":436},[240,24951,3929],{"class":257},[240,24953,24954],{"class":242,"line":1730},[240,24955,3504],{"class":257},[240,24957,24958,24960],{"class":242,"line":3582},[240,24959,7584],{"class":436},[240,24961,7587],{"class":257},[240,24963,24964],{"class":242,"line":3596},[240,24965,312],{"class":257},[19,24967,24968],{},"输出结果为：size of p=1",[19,24970,24971],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[19,24973,24974],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[24857,24976,24978],{"id":24977},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[231,24980,24982],{"className":2112,"code":24981,"language":2114,"meta":236,"style":236},"#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",[23,24983,24984,24990,25000,25008,25012,25021,25025,25033,25037,25041,25060,25064,25068,25076,25080,25086],{"__ignoreMap":236},[240,24985,24986,24988],{"class":242,"line":243},[240,24987,3903],{"class":288},[240,24989,3906],{"class":443},[240,24991,24992,24994,24996,24998],{"class":242,"line":250},[240,24993,3911],{"class":288},[240,24995,3914],{"class":288},[240,24997,3917],{"class":436},[240,24999,274],{"class":257},[240,25001,25002,25004,25006],{"class":242,"line":261},[240,25003,16643],{"class":288},[240,25005,17518],{"class":436},[240,25007,4627],{"class":257},[240,25009,25010],{"class":242,"line":277},[240,25011,3504],{"class":257},[240,25013,25014,25016,25018],{"class":242,"line":294},[240,25015,3938],{"class":288},[240,25017,17397],{"class":257},[240,25019,25020],{"class":246},"\u002F\u002F非静态成员变量\n",[240,25022,25023],{"class":242,"line":309},[240,25024,5947],{"class":257},[240,25026,25027,25029,25031],{"class":242,"line":529},[240,25028,7315],{"class":288},[240,25030,7539],{"class":436},[240,25032,3929],{"class":257},[240,25034,25035],{"class":242,"line":549},[240,25036,3504],{"class":257},[240,25038,25039],{"class":242,"line":569},[240,25040,17262],{"class":257},[240,25042,25043,25045,25047,25049,25051,25053,25055,25057],{"class":242,"line":589},[240,25044,3509],{"class":257},[240,25046,3137],{"class":288},[240,25048,24925],{"class":443},[240,25050,3332],{"class":288},[240,25052,8490],{"class":257},[240,25054,3137],{"class":288},[240,25056,3202],{"class":257},[240,25058,25059],{"class":246}," \u002F\u002F查看不是空对象时占用多少内存\n",[240,25061,25062],{"class":242,"line":715},[240,25063,4353],{"emptyLinePlaceholder":2051},[240,25065,25066],{"class":242,"line":727},[240,25067,312],{"class":257},[240,25069,25070,25072,25074],{"class":242,"line":1730},[240,25071,2126],{"class":288},[240,25073,3926],{"class":436},[240,25075,3929],{"class":257},[240,25077,25078],{"class":242,"line":3582},[240,25079,3504],{"class":257},[240,25081,25082,25084],{"class":242,"line":3596},[240,25083,7584],{"class":436},[240,25085,7587],{"class":257},[240,25087,25088],{"class":242,"line":3601},[240,25089,312],{"class":257},[19,25091,25092],{},"输出结果：size of p=4",[19,25094,25095],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[1826,25097,25098],{},[1829,25099,25100],{},"如果加上非静态成员变量，Person类修改如下",[231,25102,25104],{"className":2112,"code":25103,"language":2114,"meta":236,"style":236},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[23,25105,25106,25112,25116,25122,25130,25134,25139],{"__ignoreMap":236},[240,25107,25108,25110],{"class":242,"line":243},[240,25109,16643],{"class":288},[240,25111,17120],{"class":436},[240,25113,25114],{"class":242,"line":250},[240,25115,3504],{"class":257},[240,25117,25118,25120],{"class":242,"line":261},[240,25119,3938],{"class":288},[240,25121,23339],{"class":257},[240,25123,25124,25126,25128],{"class":242,"line":277},[240,25125,12971],{"class":288},[240,25127,4335],{"class":288},[240,25129,23346],{"class":257},[240,25131,25132],{"class":242,"line":294},[240,25133,5947],{"class":257},[240,25135,25136],{"class":242,"line":309},[240,25137,25138],{"class":246},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[240,25140,25141,25143,25145,25147,25149,25151],{"class":242,"line":529},[240,25142,2126],{"class":288},[240,25144,17518],{"class":436},[240,25146,24359],{"class":257},[240,25148,440],{"class":288},[240,25150,1274],{"class":264},[240,25152,274],{"class":257},[19,25154,25155],{},"输出结果：4",[19,25157,25158],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[1826,25160,25161],{"start":250},[1829,25162,25163],{},"加上非静态成员函数",[231,25165,25167],{"className":2112,"code":25166,"language":2114,"meta":236,"style":236},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[23,25168,25169,25176,25180,25186,25194,25198,25202,25206],{"__ignoreMap":236},[240,25170,25171,25173],{"class":242,"line":243},[240,25172,16643],{"class":288},[240,25174,25175],{"class":436},"  Person\n",[240,25177,25178],{"class":242,"line":250},[240,25179,3504],{"class":257},[240,25181,25182,25184],{"class":242,"line":261},[240,25183,3938],{"class":288},[240,25185,23339],{"class":257},[240,25187,25188,25190,25192],{"class":242,"line":277},[240,25189,16858],{"class":288},[240,25191,13336],{"class":436},[240,25193,3929],{"class":257},[240,25195,25196],{"class":242,"line":294},[240,25197,3983],{"class":257},[240,25199,25200],{"class":242,"line":309},[240,25201,4353],{"emptyLinePlaceholder":2051},[240,25203,25204],{"class":242,"line":529},[240,25205,4140],{"class":257},[240,25207,25208],{"class":242,"line":549},[240,25209,5947],{"class":257},[19,25211,25212],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[1826,25214,25215],{"start":261},[1829,25216,25217],{},"加上静态成员函数",[231,25219,25221],{"className":2112,"code":25220,"language":2114,"meta":236,"style":236},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[23,25222,25223,25229,25233,25239,25247,25251,25255,25259,25270,25274,25278,25282],{"__ignoreMap":236},[240,25224,25225,25227],{"class":242,"line":243},[240,25226,16643],{"class":288},[240,25228,25175],{"class":436},[240,25230,25231],{"class":242,"line":250},[240,25232,3504],{"class":257},[240,25234,25235,25237],{"class":242,"line":261},[240,25236,3938],{"class":288},[240,25238,23339],{"class":257},[240,25240,25241,25243,25245],{"class":242,"line":277},[240,25242,16858],{"class":288},[240,25244,13336],{"class":436},[240,25246,3929],{"class":257},[240,25248,25249],{"class":242,"line":294},[240,25250,3983],{"class":257},[240,25252,25253],{"class":242,"line":309},[240,25254,4353],{"emptyLinePlaceholder":2051},[240,25256,25257],{"class":242,"line":529},[240,25258,4140],{"class":257},[240,25260,25261,25263,25265,25268],{"class":242,"line":549},[240,25262,12971],{"class":288},[240,25264,24514],{"class":288},[240,25266,25267],{"class":436}," func1",[240,25269,3929],{"class":257},[240,25271,25272],{"class":242,"line":569},[240,25273,3983],{"class":257},[240,25275,25276],{"class":242,"line":589},[240,25277,4353],{"emptyLinePlaceholder":2051},[240,25279,25280],{"class":242,"line":715},[240,25281,4140],{"class":257},[240,25283,25284],{"class":242,"line":727},[240,25285,5947],{"class":257},[19,25287,25155],{},[19,25289,25290],{},"解释：静态成员函数也不属于类上",[2019,25292,9625],{},{"title":236,"searchDepth":250,"depth":250,"links":25294},[25295,25301],{"id":16594,"depth":250,"text":16595,"children":25296},[25297,25298,25299,25300],{"id":16598,"depth":261,"text":16599},{"id":17323,"depth":261,"text":17324},{"id":17495,"depth":261,"text":17496},{"id":17953,"depth":261,"text":17954},{"id":20324,"depth":250,"text":20325,"children":25302},[25303,25304,25305,25306,25307,25308,25309,25310,25311],{"id":20336,"depth":261,"text":20337},{"id":20629,"depth":261,"text":20630},{"id":21120,"depth":261,"text":21121},{"id":22217,"depth":261,"text":22218},{"id":22640,"depth":261,"text":22641},{"id":23119,"depth":261,"text":23120},{"id":23494,"depth":261,"text":23495},{"id":23907,"depth":261,"text":23908},{"id":24844,"depth":261,"text":24845},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":16559,"description":25312},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":25319,"title":2114,"body":25320,"description":2048,"extension":2049,"meta":25324,"navigation":2051,"path":25326,"seo":25327,"stem":25328,"__hash__":25329},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":25321,"toc":25322},[],{"title":236,"searchDepth":250,"depth":250,"links":25323},[],{"category":25325},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":2114,"description":2048},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":25331,"title":25332,"body":25333,"description":236,"extension":2049,"meta":25923,"navigation":2051,"path":25924,"seo":25925,"stem":25926,"__hash__":25927},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":25334,"toc":25905},[25335,25338,25342,25345,25348,25351,25369,25374,25377,25380,25383,25386,25391,25394,25399,25402,25405,25409,25412,25415,25421,25424,25442,25446,25450,25453,25458,25461,25465,25468,25481,25484,25488,25491,25494,25497,25522,25525,25534,25545,25560,25592,25596,25603,25611,25615,25618,25621,25626,25630,25633,25636,25641,25644,25648,25651,25654,25659,25662,25666,25671,25675,25741,25745,25748,25751,25754,25757,25760,25766,25787,25790,25804,25813,25817,25820,25823,25828,25831,25836,25841,25844,25847,25852,25857,25860,25865,25870,25873,25878,25883,25886,25889,25894,25897,25902],[10,25336,25332],{"id":25337},"_1强化学习基本认识",[14,25339,25341],{"id":25340},"_11什么是强化学习","1.1.什么是强化学习",[19,25343,25344],{},"强化学习有两部分组成：智能体和环境；",[19,25346,25347],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[19,25349,25350],{},"强化学习与监督学习的区别:",[1826,25352,25353,25356,25359,25362],{},[1829,25354,25355],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[1829,25357,25358],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[1829,25360,25361],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[1829,25363,25364,25365,25368],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[68,25366,25367],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[19,25370,25371],{},[219,25372],{"alt":236,"src":25373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[19,25375,25376],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[19,25378,25379],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[19,25381,25382],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[19,25384,25385],{},"获取奖励",[19,25387,25388],{},[219,25389],{"alt":236,"src":25390},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[19,25392,25393],{},"强化学习可以分成标准强化学习和深度强化学习",[19,25395,25396],{},[219,25397],{"alt":236,"src":25398},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[19,25400,25401],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[19,25403,25404],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[14,25406,25408],{"id":25407},"_12强化学习应用场景","1.2.强化学习应用场景",[19,25410,25411],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[19,25413,25414],{},"具身智能中的应用",[19,25416,25417,25420],{},[68,25418,25419],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[19,25422,25423],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[19,25425,25426,25427,25430,25431,25434,25435,25438,25439],{},"机器人是",[68,25428,25429],{},"躯体","，深度学习是",[68,25432,25433],{},"神经元****网络","，VLA是",[68,25436,25437],{},"通用的行为逻辑","，而强化学习是",[68,25440,25441],{},"教练",[14,25443,25445],{"id":25444},"_13序列决策","1.3.序列决策",[32,25447,25449],{"id":25448},"_131智能体与环境","1.3.1.智能体与环境",[19,25451,25452],{},"强化学习研究的问题是智能体agent与环境交互的问题",[19,25454,25455],{},[219,25456],{"alt":236,"src":25457},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[19,25459,25460],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[32,25462,25464],{"id":25463},"_132奖励","1.3.2.奖励",[19,25466,25467],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[19,25469,25470,25471,25480],{},"取某个策略的表现如何。强化学习的目的就是",[68,25472,25473,25474,25479],{},"最大化",[68,25475,25476],{},[68,25477,25478],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[19,25482,25483],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[32,25485,25487],{"id":25486},"_133序列决策","1.3.3.序列决策",[19,25489,25490],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[19,25492,25493],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[19,25495,25496],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[19,25498,25499,25503,25504,25506,25507,25509,25510,25512,25513,15744,25516,15744,25519],{},[25500,25501,25502],"em",{},"Ht"," = ",[25500,25505,2695],{},"1*, a",[25500,25508,1643],{},", r",[25500,25511,1643],{},", . . . ,* ",[25500,25514,25515],{},"ot",[25500,25517,25518],{},", at ,",[25500,25520,25521],{},"rt",[19,25523,25524],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[19,25526,25527,25503,25530,3612,25532,2529],{},[25500,25528,25529],{},"st",[25500,25531,2172],{},[25500,25533,25502],{},[19,25535,25536,25537,25540,25541,25544],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[68,25538,25539],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[68,25542,25543],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[19,25546,25547,25548,25551,25552,25555,25556,25559],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[68,25549,25550],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[68,25553,25554],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[25500,25557,25558],{},"S, A, T, R, Ω, O, γ",")。",[19,25561,25562,25563,25565,25566,25568,25569,789,25571,25574,25575,25577,25578,789,25581,25584,25585,25587,25588,25591],{},"其中 ",[25500,25564,2787],{}," 表示状态空间，为隐变量，",[25500,25567,2337],{}," 为动作空间，",[25500,25570,2811],{},[25500,25572,25573],{},"s ′ |s, a",") 为状态转移概率，",[25500,25576,2762],{}," 为奖励函数，",[25500,25579,25580],{},"Ω",[25500,25582,25583],{},"o|s, a",") 为观测概率，",[25500,25586,2689],{}," 为观测空间，",[25500,25589,25590],{},"γ"," 为折扣因子。",[14,25593,25595],{"id":25594},"_14动作空间","1.4.动作空间",[19,25597,25598,25599,25602],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[68,25600,25601],{},"动作空间"," ，动作空间分为:",[1826,25604,25605,25608],{},[1829,25606,25607],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[1829,25609,25610],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[14,25612,25614],{"id":25613},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[19,25616,25617],{},"由策略、价值函数、模型三部分组成",[19,25619,25620],{},"这三者组成马尔可夫决策过程",[19,25622,25623],{},[219,25624],{"alt":236,"src":25625},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[32,25627,25629],{"id":25628},"_151策略","1.5.1.策略",[19,25631,25632],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[19,25634,25635],{},"策略可分为两种：",[19,25637,25638],{},[219,25639],{"alt":236,"src":25640},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[19,25642,25643],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[32,25645,25647],{"id":25646},"_152价值函数","1.5.2.价值函数",[19,25649,25650],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[19,25652,25653],{},"价值函数中有一个折扣因子，类似于存款利息",[19,25655,25656],{},[219,25657],{"alt":236,"src":25658},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[19,25660,25661],{},"进入某个状态采取的最优动作可以通过Q函数得到",[32,25663,25665],{"id":25664},"_153模型","1.5.3.模型",[19,25667,25668],{},[219,25669],{"alt":236,"src":25670},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[14,25672,25674],{"id":25673},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[802,25676,25677,25687],{},[805,25678,25679],{},[808,25680,25681,25684],{},[811,25682,25683],{"align":813},"类型",[811,25685,25686],{"align":813},"特点",[819,25688,25689,25699,25709,25719,25731],{},[808,25690,25691,25696],{},[824,25692,25693],{"align":813},[68,25694,25695],{},"基于价值的智能体",[824,25697,25698],{"align":813},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[808,25700,25701,25706],{},[824,25702,25703],{"align":813},[68,25704,25705],{},"基于策略的智能体",[824,25707,25708],{"align":813},"直接学习策略，没有学习价值函数",[808,25710,25711,25716],{},[824,25712,25713],{"align":813},[68,25714,25715],{},"演员-评论员智能体",[824,25717,25718],{"align":813},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[808,25720,25721,25726],{},[824,25722,25723],{"align":813},[68,25724,25725],{},"有模型强化学习智能体",[824,25727,25728],{"align":813},[219,25729],{"alt":236,"src":25730},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[808,25732,25733,25738],{},[824,25734,25735],{"align":813},[68,25736,25737],{},"免模型强化学习智能体",[824,25739,25740],{"align":813},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[14,25742,25744],{"id":25743},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[19,25746,25747],{},"学习和规划是序列决策的两个基本问题",[19,25749,25750],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[19,25752,25753],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[19,25755,25756],{},"强化学习用到的库：Gym",[19,25758,25759],{},"Gym可以检验强化学习算法的优劣",[19,25761,25762,25765],{},[68,25763,25764],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[231,25767,25771],{"className":25768,"code":25769,"language":25770,"meta":236,"style":236},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[23,25772,25773],{"__ignoreMap":236},[240,25774,25775,25778,25781,25784],{"class":242,"line":243},[240,25776,25777],{"class":436},"pip",[240,25779,25780],{"class":443}," install",[240,25782,25783],{"class":443}," gym==",[240,25785,25786],{"class":264},"0.25.2\n",[19,25788,25789],{},"显示图形界面需要",[231,25791,25793],{"className":25768,"code":25792,"language":25770,"meta":236,"style":236},"pip install pygame\n",[23,25794,25795],{"__ignoreMap":236},[240,25796,25797,25799,25801],{"class":242,"line":243},[240,25798,25777],{"class":436},[240,25800,25780],{"class":443},[240,25802,25803],{"class":443}," pygame\n",[19,25805,25806,25807],{},"有关Gym库的相关文档介绍：",[254,25808,25812],{"href":25809,"rel":25810},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[25811],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[14,25814,25816],{"id":25815},"_18一些补充基础概念","1.8.一些补充基础概念",[19,25818,25819],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[19,25821,25822],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[19,25824,25825],{},[219,25826],{"alt":236,"src":25827},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[19,25829,25830],{},"折扣率需要自己来设定",[19,25832,25833],{},[219,25834],{"alt":236,"src":25835},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[1826,25837,25838],{},[1829,25839,25840],{},"状态转移函数：",[19,25842,25843],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[19,25845,25846],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[19,25848,25849],{},[219,25850],{"alt":236,"src":25851},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[1826,25853,25854],{"start":250},[1829,25855,25856],{},"动作价值函数：",[19,25858,25859],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[19,25861,25862],{},[219,25863],{"alt":236,"src":25864},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[1826,25866,25867],{"start":261},[1829,25868,25869],{},"最优动作价值函数：",[19,25871,25872],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[19,25874,25875],{},[219,25876],{"alt":236,"src":25877},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[1826,25879,25880],{"start":277},[1829,25881,25882],{},"状态价值函数:",[19,25884,25885],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[19,25887,25888],{},"它衡量的是“一个具体动作”的长期价值",[19,25890,25891],{},[219,25892],{"alt":236,"src":25893},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[19,25895,25896],{},"几个价值函数之间的比较：",[19,25898,25899],{},[219,25900],{"alt":236,"src":25901},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[2019,25903,25904],{},"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":236,"searchDepth":250,"depth":250,"links":25906},[25907,25908,25909,25914,25915,25920,25921,25922],{"id":25340,"depth":250,"text":25341},{"id":25407,"depth":250,"text":25408},{"id":25444,"depth":250,"text":25445,"children":25910},[25911,25912,25913],{"id":25448,"depth":261,"text":25449},{"id":25463,"depth":261,"text":25464},{"id":25486,"depth":261,"text":25487},{"id":25594,"depth":250,"text":25595},{"id":25613,"depth":250,"text":25614,"children":25916},[25917,25918,25919],{"id":25628,"depth":261,"text":25629},{"id":25646,"depth":261,"text":25647},{"id":25664,"depth":261,"text":25665},{"id":25673,"depth":250,"text":25674},{"id":25743,"depth":250,"text":25744},{"id":25815,"depth":250,"text":25816},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":25332,"description":236},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":25929,"title":25930,"body":25931,"description":25938,"extension":2049,"meta":25949,"navigation":2051,"path":25950,"seo":25951,"stem":25952,"__hash__":25953},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":25932,"toc":25947},[25933,25936,25939,25944],[10,25934,25930],{"id":25935},"_2马尔可夫决策过程",[19,25937,25938],{},"这是强化学习的基本框架",[19,25940,25941],{},[219,25942],{"alt":236,"src":25943},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[19,25945,25946],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":236,"searchDepth":250,"depth":250,"links":25948},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":25930,"description":25938},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":25955,"title":25956,"body":25957,"description":236,"extension":2049,"meta":26073,"navigation":2051,"path":26074,"seo":26075,"stem":26076,"__hash__":26077},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":25958,"toc":26068},[25959,25962,25966,25969,25974,25979,25982,25987,25990,25995,25998,26002,26007,26010,26015,26020,26025,26028,26032,26037,26040,26045,26050,26055,26060,26063],[10,25960,25956],{"id":25961},"_3动作价值函数",[14,25963,25965],{"id":25964},"_31dqn","3.1.DQN",[19,25967,25968],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[19,25970,25971],{},[219,25972],{"alt":236,"src":25973},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[19,25975,25976],{},[219,25977],{"alt":236,"src":25978},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[19,25980,25981],{},"DQN算法的描述：",[19,25983,25984],{},[219,25985],{"alt":236,"src":25986},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[19,25988,25989],{},"这里的Dense指的是全连接层",[19,25991,25992],{},[219,25993],{"alt":236,"src":25994},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[19,25996,25997],{},"当前观测的状态为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,25999,26001],{"id":26000},"_32dqn的举例","3.2.DQN的举例",[19,26003,26004],{},[219,26005],{"alt":236,"src":26006},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[19,26008,26009],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[19,26011,26012],{},[219,26013],{"alt":236,"src":26014},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[19,26016,26017],{},[219,26018],{"alt":236,"src":26019},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[19,26021,26022],{},[219,26023],{"alt":236,"src":26024},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[19,26026,26027],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[14,26029,26031],{"id":26030},"_33td算法","3.3.TD算法",[19,26033,26034],{},[219,26035],{"alt":236,"src":26036},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[19,26038,26039],{},"强化学习TD算法公式的粗略解释：",[19,26041,26042],{},[219,26043],{"alt":236,"src":26044},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[19,26046,26047],{},[219,26048],{"alt":236,"src":26049},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[19,26051,26052],{},[219,26053],{"alt":236,"src":26054},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[19,26056,26057],{},[219,26058],{"alt":236,"src":26059},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[19,26061,26062],{},"TD算法总结：",[19,26064,26065],{},[219,26066],{"alt":236,"src":26067},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":236,"searchDepth":250,"depth":250,"links":26069},[26070,26071,26072],{"id":25964,"depth":250,"text":25965},{"id":26000,"depth":250,"text":26001},{"id":26030,"depth":250,"text":26031},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":25956,"description":236},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":26079,"title":26080,"body":26081,"description":236,"extension":2049,"meta":26314,"navigation":2051,"path":26315,"seo":26316,"stem":26317,"__hash__":26318},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":26082,"toc":26310},[26083,26086,26090,26093,26096,26101,26106,26109,26114,26119,26122,26127,26130,26135,26138,26143,26146,26151,26154,26159,26164,26167,26172,26175,26178,26183,26186,26191,26196,26200,26203,26206,26211,26216,26219,26224,26229,26232,26237,26240,26243,26248,26251,26256,26259,26264,26269,26272,26277,26282,26285,26290,26293,26298,26301],[10,26084,26080],{"id":26085},"_4策略学习",[14,26087,26089],{"id":26088},"_41概念描述","4.1.概念描述",[19,26091,26092],{},"用神经网络（策略网络）近似策略函数",[19,26094,26095],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[19,26097,26098],{},[219,26099],{"alt":236,"src":26100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[19,26102,26103],{},[219,26104],{"alt":236,"src":26105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[19,26107,26108],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[19,26110,26111],{},[219,26112],{"alt":236,"src":26113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[19,26115,26116],{},[219,26117],{"alt":236,"src":26118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[19,26120,26121],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[19,26123,26124],{},[219,26125],{"alt":236,"src":26126},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[19,26128,26129],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[19,26131,26132],{},[219,26133],{"alt":236,"src":26134},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[19,26136,26137],{},"改进theta要用到策略梯度算法",[19,26139,26140],{},[219,26141],{"alt":236,"src":26142},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[19,26144,26145],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[19,26147,26148],{},[219,26149],{"alt":236,"src":26150},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[19,26152,26153],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[19,26155,26156],{},[219,26157],{"alt":236,"src":26158},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[19,26160,26161],{},[219,26162],{"alt":236,"src":26163},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[19,26165,26166],{},"梯度公式总结：",[19,26168,26169],{},[219,26170],{"alt":236,"src":26171},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[19,26173,26174],{},"两个公式的分别应用场景：",[19,26176,26177],{},"对于离散的动作：",[19,26179,26180],{},[219,26181],{"alt":236,"src":26182},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[19,26184,26185],{},"对于连续的动作：",[19,26187,26188],{},[219,26189],{"alt":236,"src":26190},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[19,26192,26193],{},[219,26194],{"alt":236,"src":26195},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[14,26197,26199],{"id":26198},"_42概率梯度算法总结","4.2.概率梯度算法总结",[19,26201,26202],{},"使用蒙特卡洛来近似计算策略梯度",[19,26204,26205],{},"蒙特卡洛法的解释如下：",[19,26207,26208],{},[219,26209],{"alt":236,"src":26210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[19,26212,26213],{},[219,26214],{"alt":236,"src":26215},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[19,26217,26218],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[1826,26220,26221],{},[1829,26222,26223],{},"方法一：reinforce算法",[19,26225,26226],{},[219,26227],{"alt":236,"src":26228},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[19,26230,26231],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[1826,26233,26234],{"start":250},[1829,26235,26236],{},"方法二：actor-critic算法",[19,26238,26239],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[19,26241,26242],{},"两个网络的构建：",[19,26244,26245],{},[219,26246],{"alt":236,"src":26247},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[19,26249,26250],{},"actor网路：",[19,26252,26253],{},[219,26254],{"alt":236,"src":26255},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[19,26257,26258],{},"critic网络",[19,26260,26261],{},[219,26262],{"alt":236,"src":26263},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[1826,26265,26266],{"start":261},[1829,26267,26268],{},"网络的训练",[19,26270,26271],{},"网络描述",[19,26273,26274],{},[219,26275],{"alt":236,"src":26276},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[19,26278,26279],{},[219,26280],{"alt":236,"src":26281},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[19,26283,26284],{},"TD算法更新梯度：",[19,26286,26287],{},[219,26288],{"alt":236,"src":26289},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[19,26291,26292],{},"策略网络更新梯度：",[19,26294,26295],{},[219,26296],{"alt":236,"src":26297},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[19,26299,26300],{},"训练整个流程的具体描述：",[19,26302,26303,26306,26307],{},[219,26304],{"alt":236,"src":26305},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[219,26308],{"alt":236,"src":26309},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":236,"searchDepth":250,"depth":250,"links":26311},[26312,26313],{"id":26088,"depth":250,"text":26089},{"id":26198,"depth":250,"text":26199},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":26080,"description":236},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":26320,"title":26321,"body":26322,"description":26329,"extension":2049,"meta":26379,"navigation":2051,"path":26380,"seo":26381,"stem":26382,"__hash__":26383},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":26323,"toc":26375},[26324,26327,26330,26334,26337,26342,26346,26349,26354,26357,26362,26367,26370],[10,26325,26321],{"id":26326},"_5alphago算法",[19,26328,26329],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[14,26331,26333],{"id":26332},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[19,26335,26336],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[19,26338,26339],{},[219,26340],{"alt":236,"src":26341},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[14,26343,26345],{"id":26344},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[19,26347,26348],{},"采用强化学习的方式训练策略网络",[19,26350,26351],{},[219,26352],{"alt":236,"src":26353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[19,26355,26356],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[19,26358,26359],{},[219,26360],{"alt":236,"src":26361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[19,26363,26364],{},[219,26365],{"alt":236,"src":26366},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[19,26368,26369],{},"强化学习训练策略网络的总结：",[19,26371,26372],{},[219,26373],{"alt":236,"src":26374},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":236,"searchDepth":250,"depth":250,"links":26376},[26377,26378],{"id":26332,"depth":250,"text":26333},{"id":26344,"depth":250,"text":26345},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":26321,"description":26329},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":26385,"title":26386,"body":26387,"description":26394,"extension":2049,"meta":26397,"navigation":2051,"path":26398,"seo":26399,"stem":26400,"__hash__":26401},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":26388,"toc":26395},[26389,26392],[10,26390,26386],{"id":26391},"_6价值网络",[19,26393,26394],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":236,"searchDepth":250,"depth":250,"links":26396},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":26386,"description":26394},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":26403,"title":26404,"body":26405,"description":26409,"extension":2049,"meta":26410,"navigation":2051,"path":26411,"seo":26412,"stem":26413,"__hash__":26414},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":26406,"toc":26407},[],{"title":236,"searchDepth":250,"depth":250,"links":26408},[],"记录自己的强化学习笔记。",{"category":25325},"\u002Fwiki\u002F2025-12-04",{"title":26404,"description":26409},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":26416,"title":26417,"body":26418,"description":2048,"extension":2049,"meta":26457,"navigation":2051,"path":26458,"seo":26459,"stem":26460,"__hash__":26461},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":26419,"toc":26455},[26420,26423,26426,26432,26435,26441,26444,26449,26452],[10,26421,26417],{"id":26422},"_1-项目概览与官方资源",[19,26424,26425],{},"官方文档：",[19,26427,26428],{},[254,26429,26430],{"href":26430,"rel":26431},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[25811],[19,26433,26434],{},"官方代码仓库：",[19,26436,26437],{},[254,26438,26439],{"href":26439,"rel":26440},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[25811],[19,26442,26443],{},"复现大体流程：",[19,26445,26446],{},[219,26447],{"alt":236,"src":26448},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[19,26450,26451],{},"本教程的目标是打通这条链路：",[19,26453,26454],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":236,"searchDepth":250,"depth":250,"links":26456},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":26417,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":26463,"title":26464,"body":26465,"description":2048,"extension":2049,"meta":26581,"navigation":2051,"path":26582,"seo":26583,"stem":26584,"__hash__":26585},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":26466,"toc":26576},[26467,26470,26474,26477,26484,26488,26491,26500,26510,26514,26544,26547,26573],[10,26468,26464],{"id":26469},"_2-环境准备与设备连接",[14,26471,26473],{"id":26472},"_21-系统与环境","2.1 系统与环境",[19,26475,26476],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[19,26478,26479,26480,26483],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[23,26481,26482],{},"lerobot"," 依赖。",[14,26485,26487],{"id":26486},"_22-机械臂串口识别","2.2 机械臂串口识别",[19,26489,26490],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[231,26492,26494],{"className":25768,"code":26493,"language":25770,"meta":236,"style":236},"lerobot-find-out\n",[23,26495,26496],{"__ignoreMap":236},[240,26497,26498],{"class":242,"line":243},[240,26499,26493],{"class":436},[19,26501,26502,26503,46,26506,26509],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[23,26504,26505],{},"\u002Fdev\u002FttyACM0",[23,26507,26508],{},"\u002Fdev\u002FttyACM1","）。",[14,26511,26513],{"id":26512},"_23-串口授权","2.3 串口授权",[231,26515,26517],{"className":25768,"code":26516,"language":25770,"meta":236,"style":236},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[23,26518,26519,26533],{"__ignoreMap":236},[240,26520,26521,26524,26527,26530],{"class":242,"line":243},[240,26522,26523],{"class":436},"sudo",[240,26525,26526],{"class":443}," chmod",[240,26528,26529],{"class":264}," 666",[240,26531,26532],{"class":443}," \u002Fdev\u002FttyACM0\n",[240,26534,26535,26537,26539,26541],{"class":242,"line":250},[240,26536,26523],{"class":436},[240,26538,26526],{"class":443},[240,26540,26529],{"class":264},[240,26542,26543],{"class":443}," \u002Fdev\u002FttyACM1\n",[19,26545,26546],{},"说明：",[3100,26548,26549,26554,26560,26570],{},[1829,26550,26551,26553],{},[23,26552,26523],{},"：以 root 权限执行命令。",[1829,26555,26556,26559],{},[23,26557,26558],{},"chmod","：修改设备节点权限。",[1829,26561,26562,26565,26566,26569],{},[23,26563,26564],{},"666","：",[23,26567,26568],{},"rw-rw-rw-","，所有用户可读写。",[1829,26571,26572],{},"串口号必须替换为你机器上的真实端口。",[2019,26574,26575],{},"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":236,"searchDepth":250,"depth":250,"links":26577},[26578,26579,26580],{"id":26472,"depth":250,"text":26473},{"id":26486,"depth":250,"text":26487},{"id":26512,"depth":250,"text":26513},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":26464,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":26587,"title":26588,"body":26589,"description":2048,"extension":2049,"meta":26750,"navigation":2051,"path":26751,"seo":26752,"stem":26753,"__hash__":26754},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":26590,"toc":26746},[26591,26595,26599,26605,26608,26665,26668,26672,26675,26743],[10,26592,26594],{"id":26593},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[14,26596,26598],{"id":26597},"_31-配置电机-id","3.1 配置电机 ID",[19,26600,26601,26602,26604],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[23,26603,1643],{},"，需要改成机械臂链路里不冲突的编号。",[19,26606,26607],{},"方式一：用 LeRobot 命令逐步写入。",[231,26609,26611],{"className":25768,"code":26610,"language":25770,"meta":236,"style":236},"# 主臂舵机配置 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",[23,26612,26613,26618,26626,26633,26638,26642,26647,26653,26660],{"__ignoreMap":236},[240,26614,26615],{"class":242,"line":243},[240,26616,26617],{"class":246},"# 主臂舵机配置 ID\n",[240,26619,26620,26623],{"class":242,"line":250},[240,26621,26622],{"class":436},"lerobot-setup-motors",[240,26624,26625],{"class":264}," \\\n",[240,26627,26628,26631],{"class":242,"line":261},[240,26629,26630],{"class":264},"  --teleop.type=so101_leader",[240,26632,26625],{"class":264},[240,26634,26635],{"class":242,"line":277},[240,26636,26637],{"class":264},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[240,26639,26640],{"class":242,"line":294},[240,26641,4353],{"emptyLinePlaceholder":2051},[240,26643,26644],{"class":242,"line":309},[240,26645,26646],{"class":246},"# 从臂舵机配置 ID\n",[240,26648,26649,26651],{"class":242,"line":529},[240,26650,26622],{"class":436},[240,26652,26625],{"class":264},[240,26654,26655,26658],{"class":242,"line":549},[240,26656,26657],{"class":264},"  --robot.type=so101_follower",[240,26659,26625],{"class":264},[240,26661,26662],{"class":242,"line":569},[240,26663,26664],{"class":264},"  --robot.port=\u002Fdev\u002FttyACM1\n",[19,26666,26667],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[14,26669,26671],{"id":26670},"_32-机械臂校准","3.2 机械臂校准",[19,26673,26674],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[231,26676,26678],{"className":25768,"code":26677,"language":25770,"meta":236,"style":236},"# 主臂校准\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",[23,26679,26680,26685,26692,26698,26705,26710,26714,26719,26725,26731,26738],{"__ignoreMap":236},[240,26681,26682],{"class":242,"line":243},[240,26683,26684],{"class":246},"# 主臂校准\n",[240,26686,26687,26690],{"class":242,"line":250},[240,26688,26689],{"class":436},"lerobot-calibrate",[240,26691,26625],{"class":264},[240,26693,26694,26696],{"class":242,"line":261},[240,26695,26630],{"class":264},[240,26697,26625],{"class":264},[240,26699,26700,26703],{"class":242,"line":277},[240,26701,26702],{"class":264},"  --teleop.port=\u002Fdev\u002FttyACM0",[240,26704,26625],{"class":264},[240,26706,26707],{"class":242,"line":294},[240,26708,26709],{"class":264},"  --teleop.id=my_awesome_leader_arm\n",[240,26711,26712],{"class":242,"line":309},[240,26713,4353],{"emptyLinePlaceholder":2051},[240,26715,26716],{"class":242,"line":529},[240,26717,26718],{"class":246},"# 从臂校准\n",[240,26720,26721,26723],{"class":242,"line":549},[240,26722,26689],{"class":436},[240,26724,26625],{"class":264},[240,26726,26727,26729],{"class":242,"line":569},[240,26728,26657],{"class":264},[240,26730,26625],{"class":264},[240,26732,26733,26736],{"class":242,"line":589},[240,26734,26735],{"class":264},"  --robot.port=\u002Fdev\u002FttyACM1",[240,26737,26625],{"class":264},[240,26739,26740],{"class":242,"line":715},[240,26741,26742],{"class":264},"  --robot.id=my_awesome_follower_arm\n",[2019,26744,26745],{},"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":236,"searchDepth":250,"depth":250,"links":26747},[26748,26749],{"id":26597,"depth":250,"text":26598},{"id":26670,"depth":250,"text":26671},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":26588,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":26756,"title":26757,"body":26758,"description":2048,"extension":2049,"meta":26949,"navigation":2051,"path":26950,"seo":26951,"stem":26952,"__hash__":26953},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":26759,"toc":26945},[26760,26763,26767,26814,26818,26831,26894,26897,26942],[10,26761,26757],{"id":26762},"_4-遥操与相机接入",[14,26764,26766],{"id":26765},"_41-不带相机遥操","4.1 不带相机遥操",[231,26768,26770],{"className":25768,"code":26769,"language":25770,"meta":236,"style":236},"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",[23,26771,26772,26779,26785,26791,26798,26804,26810],{"__ignoreMap":236},[240,26773,26774,26777],{"class":242,"line":243},[240,26775,26776],{"class":436},"lerobot-teleoperate",[240,26778,26625],{"class":264},[240,26780,26781,26783],{"class":242,"line":250},[240,26782,26657],{"class":264},[240,26784,26625],{"class":264},[240,26786,26787,26789],{"class":242,"line":261},[240,26788,26735],{"class":264},[240,26790,26625],{"class":264},[240,26792,26793,26796],{"class":242,"line":277},[240,26794,26795],{"class":264},"  --robot.id=my_awesome_follower_arm",[240,26797,26625],{"class":264},[240,26799,26800,26802],{"class":242,"line":294},[240,26801,26630],{"class":264},[240,26803,26625],{"class":264},[240,26805,26806,26808],{"class":242,"line":309},[240,26807,26702],{"class":264},[240,26809,26625],{"class":264},[240,26811,26812],{"class":242,"line":529},[240,26813,26709],{"class":264},[14,26815,26817],{"id":26816},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[231,26819,26821],{"className":25768,"code":26820,"language":25770,"meta":236,"style":236},"lerobot-find-cameras opencv\n",[23,26822,26823],{"__ignoreMap":236},[240,26824,26825,26828],{"class":242,"line":243},[240,26826,26827],{"class":436},"lerobot-find-cameras",[240,26829,26830],{"class":443}," opencv\n",[231,26832,26834],{"className":25768,"code":26833,"language":25770,"meta":236,"style":236},"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",[23,26835,26836,26842,26848,26854,26860,26870,26876,26882,26889],{"__ignoreMap":236},[240,26837,26838,26840],{"class":242,"line":243},[240,26839,26776],{"class":436},[240,26841,26625],{"class":264},[240,26843,26844,26846],{"class":242,"line":250},[240,26845,26657],{"class":264},[240,26847,26625],{"class":264},[240,26849,26850,26852],{"class":242,"line":261},[240,26851,26735],{"class":264},[240,26853,26625],{"class":264},[240,26855,26856,26858],{"class":242,"line":277},[240,26857,26795],{"class":264},[240,26859,26625],{"class":264},[240,26861,26862,26865,26868],{"class":242,"line":294},[240,26863,26864],{"class":264},"  --robot.cameras=",[240,26866,26867],{"class":443},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[240,26869,26625],{"class":264},[240,26871,26872,26874],{"class":242,"line":309},[240,26873,26630],{"class":264},[240,26875,26625],{"class":264},[240,26877,26878,26880],{"class":242,"line":529},[240,26879,26702],{"class":264},[240,26881,26625],{"class":264},[240,26883,26884,26887],{"class":242,"line":549},[240,26885,26886],{"class":264},"  --teleop.id=my_awesome_leader_arm",[240,26888,26625],{"class":264},[240,26890,26891],{"class":242,"line":569},[240,26892,26893],{"class":264},"  --display_data=true\n",[19,26895,26896],{},"相机参数说明：",[3100,26898,26899,26905,26911,26920,26930,26936],{},[1829,26900,26901,26904],{},[23,26902,26903],{},"front","：相机名称。",[1829,26906,26907,26910],{},[23,26908,26909],{},"type: opencv","：相机驱动类型。",[1829,26912,26913,26916,26917,26509],{},[23,26914,26915],{},"index_or_path","：设备编号或设备路径（如 ",[23,26918,26919],{},"\u002Fdev\u002Fvideo4",[1829,26921,26922,26925,26926,26929],{},[23,26923,26924],{},"width"," \u002F ",[23,26927,26928],{},"height","：图像分辨率。",[1829,26931,26932,26935],{},[23,26933,26934],{},"fps","：采样帧率。",[1829,26937,26938,26941],{},[23,26939,26940],{},"--display_data=true","：启用实时可视化。",[2019,26943,26944],{},"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":236,"searchDepth":250,"depth":250,"links":26946},[26947,26948],{"id":26765,"depth":250,"text":26766},{"id":26816,"depth":250,"text":26817},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":26757,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":26955,"title":26956,"body":26957,"description":2048,"extension":2049,"meta":27129,"navigation":2051,"path":27130,"seo":27131,"stem":27132,"__hash__":27133},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":26958,"toc":27124},[26959,26963,26967,26972,26977,26980,27022,27028,27032,27081,27086,27090,27093,27101,27106,27111,27116,27121],[10,26960,26962],{"id":26961},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[14,26964,26966],{"id":26965},"_51-生成访问令牌","5.1 生成访问令牌",[19,26968,26969],{},[219,26970],{"alt":236,"src":26971},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[19,26973,26974],{},[219,26975],{"alt":236,"src":26976},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[19,26978,26979],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[231,26981,26983],{"className":25768,"code":26982,"language":25770,"meta":236,"style":236},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[23,26984,26985,26998],{"__ignoreMap":236},[240,26986,26987,26990,26993,26995],{"class":242,"line":243},[240,26988,26989],{"class":288},"export",[240,26991,26992],{"class":257}," HF_TOKEN",[240,26994,440],{"class":288},[240,26996,26997],{"class":443},"\"your_huggingface_token\"\n",[240,26999,27000,27003,27006,27009,27012,27014,27017,27019],{"class":242,"line":250},[240,27001,27002],{"class":436},"hf",[240,27004,27005],{"class":443}," auth",[240,27007,27008],{"class":443}," login",[240,27010,27011],{"class":264}," --token",[240,27013,11675],{"class":443},[240,27015,27016],{"class":257},"$HF_TOKEN",[240,27018,2355],{"class":443},[240,27020,27021],{"class":264}," --add-to-git-credential\n",[19,27023,27024,27027],{},[23,27025,27026],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[14,27029,27031],{"id":27030},"_52-验证登录","5.2 验证登录",[231,27033,27035],{"className":25768,"code":27034,"language":25770,"meta":236,"style":236},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[23,27036,27037,27068],{"__ignoreMap":236},[240,27038,27039,27042,27044,27047,27049,27051,27054,27057,27060,27063,27066],{"class":242,"line":243},[240,27040,27041],{"class":257},"HF_USER",[240,27043,440],{"class":288},[240,27045,27046],{"class":257},"$(",[240,27048,27002],{"class":436},[240,27050,27005],{"class":443},[240,27052,27053],{"class":443}," whoami",[240,27055,27056],{"class":288}," |",[240,27058,27059],{"class":436}," head",[240,27061,27062],{"class":264}," -n",[240,27064,27065],{"class":264}," 1",[240,27067,2129],{"class":257},[240,27069,27070,27073,27075,27078],{"class":242,"line":250},[240,27071,27072],{"class":264},"echo",[240,27074,11675],{"class":443},[240,27076,27077],{"class":257},"$HF_USER",[240,27079,27080],{"class":443},"\"\n",[19,27082,27083],{},[219,27084],{"alt":236,"src":27085},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[14,27087,27089],{"id":27088},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[19,27091,27092],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[3100,27094,27095,27098],{},[1829,27096,27097],{},"Dataset Repo（用于上传演示数据）",[1829,27099,27100],{},"Model Repo（用于上传训练后的 ACT 权重）",[19,27102,27103],{},[219,27104],{"alt":236,"src":27105},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[19,27107,27108],{},[219,27109],{"alt":236,"src":27110},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[19,27112,27113],{},[219,27114],{"alt":236,"src":27115},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[19,27117,27118],{},[219,27119],{"alt":236,"src":27120},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[2019,27122,27123],{},"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":236,"searchDepth":250,"depth":250,"links":27125},[27126,27127,27128],{"id":26965,"depth":250,"text":26966},{"id":27030,"depth":250,"text":27031},{"id":27088,"depth":250,"text":27089},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":26956,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":27135,"title":27136,"body":27137,"description":2048,"extension":2049,"meta":27334,"navigation":2051,"path":27335,"seo":27336,"stem":27337,"__hash__":27338},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":27138,"toc":27329},[27139,27143,27147,27243,27251,27256,27260,27276,27279,27283,27326],[10,27140,27142],{"id":27141},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[14,27144,27146],{"id":27145},"_61-录制示教数据","6.1 录制示教数据",[231,27148,27150],{"className":25768,"code":27149,"language":25770,"meta":236,"style":236},"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",[23,27151,27152,27159,27165,27171,27177,27186,27192,27198,27204,27211,27221,27228,27238],{"__ignoreMap":236},[240,27153,27154,27157],{"class":242,"line":243},[240,27155,27156],{"class":436},"lerobot-record",[240,27158,26625],{"class":264},[240,27160,27161,27163],{"class":242,"line":250},[240,27162,26657],{"class":264},[240,27164,26625],{"class":264},[240,27166,27167,27169],{"class":242,"line":261},[240,27168,26735],{"class":264},[240,27170,26625],{"class":264},[240,27172,27173,27175],{"class":242,"line":277},[240,27174,26795],{"class":264},[240,27176,26625],{"class":264},[240,27178,27179,27181,27184],{"class":242,"line":294},[240,27180,26864],{"class":264},[240,27182,27183],{"class":443},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[240,27185,26625],{"class":264},[240,27187,27188,27190],{"class":242,"line":309},[240,27189,26630],{"class":264},[240,27191,26625],{"class":264},[240,27193,27194,27196],{"class":242,"line":529},[240,27195,26702],{"class":264},[240,27197,26625],{"class":264},[240,27199,27200,27202],{"class":242,"line":549},[240,27201,26886],{"class":264},[240,27203,26625],{"class":264},[240,27205,27206,27209],{"class":242,"line":569},[240,27207,27208],{"class":264},"  --display_data=true",[240,27210,26625],{"class":264},[240,27212,27213,27216,27219],{"class":242,"line":589},[240,27214,27215],{"class":264},"  --dataset.repo_id=",[240,27217,27218],{"class":443},"\"Embodied-AI-6\u002Fso101_test\"",[240,27220,26625],{"class":264},[240,27222,27223,27226],{"class":242,"line":715},[240,27224,27225],{"class":264},"  --dataset.num_episodes=10",[240,27227,26625],{"class":264},[240,27229,27230,27233,27236],{"class":242,"line":727},[240,27231,27232],{"class":264},"  --dataset.single_task=",[240,27234,27235],{"class":443},"\"Grab the green cube\"",[240,27237,26625],{"class":264},[240,27239,27240],{"class":242,"line":1730},[240,27241,27242],{"class":264},"  --resume=true\n",[3100,27244,27245],{},[1829,27246,27247,27250],{},[23,27248,27249],{},"--resume=true","：已有同一数据集时继续追加 episode。",[19,27252,27253],{},[219,27254],{"alt":236,"src":27255},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[14,27257,27259],{"id":27258},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[231,27261,27263],{"className":25768,"code":27262,"language":25770,"meta":236,"style":236},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[23,27264,27265],{"__ignoreMap":236},[240,27266,27267,27270,27273],{"class":242,"line":243},[240,27268,27269],{"class":436},"rm",[240,27271,27272],{"class":264}," -rf",[240,27274,27275],{"class":443}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[19,27277,27278],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[14,27280,27282],{"id":27281},"_63-回放指定-episode","6.3 回放指定 episode",[231,27284,27286],{"className":25768,"code":27285,"language":25770,"meta":236,"style":236},"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",[23,27287,27288,27295,27301,27307,27313,27321],{"__ignoreMap":236},[240,27289,27290,27293],{"class":242,"line":243},[240,27291,27292],{"class":436},"lerobot-replay",[240,27294,26625],{"class":264},[240,27296,27297,27299],{"class":242,"line":250},[240,27298,26657],{"class":264},[240,27300,26625],{"class":264},[240,27302,27303,27305],{"class":242,"line":261},[240,27304,26735],{"class":264},[240,27306,26625],{"class":264},[240,27308,27309,27311],{"class":242,"line":277},[240,27310,26795],{"class":264},[240,27312,26625],{"class":264},[240,27314,27315,27317,27319],{"class":242,"line":294},[240,27316,27215],{"class":264},[240,27318,27218],{"class":443},[240,27320,26625],{"class":264},[240,27322,27323],{"class":242,"line":309},[240,27324,27325],{"class":264},"  --dataset.episode=0\n",[2019,27327,27328],{},"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":236,"searchDepth":250,"depth":250,"links":27330},[27331,27332,27333],{"id":27145,"depth":250,"text":27146},{"id":27258,"depth":250,"text":27259},{"id":27281,"depth":250,"text":27282},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":27136,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":27340,"title":27341,"body":27342,"description":2048,"extension":2049,"meta":27470,"navigation":2051,"path":27471,"seo":27472,"stem":27473,"__hash__":27474},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":27343,"toc":27468},[27344,27348,27411,27414,27461,27466],[10,27345,27347],{"id":27346},"_7-act-模型训练","7. ACT 模型训练",[231,27349,27351],{"className":25768,"code":27350,"language":25770,"meta":236,"style":236},"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",[23,27352,27353,27360,27368,27375,27382,27389,27396,27403],{"__ignoreMap":236},[240,27354,27355,27358],{"class":242,"line":243},[240,27356,27357],{"class":436},"lerobot-train",[240,27359,26625],{"class":264},[240,27361,27362,27364,27366],{"class":242,"line":250},[240,27363,27215],{"class":264},[240,27365,27218],{"class":443},[240,27367,26625],{"class":264},[240,27369,27370,27373],{"class":242,"line":261},[240,27371,27372],{"class":264},"  --policy.type=act",[240,27374,26625],{"class":264},[240,27376,27377,27380],{"class":242,"line":277},[240,27378,27379],{"class":264},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[240,27381,26625],{"class":264},[240,27383,27384,27387],{"class":242,"line":294},[240,27385,27386],{"class":264},"  --job_name=act_so101_test",[240,27388,26625],{"class":264},[240,27390,27391,27394],{"class":242,"line":309},[240,27392,27393],{"class":264},"  --policy.device=cuda",[240,27395,26625],{"class":264},[240,27397,27398,27401],{"class":242,"line":529},[240,27399,27400],{"class":264},"  --wandb.enable=false",[240,27402,26625],{"class":264},[240,27404,27405,27408],{"class":242,"line":549},[240,27406,27407],{"class":264},"  --policy.repo_id=",[240,27409,27410],{"class":443},"\"Embodied-AI-6\u002Flerobot_new\"\n",[19,27412,27413],{},"参数说明：",[3100,27415,27416,27422,27428,27434,27440,27449,27455],{},[1829,27417,27418,27421],{},[23,27419,27420],{},"--dataset.repo_id","：训练数据集仓库。",[1829,27423,27424,27427],{},[23,27425,27426],{},"--policy.type=act","：策略模型类型为 ACT。",[1829,27429,27430,27433],{},[23,27431,27432],{},"--output_dir","：本地训练输出目录。",[1829,27435,27436,27439],{},[23,27437,27438],{},"--job_name","：训练任务名称。",[1829,27441,27442,27445,27446,26509],{},[23,27443,27444],{},"--policy.device","：训练设备（如 ",[23,27447,27448],{},"cuda",[1829,27450,27451,27454],{},[23,27452,27453],{},"--wandb.enable","：是否启用 WandB 可视化。",[1829,27456,27457,27460],{},[23,27458,27459],{},"--policy.repo_id","：训练后模型推送目标仓库。",[19,27462,27463],{},[219,27464],{"alt":236,"src":27465},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[2019,27467,27328],{},{"title":236,"searchDepth":250,"depth":250,"links":27469},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":27341,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":27476,"title":27477,"body":27478,"description":2048,"extension":2049,"meta":27565,"navigation":2051,"path":27566,"seo":27567,"stem":27568,"__hash__":27569},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":27479,"toc":27563},[27480,27483,27486,27553,27561],[10,27481,27477],{"id":27482},"_8-策略部署与自动采集",[19,27484,27485],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[231,27487,27489],{"className":25768,"code":27488,"language":25770,"meta":236,"style":236},"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",[23,27490,27491,27497,27503,27509,27517,27523,27530,27538,27546],{"__ignoreMap":236},[240,27492,27493,27495],{"class":242,"line":243},[240,27494,27156],{"class":436},[240,27496,26625],{"class":264},[240,27498,27499,27501],{"class":242,"line":250},[240,27500,26657],{"class":264},[240,27502,26625],{"class":264},[240,27504,27505,27507],{"class":242,"line":261},[240,27506,26735],{"class":264},[240,27508,26625],{"class":264},[240,27510,27511,27513,27515],{"class":242,"line":277},[240,27512,26864],{"class":264},[240,27514,27183],{"class":443},[240,27516,26625],{"class":264},[240,27518,27519,27521],{"class":242,"line":294},[240,27520,26795],{"class":264},[240,27522,26625],{"class":264},[240,27524,27525,27528],{"class":242,"line":309},[240,27526,27527],{"class":264},"  --display_data=false",[240,27529,26625],{"class":264},[240,27531,27532,27534,27536],{"class":242,"line":529},[240,27533,27215],{"class":264},[240,27535,27218],{"class":443},[240,27537,26625],{"class":264},[240,27539,27540,27542,27544],{"class":242,"line":549},[240,27541,27232],{"class":264},[240,27543,27235],{"class":443},[240,27545,26625],{"class":264},[240,27547,27548,27551],{"class":242,"line":569},[240,27549,27550],{"class":264},"  --policy.path=",[240,27552,27410],{"class":443},[3100,27554,27555],{},[1829,27556,27557,27560],{},[23,27558,27559],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[2019,27562,27328],{},{"title":236,"searchDepth":250,"depth":250,"links":27564},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":27477,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":27571,"title":27572,"body":27573,"description":2048,"extension":2049,"meta":27602,"navigation":2051,"path":27603,"seo":27604,"stem":27605,"__hash__":27606},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":27574,"toc":27600},[27575,27579,27582,27588,27591,27597],[10,27576,27578],{"id":27577},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[19,27580,27581],{},"项目地址：",[19,27583,27584],{},[254,27585,27586],{"href":27586,"rel":27587},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[25811],[19,27589,27590],{},"参考教程：",[19,27592,27593],{},[254,27594,27595],{"href":27595,"rel":27596},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[25811],[19,27598,27599],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":236,"searchDepth":250,"depth":250,"links":27601},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":27572,"description":2048},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":27608,"title":27609,"body":27610,"description":27614,"extension":2049,"meta":27615,"navigation":2051,"path":27616,"seo":27617,"stem":27618,"__hash__":27619},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":27611,"toc":27612},[],{"title":236,"searchDepth":250,"depth":250,"links":27613},[],"act复现",{"category":25325},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":27609,"description":27614},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":27621,"title":27622,"body":27623,"description":236,"extension":2049,"meta":27924,"navigation":2051,"path":27925,"seo":27926,"stem":27927,"__hash__":27928},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":27624,"toc":27916},[27625,27628,27632,27642,27649,27656,27659,27666,27669,27672,27676,27688,27692,27738,27741,27744,27747,27750,27753,27757,27795,27801,27805,27858,27863,27866,27869,27874,27877,27882,27885,27888,27892,27895,27898,27902],[10,27626,27622],{"id":27627},"_1简介",[32,27629,27631],{"id":27630},"_11什么是-docker","1.1什么是 Docker？",[19,27633,27634,27635,27638,27639],{},"Docker 是一个开源的 ",[68,27636,27637],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[68,27640,27641],{},"一次构建，到处运行。",[19,27643,27644,27645,27648],{},"“ ",[68,27646,27647],{},"一次构建，到处运行"," ”也就是说：",[1826,27650,27651],{},[1829,27652,27653],{},[68,27654,27655],{},"之前：",[19,27657,27658],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[1826,27660,27661],{},[1829,27662,27663],{},[68,27664,27665],{},"使用docker后：",[19,27667,27668],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[19,27670,27671],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[32,27673,27675],{"id":27674},"_12它是怎么工作的","1.2.它是怎么工作的？",[3100,27677,27678,27681],{},[1829,27679,27680],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[1829,27682,27683,27684,27687],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[68,27685,27686],{},"无论在哪运行都一样稳定"," 。",[32,27689,27691],{"id":27690},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[802,27693,27694,27704],{},[805,27695,27696],{},[808,27697,27698,27701],{},[811,27699,27700],{"align":813},"概念",[811,27702,27703],{"align":813},"解释",[819,27705,27706,27714,27722,27730],{},[808,27707,27708,27711],{},[824,27709,27710],{"align":813},"镜像",[824,27712,27713],{"align":813},"Image，运行容器的模板，像是一个应用快照",[808,27715,27716,27719],{},[824,27717,27718],{"align":813},"容器",[824,27720,27721],{"align":813},"Container，运行中的镜像实例，有自己的文件系统、网络等",[808,27723,27724,27727],{},[824,27725,27726],{"align":813},"Dockerfile",[824,27728,27729],{"align":813},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[808,27731,27732,27735],{},[824,27733,27734],{"align":813},"仓库",[824,27736,27737],{"align":813},"Registry，存放镜像的地方，比如 Docker Hub",[19,27739,27740],{},"抽象化理解:",[19,27742,27743],{},"Docker镜像≈C++类",[19,27745,27746],{},"Docker容器≈C++类实例(即对象)",[19,27748,27749],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[19,27751,27752],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[32,27754,27756],{"id":27755},"_14类比理解","1.4.类比理解",[802,27758,27759,27769],{},[805,27760,27761],{},[808,27762,27763,27766],{},[811,27764,27765],{"align":813},"传统部署",[811,27767,27768],{"align":813},"Docker部署",[819,27770,27771,27779,27787],{},[808,27772,27773,27776],{},[824,27774,27775],{"align":813},"手动安装依赖、调试版本不一致问题",[824,27777,27778],{"align":813},"一次打包环境和代码",[808,27780,27781,27784],{},[824,27782,27783],{"align":813},"程序“裸奔”跑在系统上",[824,27785,27786],{"align":813},"程序“穿着容器”隔离运行",[808,27788,27789,27792],{},[824,27790,27791],{"align":813},"容易“在我电脑上能跑”",[824,27793,27794],{"align":813},"保证“无论在哪都能跑”",[19,27796,27797,27798],{},"就像快递包裹： ",[68,27799,27800],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[32,27802,27804],{"id":27803},"_15docker-的核心优势","1.5.Docker 的核心优势",[802,27806,27807,27816],{},[805,27808,27809],{},[808,27810,27811,27814],{},[811,27812,27813],{"align":813},"优势",[811,27815,1057],{"align":813},[819,27817,27818,27826,27834,27842,27850],{},[808,27819,27820,27823],{},[824,27821,27822],{"align":813},"轻量级",[824,27824,27825],{"align":813},"基于系统内核共享，启动速度快，占资源少",[808,27827,27828,27831],{},[824,27829,27830],{"align":813},"跨平台",[824,27832,27833],{"align":813},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[808,27835,27836,27839],{},[824,27837,27838],{"align":813},"易于迁移部署",[824,27840,27841],{"align":813},"应用和环境一起封装，不怕依赖不一致",[808,27843,27844,27847],{},[824,27845,27846],{"align":813},"易于版本控制",[824,27848,27849],{"align":813},"镜像版本可控，支持回滚",[808,27851,27852,27855],{},[824,27853,27854],{"align":813},"生态丰富",[824,27856,27857],{"align":813},"Docker Hub 上有成千上万的现成镜像可用",[1826,27859,27860],{},[1829,27861,27862],{},"在Linux上可以几乎实现无性能损失。",[19,27864,27865],{},"docker里的发行版和本机共用Linux内核。",[19,27867,27868],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[1826,27870,27871],{},[1829,27872,27873],{},"可以快速部署在绝大多数Linux发行版",[19,27875,27876],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[1826,27878,27879],{},[1829,27880,27881],{},"配置环境简单",[19,27883,27884],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[19,27886,27887],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[1826,27889,27890],{},[1829,27891,27854],{},[19,27893,27894],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[19,27896,27897],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[32,27899,27901],{"id":27900},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[3100,27903,27904,27907,27910,27913],{},[1829,27905,27906],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[1829,27908,27909],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[1829,27911,27912],{},"微服务架构：每个服务一个容器，灵活组合",[1829,27914,27915],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":236,"searchDepth":250,"depth":250,"links":27917},[27918,27919,27920,27921,27922,27923],{"id":27630,"depth":261,"text":27631},{"id":27674,"depth":261,"text":27675},{"id":27690,"depth":261,"text":27691},{"id":27755,"depth":261,"text":27756},{"id":27803,"depth":261,"text":27804},{"id":27900,"depth":261,"text":27901},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":27622,"description":236},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":27930,"title":27931,"body":27932,"description":236,"extension":2049,"meta":28665,"navigation":2051,"path":28666,"seo":28667,"stem":28668,"__hash__":28669},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":27933,"toc":28660},[27934,27937,27941,27944,27947,27953,27959,27963,27972,27975,28032,28035,28086,28089,28172,28175,28212,28216,28227,28240,28247,28250,28330,28333,28383,28386,28409,28413,28420,28423,28439,28445,28448,28464,28470,28473,28489,28503,28509,28529,28535,28538,28550,28556,28559,28573,28579,28582,28602,28607,28610,28613,28617,28620,28623,28626,28633,28636,28639,28642,28647,28652,28657],[10,27935,27931],{"id":27936},"_2安装docker",[32,27938,27940],{"id":27939},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[19,27942,27943],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[19,27945,27946],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[19,27948,27949],{},[254,27950,27951],{"href":27951,"rel":27952},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[25811],[19,27954,27955],{},[254,27956,27957],{"href":27957,"rel":27958},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[25811],[23945,27960,27962],{"id":27961},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[19,27964,27965,27966,27971],{},"以下内容根据 ",[254,27967,27970],{"href":27968,"rel":27969},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[25811],"官方文档"," 修改而来。",[19,27973,27974],{},"如果你过去安装过 docker，先删掉：",[231,27976,27978],{"className":25768,"code":27977,"language":25770,"meta":236,"style":236},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[23,27979,27980],{"__ignoreMap":236},[240,27981,27982,27984,27987,27990,27993,27996,27999,28002,28005,28008,28011,28014,28017,28020,28023,28026,28029],{"class":242,"line":243},[240,27983,4977],{"class":288},[240,27985,27986],{"class":257}," pkg ",[240,27988,27989],{"class":288},"in",[240,27991,27992],{"class":443}," docker.io",[240,27994,27995],{"class":443}," docker-doc",[240,27997,27998],{"class":443}," docker-compose",[240,28000,28001],{"class":443}," docker-compose-v2",[240,28003,28004],{"class":443}," podman-docker",[240,28006,28007],{"class":443}," containerd",[240,28009,28010],{"class":443}," runc",[240,28012,28013],{"class":257},"; ",[240,28015,28016],{"class":288},"do",[240,28018,28019],{"class":436}," sudo",[240,28021,28022],{"class":443}," apt-get",[240,28024,28025],{"class":443}," remove",[240,28027,28028],{"class":257}," $pkg; ",[240,28030,28031],{"class":288},"done\n",[19,28033,28034],{},"首先安装依赖和GPG：",[231,28036,28040],{"className":28037,"code":28038,"language":28039,"meta":236,"style":236},"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",[23,28041,28042,28047,28052,28057,28062,28067,28072,28076,28081],{"__ignoreMap":236},[240,28043,28044],{"class":242,"line":243},[240,28045,28046],{},"# Add Docker's official GPG key:\n",[240,28048,28049],{"class":242,"line":250},[240,28050,28051],{},"sudo apt-get update\n",[240,28053,28054],{"class":242,"line":261},[240,28055,28056],{},"sudo apt-get install ca-certificates curl\n",[240,28058,28059],{"class":242,"line":277},[240,28060,28061],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[240,28063,28064],{"class":242,"line":294},[240,28065,28066],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[240,28068,28069],{"class":242,"line":309},[240,28070,28071],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[240,28073,28074],{"class":242,"line":529},[240,28075,4353],{"emptyLinePlaceholder":2051},[240,28077,28078],{"class":242,"line":549},[240,28079,28080],{},"# 如果上面这行报错就弄下面这行\n",[240,28082,28083],{"class":242,"line":569},[240,28084,28085],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[19,28087,28088],{},"信任 Docker 的 GPG 公钥并添加仓库：",[231,28090,28092],{"className":25768,"code":28091,"language":25770,"meta":236,"style":236},"# 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",[23,28093,28094,28099,28105,28122,28155],{"__ignoreMap":236},[240,28095,28096],{"class":242,"line":243},[240,28097,28098],{"class":246},"# Add the repository to Apt sources:\n",[240,28100,28101,28103],{"class":242,"line":250},[240,28102,27072],{"class":264},[240,28104,26625],{"class":264},[240,28106,28107,28110,28113,28116,28119],{"class":242,"line":261},[240,28108,28109],{"class":443},"  \"deb [arch=$(",[240,28111,28112],{"class":436},"dpkg",[240,28114,28115],{"class":264}," --print-architecture",[240,28117,28118],{"class":443},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[240,28120,28121],{"class":264},"\\\n",[240,28123,28124,28127,28129,28131,28134,28137,28139,28141,28144,28146,28148,28151,28153],{"class":242,"line":277},[240,28125,28126],{"class":443},"  \"",[240,28128,27046],{"class":257},[240,28130,2657],{"class":264},[240,28132,28133],{"class":443}," \u002Fetc\u002Fos-release",[240,28135,28136],{"class":257}," && ",[240,28138,27072],{"class":264},[240,28140,11675],{"class":443},[240,28142,28143],{"class":257},"$VERSION_CODENAME",[240,28145,2355],{"class":443},[240,28147,2529],{"class":257},[240,28149,28150],{"class":443},"\" stable\"",[240,28152,27056],{"class":288},[240,28154,26625],{"class":264},[240,28156,28157,28160,28163,28166,28169],{"class":242,"line":294},[240,28158,28159],{"class":436},"  sudo",[240,28161,28162],{"class":443}," tee",[240,28164,28165],{"class":443}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[240,28167,28168],{"class":288}," >",[240,28170,28171],{"class":443}," \u002Fdev\u002Fnull\n",[19,28173,28174],{},"最后安装",[231,28176,28178],{"className":25768,"code":28177,"language":25770,"meta":236,"style":236},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[23,28179,28180,28189],{"__ignoreMap":236},[240,28181,28182,28184,28186],{"class":242,"line":243},[240,28183,26523],{"class":436},[240,28185,28022],{"class":443},[240,28187,28188],{"class":443}," update\n",[240,28190,28191,28193,28195,28197,28200,28203,28206,28209],{"class":242,"line":250},[240,28192,26523],{"class":436},[240,28194,28022],{"class":443},[240,28196,25780],{"class":443},[240,28198,28199],{"class":443}," docker-ce",[240,28201,28202],{"class":443}," docker-ce-cli",[240,28204,28205],{"class":443}," containerd.io",[240,28207,28208],{"class":443}," docker-buildx-plugin",[240,28210,28211],{"class":443}," docker-compose-plugin\n",[23945,28213,28215],{"id":28214},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[19,28217,28218,28219,28222,28223,28226],{},"查看自己自己包管理工具版本（dnf是 ",[68,28220,28221],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[68,28224,28225],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[231,28228,28230],{"className":25768,"code":28229,"language":25770,"meta":236,"style":236},"dnf --version\n",[23,28231,28232],{"__ignoreMap":236},[240,28233,28234,28237],{"class":242,"line":243},[240,28235,28236],{"class":436},"dnf",[240,28238,28239],{"class":264}," --version\n",[19,28241,27965,28242,28246],{},[254,28243,27970],{"href":28244,"rel":28245},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[25811]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[19,28248,28249],{},"如果你之前安装过 docker，请先删掉",[231,28251,28253],{"className":25768,"code":28252,"language":25770,"meta":236,"style":236},"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",[23,28254,28255,28269,28276,28283,28290,28297,28304,28311,28318,28325],{"__ignoreMap":236},[240,28256,28257,28259,28262,28264,28267],{"class":242,"line":243},[240,28258,26523],{"class":436},[240,28260,28261],{"class":443}," dnf",[240,28263,28025],{"class":443},[240,28265,28266],{"class":443}," docker",[240,28268,26625],{"class":264},[240,28270,28271,28274],{"class":242,"line":250},[240,28272,28273],{"class":443},"                  docker-client",[240,28275,26625],{"class":264},[240,28277,28278,28281],{"class":242,"line":261},[240,28279,28280],{"class":443},"                  docker-client-latest",[240,28282,26625],{"class":264},[240,28284,28285,28288],{"class":242,"line":277},[240,28286,28287],{"class":443},"                  docker-common",[240,28289,26625],{"class":264},[240,28291,28292,28295],{"class":242,"line":294},[240,28293,28294],{"class":443},"                  docker-latest",[240,28296,26625],{"class":264},[240,28298,28299,28302],{"class":242,"line":309},[240,28300,28301],{"class":443},"                  docker-latest-logrotate",[240,28303,26625],{"class":264},[240,28305,28306,28309],{"class":242,"line":529},[240,28307,28308],{"class":443},"                  docker-logrotate",[240,28310,26625],{"class":264},[240,28312,28313,28316],{"class":242,"line":549},[240,28314,28315],{"class":443},"                  docker-selinux",[240,28317,26625],{"class":264},[240,28319,28320,28323],{"class":242,"line":569},[240,28321,28322],{"class":443},"                  docker-engine-selinux",[240,28324,26625],{"class":264},[240,28326,28327],{"class":242,"line":589},[240,28328,28329],{"class":443},"                  docker-engine\n",[19,28331,28332],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[231,28334,28336],{"className":25768,"code":28335,"language":25770,"meta":236,"style":236},"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",[23,28337,28338,28352,28367],{"__ignoreMap":236},[240,28339,28340,28342,28344,28347,28349],{"class":242,"line":243},[240,28341,26523],{"class":436},[240,28343,28261],{"class":443},[240,28345,28346],{"class":264}," -y",[240,28348,25780],{"class":443},[240,28350,28351],{"class":443}," dnf-plugins-core\n",[240,28353,28354,28356,28358,28361,28364],{"class":242,"line":250},[240,28355,26523],{"class":436},[240,28357,28261],{"class":443},[240,28359,28360],{"class":443}," config-manager",[240,28362,28363],{"class":443}," addrepo",[240,28365,28366],{"class":264}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[240,28368,28369,28371,28374,28377,28380],{"class":242,"line":261},[240,28370,26523],{"class":436},[240,28372,28373],{"class":443}," sed",[240,28375,28376],{"class":264}," -i",[240,28378,28379],{"class":443}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[240,28381,28382],{"class":443}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[19,28384,28385],{},"最后安装：",[231,28387,28389],{"className":25768,"code":28388,"language":25770,"meta":236,"style":236},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[23,28390,28391],{"__ignoreMap":236},[240,28392,28393,28395,28397,28399,28401,28403,28405,28407],{"class":242,"line":243},[240,28394,26523],{"class":436},[240,28396,28261],{"class":443},[240,28398,25780],{"class":443},[240,28400,28199],{"class":443},[240,28402,28202],{"class":443},[240,28404,28205],{"class":443},[240,28406,28208],{"class":443},[240,28408,28211],{"class":443},[32,28410,28412],{"id":28411},"_22配置环境","2.2.配置环境",[23945,28414,28416,28419],{"id":28415},"_221检查-docker-服务状态",[68,28417,28418],{},"2.2.1.检查 Docker 服务状态"," ：",[19,28421,28422],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[231,28424,28426],{"className":25768,"code":28425,"language":25770,"meta":236,"style":236},"systemctl status docker\n",[23,28427,28428],{"__ignoreMap":236},[240,28429,28430,28433,28436],{"class":242,"line":243},[240,28431,28432],{"class":436},"systemctl",[240,28434,28435],{"class":443}," status",[240,28437,28438],{"class":443}," docker\n",[23945,28440,28442,28419],{"id":28441},"_222启动-docker-服务",[68,28443,28444],{},"2.2.2.启动 Docker 服务",[19,28446,28447],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[231,28449,28451],{"className":25768,"code":28450,"language":25770,"meta":236,"style":236},"sudo systemctl start docker\n",[23,28452,28453],{"__ignoreMap":236},[240,28454,28455,28457,28460,28462],{"class":242,"line":243},[240,28456,26523],{"class":436},[240,28458,28459],{"class":443}," systemctl",[240,28461,6136],{"class":443},[240,28463,28438],{"class":443},[23945,28465,28467,28419],{"id":28466},"_223设置-docker-开机自启",[68,28468,28469],{},"2.2.3.设置 Docker 开机自启",[19,28471,28472],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[231,28474,28476],{"className":25768,"code":28475,"language":25770,"meta":236,"style":236},"sudo systemctl enable docker\n",[23,28477,28478],{"__ignoreMap":236},[240,28479,28480,28482,28484,28487],{"class":242,"line":243},[240,28481,26523],{"class":436},[240,28483,28459],{"class":443},[240,28485,28486],{"class":443}," enable",[240,28488,28438],{"class":443},[23945,28490,28492,15744,28495,15744,28500,28419],{"id":28491},"_224将用户添加到-docker-组",[68,28493,28494],{},"2.2.4.将用户添加到",[68,28496,28497],{},[23,28498,28499],{},"docker",[68,28501,28502],{},"组",[19,28504,28505,28506,28508],{},"使用以下命令将当前用户添加到 ",[23,28507,28499],{}," 组：",[231,28510,28512],{"className":25768,"code":28511,"language":25770,"meta":236,"style":236},"sudo usermod -aG docker $USER\n",[23,28513,28514],{"__ignoreMap":236},[240,28515,28516,28518,28521,28524,28526],{"class":242,"line":243},[240,28517,26523],{"class":436},[240,28519,28520],{"class":443}," usermod",[240,28522,28523],{"class":264}," -aG",[240,28525,28266],{"class":443},[240,28527,28528],{"class":257}," $USER\n",[23945,28530,28532,28419],{"id":28531},"_225退出并重新登录",[68,28533,28534],{},"2.2.5.退出并重新登录",[19,28536,28537],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[231,28539,28541],{"className":25768,"code":28540,"language":25770,"meta":236,"style":236},"newgrp docker\n",[23,28542,28543],{"__ignoreMap":236},[240,28544,28545,28548],{"class":242,"line":243},[240,28546,28547],{"class":436},"newgrp",[240,28549,28438],{"class":443},[23945,28551,28553,28419],{"id":28552},"_226重新启动-docker-服务如果需要",[68,28554,28555],{},"2.2.6.重新启动 Docker 服务（如果需要）",[19,28557,28558],{},"确保 Docker 服务正在运行，可以使用以下命令：",[231,28560,28561],{"className":25768,"code":28450,"language":25770,"meta":236,"style":236},[23,28562,28563],{"__ignoreMap":236},[240,28564,28565,28567,28569,28571],{"class":242,"line":243},[240,28566,26523],{"class":436},[240,28568,28459],{"class":443},[240,28570,6136],{"class":443},[240,28572,28438],{"class":443},[23945,28574,28576,28419],{"id":28575},"_227重启电脑后检查-docker-服务状态",[68,28577,28578],{},"2.2.7.重启电脑后检查 Docker 服务状态",[19,28580,28581],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[231,28583,28585],{"className":25768,"code":28584,"language":25770,"meta":236,"style":236},"sudo reboot\nsystemctl status docker\n",[23,28586,28587,28594],{"__ignoreMap":236},[240,28588,28589,28591],{"class":242,"line":243},[240,28590,26523],{"class":436},[240,28592,28593],{"class":443}," reboot\n",[240,28595,28596,28598,28600],{"class":242,"line":250},[240,28597,28432],{"class":436},[240,28599,28435],{"class":443},[240,28601,28438],{"class":443},[19,28603,28604],{},[219,28605],{"alt":236,"src":28606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[19,28608,28609],{},"第三行显示enabled说明开机自启动成功",[19,28611,28612],{},"按q退出",[32,28614,28616],{"id":28615},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[19,28618,28619],{},"优先使用linux来使用docker是比较好的",[19,28621,28622],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[19,28624,28625],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[19,28627,28628,28629],{},"官方下载安装:",[254,28630,28631],{"href":28631,"rel":28632},"https:\u002F\u002Fwww.docker.com\u002F",[25811],[19,28634,28635],{},"Windows的Docker显卡直通与USB直通:",[19,28637,28638],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[19,28640,28641],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[19,28643,28644],{},[219,28645],{"alt":236,"src":28646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[19,28648,28649],{},[219,28650],{"alt":236,"src":28651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[19,28653,28654],{},[219,28655],{"alt":236,"src":28656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[2019,28658,28659],{},"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":236,"searchDepth":250,"depth":250,"links":28661},[28662,28663,28664],{"id":27939,"depth":261,"text":27940},{"id":28411,"depth":261,"text":28412},{"id":28615,"depth":261,"text":28616},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":27931,"description":236},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":28671,"title":28672,"body":28673,"description":28680,"extension":2049,"meta":29373,"navigation":2051,"path":29374,"seo":29375,"stem":29376,"__hash__":29377},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":28674,"toc":29367},[28675,28678,28681,28685,28690,28695,28698,28726,28731,28740,28743,28748,28752,28759,28764,28770,28774,28777,28781,28786,28878,28883,28901,28906,28927,28932,28948,28952,28957,28986,28991,29037,29042,29086,29094,29111,29116,29132,29137,29151,29154,29157,29160,29163,29192,29195,29200,29204,29207,29210,29216,29219,29222,29225,29287,29294,29299,29302,29320,29324,29327,29344,29347,29350,29364],[10,28676,28672],{"id":28677},"_3docker直通",[19,28679,28680],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[32,28682,28684],{"id":28683},"_31usb直通","3.1.USB直通",[19,28686,28687],{},[219,28688],{"alt":236,"src":28689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[1826,28691,28692],{},[1829,28693,28694],{},"方法一(不是很推荐新手)：",[19,28696,28697],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[231,28699,28701],{"className":25768,"code":28700,"language":25770,"meta":236,"style":236},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[23,28702,28703,28711,28716],{"__ignoreMap":236},[240,28704,28705,28708],{"class":242,"line":243},[240,28706,28707],{"class":436},"ls",[240,28709,28710],{"class":443}," \u002Fdev\n",[240,28712,28713],{"class":242,"line":250},[240,28714,28715],{"class":246},"#例如\n",[240,28717,28718,28721,28723],{"class":242,"line":261},[240,28719,28720],{"class":257},"--device",[240,28722,440],{"class":288},[240,28724,28725],{"class":443},"\u002Fdev\u002Ftty_USB0\n",[1826,28727,28728],{"start":250},[1829,28729,28730],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[231,28732,28734],{"className":25768,"code":28733,"language":25770,"meta":236,"style":236},"--privileged\n",[23,28735,28736],{"__ignoreMap":236},[240,28737,28738],{"class":242,"line":243},[240,28739,28733],{"class":436},[19,28741,28742],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[19,28744,28745],{},[219,28746],{"alt":236,"src":28747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[32,28749,28751],{"id":28750},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[19,28753,28754,28755,28758],{},"NVIDIA Container Toolkit使用户 ",[68,28756,28757],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[19,28760,28761],{},[219,28762],{"alt":236,"src":28763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[19,28765,28766],{},[254,28767,28768],{"href":28768,"rel":28769},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[25811],[23945,28771,28773],{"id":28772},"_321安装","3.2.1.安装",[19,28775,28776],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[24857,28778,28780],{"id":28779},"_3211ubuntu","3.2.1.1.Ubuntu",[1826,28782,28783],{},[1829,28784,28785],{},"配置存储库 并更新",[231,28787,28789],{"className":25768,"code":28788,"language":25770,"meta":236,"style":236},"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",[23,28790,28791,28820,28840,28852,28864,28870],{"__ignoreMap":236},[240,28792,28793,28796,28799,28802,28804,28806,28809,28812,28815,28818],{"class":242,"line":243},[240,28794,28795],{"class":436},"curl",[240,28797,28798],{"class":264}," -fsSL",[240,28800,28801],{"class":443}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[240,28803,27056],{"class":288},[240,28805,28019],{"class":436},[240,28807,28808],{"class":443}," gpg",[240,28810,28811],{"class":264}," --dearmor",[240,28813,28814],{"class":264}," -o",[240,28816,28817],{"class":443}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[240,28819,26625],{"class":264},[240,28821,28822,28825,28827,28830,28833,28836,28838],{"class":242,"line":250},[240,28823,28824],{"class":257},"  && ",[240,28826,28795],{"class":436},[240,28828,28829],{"class":264}," -s",[240,28831,28832],{"class":264}," -L",[240,28834,28835],{"class":443}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[240,28837,27056],{"class":288},[240,28839,26625],{"class":264},[240,28841,28842,28845,28848,28850],{"class":242,"line":261},[240,28843,28844],{"class":436},"    sed",[240,28846,28847],{"class":443}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[240,28849,27056],{"class":288},[240,28851,26625],{"class":264},[240,28853,28854,28857,28859,28862],{"class":242,"line":277},[240,28855,28856],{"class":436},"    sudo",[240,28858,28162],{"class":443},[240,28860,28861],{"class":443}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[240,28863,26625],{"class":264},[240,28865,28866,28868],{"class":242,"line":294},[240,28867,28824],{"class":257},[240,28869,28121],{"class":264},[240,28871,28872,28874,28876],{"class":242,"line":309},[240,28873,28856],{"class":436},[240,28875,28022],{"class":443},[240,28877,28188],{"class":443},[1826,28879,28880],{"start":250},[1829,28881,28882],{},"安装nvidia-docker2",[231,28884,28886],{"className":25768,"code":28885,"language":25770,"meta":236,"style":236},"sudo apt-get install -y nvidia-docker2\n",[23,28887,28888],{"__ignoreMap":236},[240,28889,28890,28892,28894,28896,28898],{"class":242,"line":243},[240,28891,26523],{"class":436},[240,28893,28022],{"class":443},[240,28895,25780],{"class":443},[240,28897,28346],{"class":264},[240,28899,28900],{"class":443}," nvidia-docker2\n",[1826,28902,28903],{"start":261},[1829,28904,28905],{},"使用nvidia-ctk命令配置container runtime",[231,28907,28909],{"className":25768,"code":28908,"language":25770,"meta":236,"style":236},"sudo nvidia-ctk runtime configure --runtime=docker\n",[23,28910,28911],{"__ignoreMap":236},[240,28912,28913,28915,28918,28921,28924],{"class":242,"line":243},[240,28914,26523],{"class":436},[240,28916,28917],{"class":443}," nvidia-ctk",[240,28919,28920],{"class":443}," runtime",[240,28922,28923],{"class":443}," configure",[240,28925,28926],{"class":264}," --runtime=docker\n",[1826,28928,28929],{"start":277},[1829,28930,28931],{},"重启docker服务:",[231,28933,28935],{"className":25768,"code":28934,"language":25770,"meta":236,"style":236},"sudo systemctl restart docker\n",[23,28936,28937],{"__ignoreMap":236},[240,28938,28939,28941,28943,28946],{"class":242,"line":243},[240,28940,26523],{"class":436},[240,28942,28459],{"class":443},[240,28944,28945],{"class":443}," restart",[240,28947,28438],{"class":443},[24857,28949,28951],{"id":28950},"_3212fedora","3.2.1.2.Fedora",[1826,28953,28954],{},[1829,28955,28956],{},"配置存储库",[231,28958,28960],{"className":25768,"code":28959,"language":25770,"meta":236,"style":236},"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",[23,28961,28962,28977],{"__ignoreMap":236},[240,28963,28964,28966,28968,28970,28973,28975],{"class":242,"line":243},[240,28965,28795],{"class":436},[240,28967,28829],{"class":264},[240,28969,28832],{"class":264},[240,28971,28972],{"class":443}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[240,28974,27056],{"class":288},[240,28976,26625],{"class":264},[240,28978,28979,28981,28983],{"class":242,"line":250},[240,28980,26523],{"class":436},[240,28982,28162],{"class":443},[240,28984,28985],{"class":443}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[1826,28987,28988],{"start":250},[1829,28989,28990],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[231,28992,28994],{"className":25768,"code":28993,"language":25770,"meta":236,"style":236},"# 如果是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",[23,28995,28996,29001,29015,29019,29024],{"__ignoreMap":236},[240,28997,28998],{"class":242,"line":243},[240,28999,29000],{"class":246},"# 如果是RHEL或者Rocky（DNF4）\n",[240,29002,29003,29005,29007,29009,29012],{"class":242,"line":250},[240,29004,26523],{"class":436},[240,29006,28261],{"class":443},[240,29008,28360],{"class":443},[240,29010,29011],{"class":264}," --add-repo",[240,29013,29014],{"class":443}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[240,29016,29017],{"class":242,"line":261},[240,29018,4353],{"emptyLinePlaceholder":2051},[240,29020,29021],{"class":242,"line":277},[240,29022,29023],{"class":246},"# 如果是Feodra41+（DNF5）\n",[240,29025,29026,29028,29030,29032,29034],{"class":242,"line":294},[240,29027,26523],{"class":436},[240,29029,28261],{"class":443},[240,29031,28360],{"class":443},[240,29033,28363],{"class":443},[240,29035,29036],{"class":264}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[1826,29038,29039],{"start":261},[1829,29040,29041],{},"安装NVIDIA Container Toolki包",[231,29043,29045],{"className":25768,"code":29044,"language":25770,"meta":236,"style":236},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[23,29046,29047,29052,29065,29069,29074],{"__ignoreMap":236},[240,29048,29049],{"class":242,"line":243},[240,29050,29051],{"class":246},"# 如果是RHEL或者Rocky\n",[240,29053,29054,29056,29058,29060,29062],{"class":242,"line":250},[240,29055,26523],{"class":436},[240,29057,28261],{"class":443},[240,29059,25780],{"class":443},[240,29061,28346],{"class":264},[240,29063,29064],{"class":443}," nvidia-container-toolkit\n",[240,29066,29067],{"class":242,"line":261},[240,29068,4353],{"emptyLinePlaceholder":2051},[240,29070,29071],{"class":242,"line":277},[240,29072,29073],{"class":246},"# 如果是Fedora\n",[240,29075,29076,29078,29080,29082,29084],{"class":242,"line":294},[240,29077,26523],{"class":436},[240,29079,28261],{"class":443},[240,29081,25780],{"class":443},[240,29083,28346],{"class":264},[240,29085,29064],{"class":443},[1826,29087,29088],{"start":277},[1829,29089,29090,29091,29093],{},"安装nvidia-docker2 ： 在Fedora上使用",[23,29092,28236],{},"进行安装",[231,29095,29097],{"className":25768,"code":29096,"language":25770,"meta":236,"style":236},"sudo dnf install -y nvidia-docker2\n",[23,29098,29099],{"__ignoreMap":236},[240,29100,29101,29103,29105,29107,29109],{"class":242,"line":243},[240,29102,26523],{"class":436},[240,29104,28261],{"class":443},[240,29106,25780],{"class":443},[240,29108,28346],{"class":264},[240,29110,28900],{"class":443},[1826,29112,29113],{"start":294},[1829,29114,29115],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[231,29117,29118],{"className":25768,"code":28908,"language":25770,"meta":236,"style":236},[23,29119,29120],{"__ignoreMap":236},[240,29121,29122,29124,29126,29128,29130],{"class":242,"line":243},[240,29123,26523],{"class":436},[240,29125,28917],{"class":443},[240,29127,28920],{"class":443},[240,29129,28923],{"class":443},[240,29131,28926],{"class":264},[1826,29133,29134],{"start":309},[1829,29135,29136],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[231,29138,29139],{"className":25768,"code":28934,"language":25770,"meta":236,"style":236},[23,29140,29141],{"__ignoreMap":236},[240,29142,29143,29145,29147,29149],{"class":242,"line":243},[240,29144,26523],{"class":436},[240,29146,28459],{"class":443},[240,29148,28945],{"class":443},[240,29150,28438],{"class":443},[19,29152,29153],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[19,29155,29156],{},"方法：",[19,29158,29159],{},"1️⃣nvidia-smi",[19,29161,29162],{},"2️⃣运行nvidia cuda 容器进行测试",[231,29164,29166],{"className":25768,"code":29165,"language":25770,"meta":236,"style":236},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[23,29167,29168],{"__ignoreMap":236},[240,29169,29170,29172,29174,29177,29180,29183,29186,29189],{"class":242,"line":243},[240,29171,26523],{"class":436},[240,29173,28266],{"class":443},[240,29175,29176],{"class":443}," run",[240,29178,29179],{"class":264}," --rm",[240,29181,29182],{"class":264}," --gpus",[240,29184,29185],{"class":443}," all",[240,29187,29188],{"class":443}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[240,29190,29191],{"class":443}," nvidia-smi\n",[19,29193,29194],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[19,29196,29197],{},[219,29198],{"alt":236,"src":29199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[32,29201,29203],{"id":29202},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[19,29205,29206],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[19,29208,29209],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[19,29211,29212],{},[254,29213,29214],{"href":29214,"rel":29215},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[25811],[19,29217,29218],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[19,29220,29221],{},"我们只需要找到对应的Docker镜像当底包即可。",[19,29223,29224],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[802,29226,29227,29243],{},[805,29228,29229],{},[808,29230,29231,29234,29237,29240],{},[811,29232,29233],{"align":813},"镜像类型",[811,29235,29236],{"align":813},"适用场景",[811,29238,29239],{"align":813},"示例标签",[811,29241,29242],{"align":813},"大小",[819,29244,29245,29259,29273],{},[808,29246,29247,29250,29253,29256],{},[824,29248,29249],{"align":813},"base",[824,29251,29252],{"align":813},"仅需 CUDA 运行时库",[824,29254,29255],{"align":813},"12.4.0-base-ubuntu22.04",[824,29257,29258],{"align":813},"~240MB",[808,29260,29261,29264,29267,29270],{},[824,29262,29263],{"align":813},"runtime",[824,29265,29266],{"align":813},"部署编译后的应用（含数学库）",[824,29268,29269],{"align":813},"12.4.0-runtime-ubuntu22.04",[824,29271,29272],{"align":813},"~2GB",[808,29274,29275,29278,29281,29284],{},[824,29276,29277],{"align":813},"devel",[824,29279,29280],{"align":813},"开发环境（含编译工具）",[824,29282,29283],{"align":813},"12.4.0-devel-ubuntu22.04",[824,29285,29286],{"align":813},"~3GB",[19,29288,29289,29290,29293],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[23,29291,29292],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[19,29295,29296],{},[219,29297],{"alt":236,"src":29298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[19,29300,29301],{},"在dockerfile里就可以开头这么写：",[231,29303,29305],{"className":25768,"code":29304,"language":25770,"meta":236,"style":236},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[23,29306,29307,29312],{"__ignoreMap":236},[240,29308,29309],{"class":242,"line":243},[240,29310,29311],{"class":246},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[240,29313,29314,29317],{"class":242,"line":250},[240,29315,29316],{"class":436},"FROM",[240,29318,29319],{"class":443}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[32,29321,29323],{"id":29322},"_34配置以太网","3.4.配置以太网",[19,29325,29326],{},"指定网络模式",[231,29328,29330],{"className":25768,"code":29329,"language":25770,"meta":236,"style":236},"--net=host \\\n",[23,29331,29332],{"__ignoreMap":236},[240,29333,29334,29337,29339,29342],{"class":242,"line":243},[240,29335,29336],{"class":257},"--net",[240,29338,440],{"class":288},[240,29340,29341],{"class":443},"host",[240,29343,26625],{"class":436},[19,29345,29346],{},"启动参数里加上这行即可。具体在下方",[19,29348,29349],{},"--net选项：指定网络模式，该选项有以下参数可选：",[3100,29351,29352,29355,29358,29361],{},[1829,29353,29354],{},"--net=bridge:默认选项，表示连接到默认的网桥",[1829,29356,29357],{},"--net=host:容器使用宿主机的网络",[1829,29359,29360],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[1829,29362,29363],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[2019,29365,29366],{},"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":236,"searchDepth":250,"depth":250,"links":29368},[29369,29370,29371,29372],{"id":28683,"depth":261,"text":28684},{"id":28750,"depth":261,"text":28751},{"id":29202,"depth":261,"text":29203},{"id":29322,"depth":261,"text":29323},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":28672,"description":28680},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":29379,"title":29380,"body":29381,"description":29388,"extension":2049,"meta":29394,"navigation":2051,"path":29395,"seo":29396,"stem":29397,"__hash__":29398},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":29382,"toc":29392},[29383,29386,29389],[10,29384,29380],{"id":29385},"_4dockerhub换源",[19,29387,29388],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[19,29390,29391],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":236,"searchDepth":250,"depth":250,"links":29393},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":29380,"description":29388},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":29400,"title":29401,"body":29402,"description":236,"extension":2049,"meta":30414,"navigation":2051,"path":30415,"seo":30416,"stem":30417,"__hash__":30418},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":29403,"toc":30409},[29404,29407,29411,29417,29421,29424,29764,29767,29770,29773,29778,29783,29786,29789,29792,29795,29814,29817,29828,29834,30016,30026,30042,30305,30307,30332,30347,30356,30406],[10,29405,29401],{"id":29406},"_5docker命令学习",[32,29408,29410],{"id":29409},"_51参考文档","5.1.参考文档",[19,29412,29413],{},[254,29414,29415],{"href":29415,"rel":29416},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[25811],[32,29418,29420],{"id":29419},"_52常用命令","5.2.常用命令",[19,29422,29423],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[802,29425,29426,29439],{},[805,29427,29428],{},[808,29429,29430,29433,29436],{},[811,29431,29432],{"align":813},"命令",[811,29434,29435],{"align":813},"描述",[811,29437,29438],{"align":813},"示例",[819,29440,29441,29452,29463,29474,29485,29496,29507,29518,29528,29539,29550,29561,29571,29582,29593,29604,29614,29624,29634,29644,29655,29666,29677,29688,29699,29710,29720,29731,29742,29753],{},[808,29442,29443,29446,29449],{},[824,29444,29445],{"align":813},"docker run",[824,29447,29448],{"align":813},"创建并启动一个新的容器。",[824,29450,29451],{"align":813},"docker run -it ubuntu bash",[808,29453,29454,29457,29460],{},[824,29455,29456],{"align":813},"docker build",[824,29458,29459],{"align":813},"通过指定的 Dockerfile 创建一个新的镜像。",[824,29461,29462],{"align":813},"docker build -t myimage .",[808,29464,29465,29468,29471],{},[824,29466,29467],{"align":813},"docker pull",[824,29469,29470],{"align":813},"从 Docker 仓库拉取镜像。",[824,29472,29473],{"align":813},"docker pull ubuntu",[808,29475,29476,29479,29482],{},[824,29477,29478],{"align":813},"docker push",[824,29480,29481],{"align":813},"将本地镜像推送到 Docker 仓库。",[824,29483,29484],{"align":813},"docker push myimage",[808,29486,29487,29490,29493],{},[824,29488,29489],{"align":813},"docker stop",[824,29491,29492],{"align":813},"停止一个正在运行的容器。",[824,29494,29495],{"align":813},"docker stop container_id",[808,29497,29498,29501,29504],{},[824,29499,29500],{"align":813},"docker start",[824,29502,29503],{"align":813},"启动一个已经存在的容器。",[824,29505,29506],{"align":813},"docker start container_id",[808,29508,29509,29512,29515],{},[824,29510,29511],{"align":813},"docker restart",[824,29513,29514],{"align":813},"重新启动容器。",[824,29516,29517],{"align":813},"docker restart container_id",[808,29519,29520,29523,29526],{},[824,29521,29522],{"align":813},"docker ps",[824,29524,29525],{"align":813},"列出当前正在运行的容器。",[824,29527,29522],{"align":813},[808,29529,29530,29533,29536],{},[824,29531,29532],{"align":813},"docker rm",[824,29534,29535],{"align":813},"删除一个或多个停止的容器。",[824,29537,29538],{"align":813},"docker rm container_id",[808,29540,29541,29544,29547],{},[824,29542,29543],{"align":813},"docker exec",[824,29545,29546],{"align":813},"在一个正在运行的容器中执行命令。",[824,29548,29549],{"align":813},"docker exec -it container_id bash",[808,29551,29552,29555,29558],{},[824,29553,29554],{"align":813},"docker logs",[824,29556,29557],{"align":813},"查看容器的日志输出。",[824,29559,29560],{"align":813},"docker logs container_id",[808,29562,29563,29566,29569],{},[824,29564,29565],{"align":813},"docker images",[824,29567,29568],{"align":813},"列出本地所有镜像。",[824,29570,29565],{"align":813},[808,29572,29573,29576,29579],{},[824,29574,29575],{"align":813},"docker rmi",[824,29577,29578],{"align":813},"删除一个或多个镜像。",[824,29580,29581],{"align":813},"docker rmi myimage",[808,29583,29584,29587,29590],{},[824,29585,29586],{"align":813},"docker network",[824,29588,29589],{"align":813},"管理 Docker 网络。",[824,29591,29592],{"align":813},"docker network ls",[808,29594,29595,29598,29601],{},[824,29596,29597],{"align":813},"docker volume",[824,29599,29600],{"align":813},"管理 Docker 数据卷。",[824,29602,29603],{"align":813},"docker volume ls",[808,29605,29606,29609,29612],{},[824,29607,29608],{"align":813},"docker-compose up",[824,29610,29611],{"align":813},"启动 docker-compose.yml 中定义的所有服务。",[824,29613,29608],{"align":813},[808,29615,29616,29619,29622],{},[824,29617,29618],{"align":813},"docker-compose down",[824,29620,29621],{"align":813},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[824,29623,29618],{"align":813},[808,29625,29626,29629,29632],{},[824,29627,29628],{"align":813},"docker info",[824,29630,29631],{"align":813},"显示 Docker 系统的详细信息。",[824,29633,29628],{"align":813},[808,29635,29636,29639,29642],{},[824,29637,29638],{"align":813},"docker stats",[824,29640,29641],{"align":813},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[824,29643,29638],{"align":813},[808,29645,29646,29649,29652],{},[824,29647,29648],{"align":813},"docker inspect",[824,29650,29651],{"align":813},"查看容器或镜像的详细信息（JSON 格式）。",[824,29653,29654],{"align":813},"docker inspect container_id",[808,29656,29657,29660,29663],{},[824,29658,29659],{"align":813},"docker save",[824,29661,29662],{"align":813},"将一个镜像保存为 tar 文件。",[824,29664,29665],{"align":813},"docker save -o myimage.tar myimage",[808,29667,29668,29671,29674],{},[824,29669,29670],{"align":813},"docker load",[824,29672,29673],{"align":813},"从 tar 文件中加载镜像。",[824,29675,29676],{"align":813},"docker load -i myimage.tar",[808,29678,29679,29682,29685],{},[824,29680,29681],{"align":813},"docker tag",[824,29683,29684],{"align":813},"为镜像添加标签（tag）。",[824,29686,29687],{"align":813},"docker tag myimage myimage:v1",[808,29689,29690,29693,29696],{},[824,29691,29692],{"align":813},"docker buildx build",[824,29694,29695],{"align":813},"使用 Buildx 构建多架构镜像。",[824,29697,29698],{"align":813},"docker buildx build -t myimage .",[808,29700,29701,29704,29707],{},[824,29702,29703],{"align":813},"docker buildx create",[824,29705,29706],{"align":813},"创建一个新的 Buildx 构建实例。",[824,29708,29709],{"align":813},"docker buildx create –use",[808,29711,29712,29715,29718],{},[824,29713,29714],{"align":813},"docker buildx ls",[824,29716,29717],{"align":813},"列出所有可用的 Buildx 构建实例。",[824,29719,29714],{"align":813},[808,29721,29722,29725,29728],{},[824,29723,29724],{"align":813},"docker buildx use",[824,29726,29727],{"align":813},"设置当前的 Buildx 构建实例。",[824,29729,29730],{"align":813},"docker buildx use mybuilder",[808,29732,29733,29736,29739],{},[824,29734,29735],{"align":813},"docker buildx bake",[824,29737,29738],{"align":813},"使用 Bake 文件批量构建镜像。",[824,29740,29741],{"align":813},"docker buildx bake -f bake.hcl",[808,29743,29744,29747,29750],{},[824,29745,29746],{"align":813},"docker buildx build –push",[824,29748,29749],{"align":813},"构建镜像并推送到镜像仓库。",[824,29751,29752],{"align":813},"docker buildx build –push -t myimage .",[808,29754,29755,29758,29761],{},[824,29756,29757],{"align":813},"docker buildx build –platform",[824,29759,29760],{"align":813},"构建镜像并为多个平台生成支持。",[824,29762,29763],{"align":813},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[19,29765,29766],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[19,29768,29769],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[19,29771,29772],{},"docker images 可以查看已经下载的镜像",[19,29774,29775],{},[219,29776],{"alt":236,"src":29777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[19,29779,29780],{},[68,29781,29782],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[19,29784,29785],{},"docker rmi $(docker images -q) 删除所有的镜像",[19,29787,29788],{},"docker container logs 查看容器日志",[19,29790,29791],{},"docker top 查看容器里的进程",[19,29793,29794],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[231,29796,29798],{"className":25768,"code":29797,"language":25770,"meta":236,"style":236},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[23,29799,29800],{"__ignoreMap":236},[240,29801,29802,29805,29808,29811],{"class":242,"line":243},[240,29803,29804],{"class":436},"如：docker",[240,29806,29807],{"class":443}," cp",[240,29809,29810],{"class":443}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[240,29812,29813],{"class":443}," \u002Fmydata\u002Fnginx\n",[19,29815,29816],{},"docker run时在启动容器的时候会有几个常用的选项：",[3100,29818,29819,29822,29825],{},[1829,29820,29821],{},"-d选项：表示后台运行",[1829,29823,29824],{},"-P选项：随机端口映射",[1829,29826,29827],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[32,29829,29831],{"id":29830},"_53run命令的参数非常重要",[68,29832,29833],{},"5.3.run命令的参数（非常重要）",[802,29835,29836,29849],{},[805,29837,29838],{},[808,29839,29840,29843,29846],{},[811,29841,29842],{"align":813},"参数\u002F配置",[811,29844,29845],{"align":813},"功能说明",[811,29847,29848],{"align":813},"重要性与参考依据",[819,29850,29851,29862,29873,29884,29895,29906,29917,29928,29939,29950,29961,29972,29983,29994,30005],{},[808,29852,29853,29856,29859],{},[824,29854,29855],{"align":813},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[824,29857,29858],{"align":813},"指定容器名称，便于后续管理",[824,29860,29861],{"align":813},"替代随机生成的容器名。",[808,29863,29864,29867,29870],{},[824,29865,29866],{"align":813},"–gpus all",[824,29868,29869],{"align":813},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[824,29871,29872],{"align":813},"用于CUDA加速等GPU依赖任务。",[808,29874,29875,29878,29881],{},[824,29876,29877],{"align":813},"-e NVIDIA_DRIVER_CAPABILITIES=all",[824,29879,29880],{"align":813},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[824,29882,29883],{"align":813},"确保容器内GPU功能完整67。",[808,29885,29886,29889,29892],{},[824,29887,29888],{"align":813},"-dit",[824,29890,29891],{"align":813},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[824,29893,29894],{"align":813},"允许容器在后台运行并支持交互操作。",[808,29896,29897,29900,29903],{},[824,29898,29899],{"align":813},"–privileged",[824,29901,29902],{"align":813},"赋予容器完全主机权限（可访问设备、内核模块等）",[824,29904,29905],{"align":813},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[808,29907,29908,29911,29914],{},[824,29909,29910],{"align":813},"–net=host",[824,29912,29913],{"align":813},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[824,29915,29916],{"align":813},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[808,29918,29919,29922,29925],{},[824,29920,29921],{"align":813},"–group-add audio–group-add video–group-add dialout",[824,29923,29924],{"align":813},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[824,29926,29927],{"align":813},"避免权限问题（如避免无法调用摄像头、麦克风）。",[808,29929,29930,29933,29936],{},[824,29931,29932],{"align":813},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[824,29934,29935],{"align":813},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[824,29937,29938],{"align":813},"支持容器内运行图形界面应用（如OpenCV可视化）。",[808,29940,29941,29944,29947],{},[824,29942,29943],{"align":813},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[824,29945,29946],{"align":813},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[824,29948,29949],{"align":813},"实现容器内图形显示。",[808,29951,29952,29955,29958],{},[824,29953,29954],{"align":813},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[824,29956,29957],{"align":813},"挂载X11认证文件（只读）",[824,29959,29960],{"align":813},"确保容器有权连接宿主机显示服务。",[808,29962,29963,29966,29969],{},[824,29964,29965],{"align":813},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[824,29967,29968],{"align":813},"挂载Wayland显示协议相关目录",[824,29970,29971],{"align":813},"支持Wayland协议的图形显示。",[808,29973,29974,29977,29980],{},[824,29975,29976],{"align":813},"–ulimit nofile=1024:524288",[824,29978,29979],{"align":813},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[824,29981,29982],{"align":813},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[808,29984,29985,29988,29991],{},[824,29986,29987],{"align":813},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[824,29989,29990],{"align":813},"挂载宿主机用户目录到容器内同名路径",[824,29992,29993],{"align":813},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[808,29995,29996,29999,30002],{},[824,29997,29998],{"align":813},"-w \u002Fhome\u002Ftungchiahui",[824,30000,30001],{"align":813},"设置容器启动后的默认工作目录",[824,30003,30004],{"align":813},"直接进入项目路径，方便执行命令2324。",[808,30006,30007,30010,30013],{},[824,30008,30009],{"align":813},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[824,30011,30012],{"align":813},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[824,30014,30015],{"align":813},"提供预配置的深度学习与机器人开发环境。",[19,30017,30018,30019,30021,30022,30025],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[23,30020,26523],{},"加不加",[23,30023,30024],{},"sudo -E","都无所谓。",[19,30027,30028,30029,30031,30032,30034,30035,30038,30039,30041],{},"用户已经被加到docker组了，不用",[23,30030,26523],{},"也行跑，其次，",[23,30033,26523],{},"运行的话，你的",[23,30036,30037],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[23,30040,30037],{},"更不可能变了。",[231,30043,30045],{"className":25768,"code":30044,"language":25770,"meta":236,"style":236},"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",[23,30046,30047,30060,30070,30080,30092,30099,30106,30113,30123,30132,30141,30155,30167,30179,30188,30198,30207,30222,30255,30282,30293,30300],{"__ignoreMap":236},[240,30048,30049,30051,30053,30055,30058],{"class":242,"line":243},[240,30050,26523],{"class":436},[240,30052,28266],{"class":443},[240,30054,29176],{"class":443},[240,30056,30057],{"class":264}," --name=ros_opencv_cuda",[240,30059,26625],{"class":264},[240,30061,30062,30065,30068],{"class":242,"line":250},[240,30063,30064],{"class":257},"--gpus ",[240,30066,30067],{"class":443},"all",[240,30069,26625],{"class":264},[240,30071,30072,30075,30078],{"class":242,"line":261},[240,30073,30074],{"class":257},"-e ",[240,30076,30077],{"class":443},"NVIDIA_DRIVER_CAPABILITIES=all",[240,30079,26625],{"class":264},[240,30081,30082,30084,30087,30090],{"class":242,"line":277},[240,30083,30074],{"class":257},[240,30085,30086],{"class":443},"DISPLAY=",[240,30088,30089],{"class":257},"$DISPLAY ",[240,30091,28121],{"class":264},[240,30093,30094,30097],{"class":242,"line":294},[240,30095,30096],{"class":257},"-dit ",[240,30098,28121],{"class":264},[240,30100,30101,30104],{"class":242,"line":309},[240,30102,30103],{"class":257},"--privileged ",[240,30105,28121],{"class":264},[240,30107,30108,30111],{"class":242,"line":529},[240,30109,30110],{"class":257},"--net=host ",[240,30112,28121],{"class":264},[240,30114,30115,30118,30121],{"class":242,"line":549},[240,30116,30117],{"class":257},"--group-add ",[240,30119,30120],{"class":443},"audio",[240,30122,26625],{"class":264},[240,30124,30125,30127,30130],{"class":242,"line":569},[240,30126,30117],{"class":257},[240,30128,30129],{"class":443},"video",[240,30131,26625],{"class":264},[240,30133,30134,30136,30139],{"class":242,"line":589},[240,30135,30117],{"class":257},[240,30137,30138],{"class":443},"dialout",[240,30140,26625],{"class":264},[240,30142,30143,30145,30148,30150,30153],{"class":242,"line":715},[240,30144,30074],{"class":257},[240,30146,30147],{"class":443},"XAUTHORITY=",[240,30149,30037],{"class":257},[240,30151,30152],{"class":443},"\u002F.Xauthority",[240,30154,26625],{"class":264},[240,30156,30157,30159,30162,30165],{"class":242,"line":727},[240,30158,30074],{"class":257},[240,30160,30161],{"class":443},"WAYLAND_DISPLAY=",[240,30163,30164],{"class":257},"$WAYLAND_DISPLAY ",[240,30166,28121],{"class":264},[240,30168,30169,30171,30174,30177],{"class":242,"line":1730},[240,30170,30074],{"class":257},[240,30172,30173],{"class":443},"XDG_RUNTIME_DIR=",[240,30175,30176],{"class":257},"$XDG_RUNTIME_DIR ",[240,30178,28121],{"class":264},[240,30180,30181,30183,30186],{"class":242,"line":3582},[240,30182,30074],{"class":257},[240,30184,30185],{"class":443},"QT_QPA_PLATFORM=xcb",[240,30187,26625],{"class":264},[240,30189,30190,30193,30196],{"class":242,"line":3596},[240,30191,30192],{"class":257},"-v ",[240,30194,30195],{"class":443},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[240,30197,26625],{"class":264},[240,30199,30200,30202,30205],{"class":242,"line":3601},[240,30201,30192],{"class":257},[240,30203,30204],{"class":443},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[240,30206,26625],{"class":264},[240,30208,30209,30212,30215,30217,30220],{"class":242,"line":3607},[240,30210,30211],{"class":257},"-v $HOME",[240,30213,30214],{"class":443},"\u002F.Xauthority:",[240,30216,30037],{"class":257},[240,30218,30219],{"class":443},"\u002F.Xauthority:ro",[240,30221,26625],{"class":264},[240,30223,30224,30226,30229,30231,30234,30237,30239,30242,30244,30246,30248,30250,30253],{"class":242,"line":3628},[240,30225,30192],{"class":257},[240,30227,30228],{"class":443},"\u002Frun\u002Fuser\u002F",[240,30230,27046],{"class":257},[240,30232,30233],{"class":436},"id",[240,30235,30236],{"class":264}," -u",[240,30238,2529],{"class":257},[240,30240,30241],{"class":443},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[240,30243,27046],{"class":257},[240,30245,30233],{"class":436},[240,30247,30236],{"class":264},[240,30249,2529],{"class":257},[240,30251,30252],{"class":443},"\u002Fwayland-0",[240,30254,26625],{"class":264},[240,30256,30257,30259,30261,30263,30265,30267,30269,30272,30274,30276,30278,30280],{"class":242,"line":3633},[240,30258,30192],{"class":257},[240,30260,30228],{"class":443},[240,30262,27046],{"class":257},[240,30264,30233],{"class":436},[240,30266,30236],{"class":264},[240,30268,2529],{"class":257},[240,30270,30271],{"class":443},":\u002Frun\u002Fuser\u002F",[240,30273,27046],{"class":257},[240,30275,30233],{"class":436},[240,30277,30236],{"class":264},[240,30279,1230],{"class":257},[240,30281,28121],{"class":264},[240,30283,30284,30286,30288,30291],{"class":242,"line":3647},[240,30285,30211],{"class":257},[240,30287,2954],{"class":443},[240,30289,30290],{"class":257},"$HOME ",[240,30292,28121],{"class":264},[240,30294,30295,30298],{"class":242,"line":3652},[240,30296,30297],{"class":257},"-w $HOME ",[240,30299,28121],{"class":264},[240,30301,30302],{"class":242,"line":3681},[240,30303,30304],{"class":257},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[19,30306,10976],{},[1826,30308,30309,30317,30320,30323],{},[1829,30310,30311,15744,30313,30316],{},[23,30312,30077],{},[23,30314,30315],{},"--gpus all","没有英伟达显卡请注释。",[1829,30318,30319],{},"--name后面请自己为容器起名。",[1829,30321,30322],{},"最后一行仓库名称请你自己找对应的镜像填上。",[1829,30324,30325,30326,30331],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[25500,30327,30328],{},[68,30329,30330],{},"请不要加","。",[231,30333,30335],{"className":25768,"code":30334,"language":25770,"meta":236,"style":236},"--ulimit nofile=1024:524288 \\\n",[23,30336,30337],{"__ignoreMap":236},[240,30338,30339,30342,30345],{"class":242,"line":243},[240,30340,30341],{"class":436},"--ulimit",[240,30343,30344],{"class":443}," nofile=1024:524288",[240,30346,26625],{"class":264},[19,30348,30349,30350,30355],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[25500,30351,30352],{},[68,30353,30354],{},"不建议","**.**",[231,30357,30359],{"className":25768,"code":30358,"language":25770,"meta":236,"style":236},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[23,30360,30361,30388,30397],{"__ignoreMap":236},[240,30362,30363,30366,30369,30371,30373,30375,30377,30379,30381,30384,30386],{"class":242,"line":243},[240,30364,30365],{"class":436},"--user",[240,30367,30368],{"class":257}," $(",[240,30370,30233],{"class":436},[240,30372,30236],{"class":264},[240,30374,2529],{"class":257},[240,30376,2954],{"class":443},[240,30378,27046],{"class":257},[240,30380,30233],{"class":436},[240,30382,30383],{"class":264}," -g",[240,30385,1230],{"class":257},[240,30387,28121],{"class":264},[240,30389,30390,30392,30395],{"class":242,"line":250},[240,30391,30192],{"class":257},[240,30393,30394],{"class":443},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[240,30396,26625],{"class":264},[240,30398,30399,30401,30404],{"class":242,"line":261},[240,30400,30192],{"class":257},[240,30402,30403],{"class":443},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[240,30405,26625],{"class":264},[2019,30407,30408],{},"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":236,"searchDepth":250,"depth":250,"links":30410},[30411,30412,30413],{"id":29409,"depth":261,"text":29410},{"id":29419,"depth":261,"text":29420},{"id":29830,"depth":261,"text":29833},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":29401,"description":236},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":30420,"title":30421,"body":30422,"description":236,"extension":2049,"meta":32045,"navigation":2051,"path":32046,"seo":32047,"stem":32048,"__hash__":32049},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":30423,"toc":32040},[30424,30427,30431,30434,30656,30660,30664,30667,30773,30778,30781,30786,30789,30794,30797,30802,30805,30817,30820,30825,30832,30860,30867,30943,30948,30951,30974,30976,31051,31056,31059,31063,31071,31076,31081,31085,31096,31102,31105,31108,31132,31135,31138,31166,31169,31172,31637,31640,31645,31650,31654,31677,31682,31686,31690,31693,31696,31699,31726,31729,31732,31750,31753,31756,31778,31786,31791,31796,31800,31803,31806,31809,31812,31857,31860,31878,31881,31886,31889,31910,31913,31969,31972,31977,31981,31984,31991,31994,31997,32002,32005,32021,32024,32037],[10,30425,30421],{"id":30426},"_6手动创建docker镜像",[32,30428,30430],{"id":30429},"_61dockerfile","6.1.DockerFile",[19,30432,30433],{},"常用命令：",[802,30435,30436,30447],{},[805,30437,30438],{},[808,30439,30440,30443,30445],{},[811,30441,30442],{"align":813},"指令",[811,30444,1057],{"align":813},[811,30446,29438],{"align":813},[819,30448,30449,30459,30475,30486,30497,30508,30519,30530,30541,30555,30569,30580,30594,30605,30616,30630,30645],{},[808,30450,30451,30453,30456],{},[824,30452,29316],{"align":813},[824,30454,30455],{"align":813},"指定基础镜像，是 Dockerfile 的起点",[824,30457,30458],{"align":813},"FROM ubuntu:22.04",[808,30460,30461,30464,30467],{},[824,30462,30463],{"align":813},"LABEL",[824,30465,30466],{"align":813},"添加元数据（如作者、版本等）",[824,30468,30469,30470,30474],{"align":813},"LABEL maintainer=”",[254,30471,30473],{"href":30472},"mailto:you@example.com","you@example.com","”",[808,30476,30477,30480,30483],{},[824,30478,30479],{"align":813},"ENV",[824,30481,30482],{"align":813},"设置环境变量",[824,30484,30485],{"align":813},"ENV PORT=8080",[808,30487,30488,30491,30494],{},[824,30489,30490],{"align":813},"ARG",[824,30492,30493],{"align":813},"构建参数，只在构建期间可用",[824,30495,30496],{"align":813},"ARG VERSION=1.0",[808,30498,30499,30502,30505],{},[824,30500,30501],{"align":813},"RUN",[824,30503,30504],{"align":813},"构建镜像时运行命令",[824,30506,30507],{"align":813},"RUN apt-get update && apt-get install -y curl",[808,30509,30510,30513,30516],{},[824,30511,30512],{"align":813},"COPY",[824,30514,30515],{"align":813},"复制文件到镜像中",[824,30517,30518],{"align":813},"COPY . \u002Fapp",[808,30520,30521,30524,30527],{},[824,30522,30523],{"align":813},"ADD",[824,30525,30526],{"align":813},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[824,30528,30529],{"align":813},"ADD archive.tar.gz \u002Fdata\u002F",[808,30531,30532,30535,30538],{},[824,30533,30534],{"align":813},"WORKDIR",[824,30536,30537],{"align":813},"设置工作目录",[824,30539,30540],{"align":813},"WORKDIR \u002Fopt",[808,30542,30543,30546,30549],{},[824,30544,30545],{"align":813},"CMD",[824,30547,30548],{"align":813},"设置容器启动时默认命令（可被 docker run 覆盖）",[824,30550,30551,30552],{"align":813},"CMD ",[240,30553,30554],{},"“node”, “index.js”",[808,30556,30557,30560,30563],{},[824,30558,30559],{"align":813},"ENTRYPOINT",[824,30561,30562],{"align":813},"设置容器启动时固定命令（通常用于 CLI 工具等）",[824,30564,30565,30566],{"align":813},"ENTRYPOINT ",[240,30567,30568],{},"“python3”",[808,30570,30571,30574,30577],{},[824,30572,30573],{"align":813},"EXPOSE",[824,30575,30576],{"align":813},"声明镜像内服务监听的端口（不会自动映射）",[824,30578,30579],{"align":813},"EXPOSE 80",[808,30581,30582,30585,30588],{},[824,30583,30584],{"align":813},"VOLUME",[824,30586,30587],{"align":813},"声明数据卷挂载点",[824,30589,30590,30591],{"align":813},"VOLUME ",[240,30592,30593],{},"“\u002Fdata”",[808,30595,30596,30599,30602],{},[824,30597,30598],{"align":813},"USER",[824,30600,30601],{"align":813},"设置后续命令执行的用户",[824,30603,30604],{"align":813},"USER appuser",[808,30606,30607,30610,30613],{},[824,30608,30609],{"align":813},"ONBUILD",[824,30611,30612],{"align":813},"当镜像作为其他镜像基础镜像时触发的构建指令",[824,30614,30615],{"align":813},"ONBUILD COPY . \u002Fsrc",[808,30617,30618,30621,30624],{},[824,30619,30620],{"align":813},"SHELL",[824,30622,30623],{"align":813},"更改默认 shell，比如将 sh -c 改为 bash -c",[824,30625,30626,30627],{"align":813},"SHELL ",[240,30628,30629],{},"“\u002Fbin\u002Fbash”, “-c”",[808,30631,30632,30635,30638],{},[824,30633,30634],{"align":813},"HEALTHCHECK",[824,30636,30637],{"align":813},"定义容器运行时的健康检查命令",[824,30639,30640,30641],{"align":813},"`HEALTHCHECK CMD curl –fail ",[254,30642,30643],{"href":30643,"rel":30644},"http:\u002F\u002Flocalhost:8080",[25811],[808,30646,30647,30650,30653],{},[824,30648,30649],{"align":813},"STOPSIGNAL",[824,30651,30652],{"align":813},"容器停止时发送的信号",[824,30654,30655],{"align":813},"STOPSIGNAL SIGKILL",[32,30657,30659],{"id":30658},"_62自己创建容器","6.2.自己创建容器",[23945,30661,30663],{"id":30662},"_621手动创建","6.2.1.手动创建",[19,30665,30666],{},"在x86电脑上编译x86的：",[231,30668,30670],{"className":25768,"code":30669,"language":25770,"meta":236,"style":236},"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",[23,30671,30672,30688,30692,30705,30709,30722,30726,30739,30743,30756,30760],{"__ignoreMap":236},[240,30673,30674,30676,30679,30682,30685],{"class":242,"line":243},[240,30675,28499],{"class":436},[240,30677,30678],{"class":443}," build",[240,30680,30681],{"class":264}," -t",[240,30683,30684],{"class":443}," ros-melodic-cuda118-cudnn8-bionic:latest",[240,30686,30687],{"class":443}," .\n",[240,30689,30690],{"class":242,"line":250},[240,30691,4353],{"emptyLinePlaceholder":2051},[240,30693,30694,30696,30698,30700,30703],{"class":242,"line":261},[240,30695,28499],{"class":436},[240,30697,30678],{"class":443},[240,30699,30681],{"class":264},[240,30701,30702],{"class":443}," ros-noetic-focal:latest",[240,30704,30687],{"class":443},[240,30706,30707],{"class":242,"line":277},[240,30708,4353],{"emptyLinePlaceholder":2051},[240,30710,30711,30713,30715,30717,30720],{"class":242,"line":294},[240,30712,28499],{"class":436},[240,30714,30678],{"class":443},[240,30716,30681],{"class":264},[240,30718,30719],{"class":443}," ros-humble-jammy:latest",[240,30721,30687],{"class":443},[240,30723,30724],{"class":242,"line":309},[240,30725,4353],{"emptyLinePlaceholder":2051},[240,30727,30728,30730,30732,30734,30737],{"class":242,"line":529},[240,30729,28499],{"class":436},[240,30731,30678],{"class":443},[240,30733,30681],{"class":264},[240,30735,30736],{"class":443}," ros-jazzy-noble:latest",[240,30738,30687],{"class":443},[240,30740,30741],{"class":242,"line":549},[240,30742,4353],{"emptyLinePlaceholder":2051},[240,30744,30745,30747,30749,30751,30754],{"class":242,"line":569},[240,30746,28499],{"class":436},[240,30748,30678],{"class":443},[240,30750,30681],{"class":264},[240,30752,30753],{"class":443}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[240,30755,30687],{"class":443},[240,30757,30758],{"class":242,"line":589},[240,30759,4353],{"emptyLinePlaceholder":2051},[240,30761,30762,30764,30766,30768,30771],{"class":242,"line":715},[240,30763,28499],{"class":436},[240,30765,30678],{"class":443},[240,30767,30681],{"class":264},[240,30769,30770],{"class":443}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[240,30772,30687],{"class":443},[19,30774,30775],{},[219,30776],{"alt":236,"src":30777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[19,30779,30780],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[19,30782,30783],{},[219,30784],{"alt":236,"src":30785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[19,30787,30788],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[1826,30790,30791],{},[1829,30792,30793],{},"创建 Docker Hub 账户",[19,30795,30796],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[1826,30798,30799],{"start":250},[1829,30800,30801],{},"登录 Docker Hub",[19,30803,30804],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[231,30806,30808],{"className":25768,"code":30807,"language":25770,"meta":236,"style":236},"docker login\n",[23,30809,30810],{"__ignoreMap":236},[240,30811,30812,30814],{"class":242,"line":243},[240,30813,28499],{"class":436},[240,30815,30816],{"class":443}," login\n",[19,30818,30819],{},"输入你的 Docker Hub 用户名和密码进行验证。",[1826,30821,30822],{},[1829,30823,30824],{},"为你的镜像打标签",[19,30826,30827,30828,30831],{},"Docker Hub 使用 ",[23,30829,30830],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[231,30833,30835],{"className":25768,"code":30834,"language":25770,"meta":236,"style":236},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[23,30836,30837],{"__ignoreMap":236},[240,30838,30839,30841,30844,30846,30849,30852,30855,30857],{"class":242,"line":243},[240,30840,28499],{"class":436},[240,30842,30843],{"class":443}," tag",[240,30845,30736],{"class":443},[240,30847,30848],{"class":288}," \u003C",[240,30850,30851],{"class":443},"你的用户",[240,30853,30854],{"class":257},"名",[240,30856,3053],{"class":288},[240,30858,30859],{"class":443},"\u002Fros-jazzy-noble:latest\n",[19,30861,30862,30863,30866],{},"例如，如果你的 Docker Hub 用户名是 ",[23,30864,30865],{},"tungchiahui","，你应该执行：",[231,30868,30870],{"className":25768,"code":30869,"language":25770,"meta":236,"style":236},"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",[23,30871,30872,30883,30887,30898,30902,30913,30917,30928,30932],{"__ignoreMap":236},[240,30873,30874,30876,30878,30880],{"class":242,"line":243},[240,30875,28499],{"class":436},[240,30877,30843],{"class":443},[240,30879,30702],{"class":443},[240,30881,30882],{"class":443}," tungchiahui\u002Fros-noetic-focal:latest\n",[240,30884,30885],{"class":242,"line":250},[240,30886,4353],{"emptyLinePlaceholder":2051},[240,30888,30889,30891,30893,30895],{"class":242,"line":261},[240,30890,28499],{"class":436},[240,30892,30843],{"class":443},[240,30894,30719],{"class":443},[240,30896,30897],{"class":443}," tungchiahui\u002Fros-humble-jammy:latest\n",[240,30899,30900],{"class":242,"line":277},[240,30901,4353],{"emptyLinePlaceholder":2051},[240,30903,30904,30906,30908,30910],{"class":242,"line":294},[240,30905,28499],{"class":436},[240,30907,30843],{"class":443},[240,30909,30736],{"class":443},[240,30911,30912],{"class":443}," tungchiahui\u002Fros-jazzy-noble:latest\n",[240,30914,30915],{"class":242,"line":309},[240,30916,4353],{"emptyLinePlaceholder":2051},[240,30918,30919,30921,30923,30925],{"class":242,"line":529},[240,30920,28499],{"class":436},[240,30922,30843],{"class":443},[240,30924,30753],{"class":443},[240,30926,30927],{"class":443}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[240,30929,30930],{"class":242,"line":549},[240,30931,4353],{"emptyLinePlaceholder":2051},[240,30933,30934,30936,30938,30940],{"class":242,"line":569},[240,30935,28499],{"class":436},[240,30937,30843],{"class":443},[240,30939,30770],{"class":443},[240,30941,30942],{"class":443}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[1826,30944,30945],{"start":250},[1829,30946,30947],{},"推送镜像到 Docker Hub",[19,30949,30950],{},"使用以下命令将镜像推送到 Docker Hub：",[231,30952,30954],{"className":25768,"code":30953,"language":25770,"meta":236,"style":236},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[23,30955,30956],{"__ignoreMap":236},[240,30957,30958,30960,30963,30965,30967,30969,30971],{"class":242,"line":243},[240,30959,28499],{"class":436},[240,30961,30962],{"class":443}," push",[240,30964,30848],{"class":288},[240,30966,30851],{"class":443},[240,30968,30854],{"class":257},[240,30970,3053],{"class":288},[240,30972,30973],{"class":443},"\u002Fros-noetic-jazzy-noble:latest\n",[19,30975,16582],{},[231,30977,30979],{"className":25768,"code":30978,"language":25770,"meta":236,"style":236},"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",[23,30980,30981,30989,30993,31001,31005,31013,31017,31026,31030,31038,31042],{"__ignoreMap":236},[240,30982,30983,30985,30987],{"class":242,"line":243},[240,30984,28499],{"class":436},[240,30986,30962],{"class":443},[240,30988,30882],{"class":443},[240,30990,30991],{"class":242,"line":250},[240,30992,4353],{"emptyLinePlaceholder":2051},[240,30994,30995,30997,30999],{"class":242,"line":261},[240,30996,28499],{"class":436},[240,30998,30962],{"class":443},[240,31000,30897],{"class":443},[240,31002,31003],{"class":242,"line":277},[240,31004,4353],{"emptyLinePlaceholder":2051},[240,31006,31007,31009,31011],{"class":242,"line":294},[240,31008,28499],{"class":436},[240,31010,30962],{"class":443},[240,31012,30912],{"class":443},[240,31014,31015],{"class":242,"line":309},[240,31016,4353],{"emptyLinePlaceholder":2051},[240,31018,31019,31021,31023],{"class":242,"line":529},[240,31020,28499],{"class":436},[240,31022,30962],{"class":443},[240,31024,31025],{"class":443}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[240,31027,31028],{"class":242,"line":549},[240,31029,4353],{"emptyLinePlaceholder":2051},[240,31031,31032,31034,31036],{"class":242,"line":569},[240,31033,28499],{"class":436},[240,31035,30962],{"class":443},[240,31037,30942],{"class":443},[240,31039,31040],{"class":242,"line":589},[240,31041,4353],{"emptyLinePlaceholder":2051},[240,31043,31044,31046,31048],{"class":242,"line":715},[240,31045,28499],{"class":436},[240,31047,30962],{"class":443},[240,31049,31050],{"class":443}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[1826,31052,31053],{"start":261},[1829,31054,31055],{},"验证推送成功",[19,31057,31058],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[19,31060,31061],{},[68,31062,5736],{},[3100,31064,31065,31068],{},[1829,31066,31067],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[1829,31069,31070],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[19,31072,31073],{},[219,31074],{"alt":236,"src":31075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[19,31077,31078],{},[219,31079],{"alt":236,"src":31080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[23945,31082,31084],{"id":31083},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[19,31086,31087,31088,31091,31092,31095],{},"如果您想在 ",[68,31089,31090],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[68,31093,31094],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[19,31097,31098,31099],{},"1. ",[68,31100,31101],{},"启用 Docker 跨平台构建",[19,31103,31104],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[19,31106,31107],{},"第一步：启用 buildx（只需执行一次）",[231,31109,31111],{"className":25768,"code":31110,"language":25770,"meta":236,"style":236},"docker buildx create --name multiarch_builder --use\n",[23,31112,31113],{"__ignoreMap":236},[240,31114,31115,31117,31120,31123,31126,31129],{"class":242,"line":243},[240,31116,28499],{"class":436},[240,31118,31119],{"class":443}," buildx",[240,31121,31122],{"class":443}," create",[240,31124,31125],{"class":264}," --name",[240,31127,31128],{"class":443}," multiarch_builder",[240,31130,31131],{"class":264}," --use\n",[19,31133,31134],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[19,31136,31137],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[231,31139,31141],{"className":25768,"code":31140,"language":25770,"meta":236,"style":236},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[23,31142,31143],{"__ignoreMap":236},[240,31144,31145,31147,31149,31151,31154,31157,31160,31163],{"class":242,"line":243},[240,31146,28499],{"class":436},[240,31148,29176],{"class":443},[240,31150,29179],{"class":264},[240,31152,31153],{"class":264}," --privileged",[240,31155,31156],{"class":443}," multiarch\u002Fqemu-user-static",[240,31158,31159],{"class":264}," --reset",[240,31161,31162],{"class":264}," -p",[240,31164,31165],{"class":443}," yes\n",[19,31167,31168],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[19,31170,31171],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[231,31173,31175],{"className":25768,"code":31174,"language":25770,"meta":236,"style":236},"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",[23,31176,31177,31219,31223,31228,31238,31248,31257,31263,31267,31271,31281,31289,31298,31304,31308,31312,31322,31330,31339,31345,31349,31353,31363,31371,31380,31386,31390,31394,31404,31412,31421,31427,31431,31435,31445,31453,31462,31468,31472,31476,31486,31494,31503,31509,31513,31517,31527,31535,31544,31550,31554,31558,31568,31576,31585,31591,31595,31599,31610,31618,31627,31633],{"__ignoreMap":236},[240,31178,31179,31181,31183,31185,31188,31191,31193,31195,31198,31200,31202,31204,31206,31209,31212,31214,31217],{"class":242,"line":243},[240,31180,28499],{"class":436},[240,31182,31119],{"class":443},[240,31184,30678],{"class":443},[240,31186,31187],{"class":264}," --platform",[240,31189,31190],{"class":443}," linux\u002Famd64,linux\u002Farm64",[240,31192,30681],{"class":264},[240,31194,30848],{"class":288},[240,31196,31197],{"class":443},"你的镜像",[240,31199,30854],{"class":257},[240,31201,3053],{"class":288},[240,31203,2954],{"class":443},[240,31205,431],{"class":288},[240,31207,31208],{"class":443},"标",[240,31210,31211],{"class":257},"签",[240,31213,3053],{"class":288},[240,31215,31216],{"class":264}," --push",[240,31218,30687],{"class":443},[240,31220,31221],{"class":242,"line":250},[240,31222,4353],{"emptyLinePlaceholder":2051},[240,31224,31225],{"class":242,"line":261},[240,31226,31227],{"class":246},"# 例子：\n",[240,31229,31230,31232,31234,31236],{"class":242,"line":277},[240,31231,28499],{"class":436},[240,31233,31119],{"class":443},[240,31235,30678],{"class":443},[240,31237,26625],{"class":264},[240,31239,31240,31243,31246],{"class":242,"line":294},[240,31241,31242],{"class":257},"--platform ",[240,31244,31245],{"class":443},"linux\u002Famd64,linux\u002Farm64",[240,31247,26625],{"class":264},[240,31249,31250,31252,31255],{"class":242,"line":309},[240,31251,30681],{"class":264},[240,31253,31254],{"class":443}," tungchiahui\u002Fros:noetic-focal",[240,31256,26625],{"class":264},[240,31258,31259,31261],{"class":242,"line":529},[240,31260,31216],{"class":264},[240,31262,26625],{"class":264},[240,31264,31265],{"class":242,"line":549},[240,31266,30687],{"class":443},[240,31268,31269],{"class":242,"line":569},[240,31270,4353],{"emptyLinePlaceholder":2051},[240,31272,31273,31275,31277,31279],{"class":242,"line":589},[240,31274,28499],{"class":436},[240,31276,31119],{"class":443},[240,31278,30678],{"class":443},[240,31280,26625],{"class":264},[240,31282,31283,31285,31287],{"class":242,"line":715},[240,31284,31242],{"class":257},[240,31286,31245],{"class":443},[240,31288,26625],{"class":264},[240,31290,31291,31293,31296],{"class":242,"line":727},[240,31292,30681],{"class":264},[240,31294,31295],{"class":443}," tungchiahui\u002Fros:humble-jammy",[240,31297,26625],{"class":264},[240,31299,31300,31302],{"class":242,"line":1730},[240,31301,31216],{"class":264},[240,31303,26625],{"class":264},[240,31305,31306],{"class":242,"line":3582},[240,31307,30687],{"class":443},[240,31309,31310],{"class":242,"line":3596},[240,31311,4353],{"emptyLinePlaceholder":2051},[240,31313,31314,31316,31318,31320],{"class":242,"line":3601},[240,31315,28499],{"class":436},[240,31317,31119],{"class":443},[240,31319,30678],{"class":443},[240,31321,26625],{"class":264},[240,31323,31324,31326,31328],{"class":242,"line":3607},[240,31325,31242],{"class":257},[240,31327,31245],{"class":443},[240,31329,26625],{"class":264},[240,31331,31332,31334,31337],{"class":242,"line":3628},[240,31333,30681],{"class":264},[240,31335,31336],{"class":443}," tungchiahui\u002Fros:jazzy-noble",[240,31338,26625],{"class":264},[240,31340,31341,31343],{"class":242,"line":3633},[240,31342,31216],{"class":264},[240,31344,26625],{"class":264},[240,31346,31347],{"class":242,"line":3647},[240,31348,30687],{"class":443},[240,31350,31351],{"class":242,"line":3652},[240,31352,4353],{"emptyLinePlaceholder":2051},[240,31354,31355,31357,31359,31361],{"class":242,"line":3681},[240,31356,28266],{"class":436},[240,31358,31119],{"class":443},[240,31360,30678],{"class":443},[240,31362,26625],{"class":264},[240,31364,31365,31367,31369],{"class":242,"line":3686},[240,31366,31242],{"class":257},[240,31368,31245],{"class":443},[240,31370,26625],{"class":264},[240,31372,31373,31375,31378],{"class":242,"line":3703},[240,31374,30681],{"class":264},[240,31376,31377],{"class":443}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[240,31379,26625],{"class":264},[240,31381,31382,31384],{"class":242,"line":3708},[240,31383,31216],{"class":264},[240,31385,26625],{"class":264},[240,31387,31388],{"class":242,"line":3713},[240,31389,30687],{"class":443},[240,31391,31392],{"class":242,"line":3718},[240,31393,4353],{"emptyLinePlaceholder":2051},[240,31395,31396,31398,31400,31402],{"class":242,"line":3732},[240,31397,28499],{"class":436},[240,31399,31119],{"class":443},[240,31401,30678],{"class":443},[240,31403,26625],{"class":264},[240,31405,31406,31408,31410],{"class":242,"line":3737},[240,31407,31242],{"class":257},[240,31409,31245],{"class":443},[240,31411,26625],{"class":264},[240,31413,31414,31416,31419],{"class":242,"line":4530},[240,31415,30681],{"class":264},[240,31417,31418],{"class":443}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[240,31420,26625],{"class":264},[240,31422,31423,31425],{"class":242,"line":4544},[240,31424,31216],{"class":264},[240,31426,26625],{"class":264},[240,31428,31429],{"class":242,"line":4552},[240,31430,30687],{"class":443},[240,31432,31433],{"class":242,"line":4557},[240,31434,4353],{"emptyLinePlaceholder":2051},[240,31436,31437,31439,31441,31443],{"class":242,"line":4563},[240,31438,28266],{"class":436},[240,31440,31119],{"class":443},[240,31442,30678],{"class":443},[240,31444,26625],{"class":264},[240,31446,31447,31449,31451],{"class":242,"line":4569},[240,31448,31242],{"class":257},[240,31450,31245],{"class":443},[240,31452,26625],{"class":264},[240,31454,31455,31457,31460],{"class":242,"line":4574},[240,31456,30681],{"class":264},[240,31458,31459],{"class":443}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[240,31461,26625],{"class":264},[240,31463,31464,31466],{"class":242,"line":9899},[240,31465,31216],{"class":264},[240,31467,26625],{"class":264},[240,31469,31470],{"class":242,"line":9923},[240,31471,30687],{"class":443},[240,31473,31474],{"class":242,"line":9928},[240,31475,4353],{"emptyLinePlaceholder":2051},[240,31477,31478,31480,31482,31484],{"class":242,"line":9934},[240,31479,28499],{"class":436},[240,31481,31119],{"class":443},[240,31483,30678],{"class":443},[240,31485,26625],{"class":264},[240,31487,31488,31490,31492],{"class":242,"line":9961},[240,31489,31242],{"class":257},[240,31491,31245],{"class":443},[240,31493,26625],{"class":264},[240,31495,31496,31498,31501],{"class":242,"line":9966},[240,31497,30681],{"class":264},[240,31499,31500],{"class":443}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[240,31502,26625],{"class":264},[240,31504,31505,31507],{"class":242,"line":9972},[240,31506,31216],{"class":264},[240,31508,26625],{"class":264},[240,31510,31511],{"class":242,"line":9984},[240,31512,30687],{"class":443},[240,31514,31515],{"class":242,"line":9996},[240,31516,4353],{"emptyLinePlaceholder":2051},[240,31518,31519,31521,31523,31525],{"class":242,"line":10008},[240,31520,28499],{"class":436},[240,31522,31119],{"class":443},[240,31524,30678],{"class":443},[240,31526,26625],{"class":264},[240,31528,31529,31531,31533],{"class":242,"line":11667},[240,31530,31242],{"class":257},[240,31532,31245],{"class":443},[240,31534,26625],{"class":264},[240,31536,31537,31539,31542],{"class":242,"line":11692},[240,31538,30681],{"class":264},[240,31540,31541],{"class":443}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[240,31543,26625],{"class":264},[240,31545,31546,31548],{"class":242,"line":11715},[240,31547,31216],{"class":264},[240,31549,26625],{"class":264},[240,31551,31552],{"class":242,"line":11739},[240,31553,30687],{"class":443},[240,31555,31556],{"class":242,"line":11744},[240,31557,4353],{"emptyLinePlaceholder":2051},[240,31559,31560,31562,31564,31566],{"class":242,"line":11749},[240,31561,28266],{"class":436},[240,31563,31119],{"class":443},[240,31565,30678],{"class":443},[240,31567,26625],{"class":264},[240,31569,31570,31572,31574],{"class":242,"line":11754},[240,31571,31242],{"class":257},[240,31573,31245],{"class":443},[240,31575,26625],{"class":264},[240,31577,31578,31580,31583],{"class":242,"line":11763},[240,31579,30681],{"class":264},[240,31581,31582],{"class":443}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[240,31584,26625],{"class":264},[240,31586,31587,31589],{"class":242,"line":11768},[240,31588,31216],{"class":264},[240,31590,26625],{"class":264},[240,31592,31593],{"class":242,"line":11774},[240,31594,30687],{"class":443},[240,31596,31597],{"class":242,"line":11795},[240,31598,4353],{"emptyLinePlaceholder":2051},[240,31600,31601,31604,31606,31608],{"class":242,"line":11801},[240,31602,31603],{"class":436},"  docker",[240,31605,31119],{"class":443},[240,31607,30678],{"class":443},[240,31609,26625],{"class":264},[240,31611,31612,31614,31616],{"class":242,"line":11815},[240,31613,31242],{"class":257},[240,31615,31245],{"class":443},[240,31617,26625],{"class":264},[240,31619,31620,31622,31625],{"class":242,"line":11821},[240,31621,30681],{"class":264},[240,31623,31624],{"class":443}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[240,31626,26625],{"class":264},[240,31628,31629,31631],{"class":242,"line":11848},[240,31630,31216],{"class":264},[240,31632,26625],{"class":264},[240,31634,31635],{"class":242,"line":11857},[240,31636,30687],{"class":443},[19,31638,31639],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[19,31641,31642],{},[219,31643],{"alt":236,"src":31644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[19,31646,31647],{},[219,31648],{"alt":236,"src":31649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[23945,31651,31653],{"id":31652},"_623清除构建缓存","6.2.3.清除构建缓存",[231,31655,31657],{"className":25768,"code":31656,"language":25770,"meta":236,"style":236},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[23,31658,31659,31664],{"__ignoreMap":236},[240,31660,31661],{"class":242,"line":243},[240,31662,31663],{"class":246},"# 清理BuildKit构建缓存\n",[240,31665,31666,31668,31671,31674],{"class":242,"line":250},[240,31667,28499],{"class":436},[240,31669,31670],{"class":443}," builder",[240,31672,31673],{"class":443}," prune",[240,31675,31676],{"class":264}," -f\n",[19,31678,31679],{},[219,31680],{"alt":236,"src":31681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[32,31683,31685],{"id":31684},"_63补充","6.3.补充",[23945,31687,31689],{"id":31688},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[19,31691,31692],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[19,31694,31695],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[19,31697,31698],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[231,31700,31702],{"className":25768,"code":31701,"language":25770,"meta":236,"style":236},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[23,31703,31704,31711],{"__ignoreMap":236},[240,31705,31706,31708],{"class":242,"line":243},[240,31707,29316],{"class":436},[240,31709,31710],{"class":443}," nginx\n",[240,31712,31713,31715,31718,31721,31723],{"class":242,"line":250},[240,31714,30501],{"class":436},[240,31716,31717],{"class":443}," echo",[240,31719,31720],{"class":443}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[240,31722,28168],{"class":288},[240,31724,31725],{"class":443}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[19,31727,31728],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[19,31730,31731],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[231,31733,31735],{"className":25768,"code":31734,"language":25770,"meta":236,"style":236},"docker build -t nginx:tuling .\n",[23,31736,31737],{"__ignoreMap":236},[240,31738,31739,31741,31743,31745,31748],{"class":242,"line":243},[240,31740,28499],{"class":436},[240,31742,30678],{"class":443},[240,31744,30681],{"class":264},[240,31746,31747],{"class":443}," nginx:tuling",[240,31749,30687],{"class":443},[19,31751,31752],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[19,31754,31755],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[231,31757,31759],{"className":25768,"code":31758,"language":25770,"meta":236,"style":236},"docker run -d -p 92:80 nginx:tuling\n",[23,31760,31761],{"__ignoreMap":236},[240,31762,31763,31765,31767,31770,31772,31775],{"class":242,"line":243},[240,31764,28499],{"class":436},[240,31766,29176],{"class":443},[240,31768,31769],{"class":264}," -d",[240,31771,31162],{"class":264},[240,31773,31774],{"class":443}," 92:80",[240,31776,31777],{"class":443}," nginx:tuling\n",[19,31779,31780,31781],{},"4、访问 ",[254,31782,31785],{"href":31783,"rel":31784},"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",[25811],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[19,31787,31788],{},[219,31789],{"alt":236,"src":31790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[19,31792,31793],{},[219,31794],{"alt":236,"src":31795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[23945,31797,31799],{"id":31798},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[19,31801,31802],{},"只需要知道大体流程即可",[19,31804,31805],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[19,31807,31808],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[19,31810,31811],{},"2、在Dockerfile中添加以下内容",[231,31813,31815],{"className":28037,"code":31814,"language":28039,"meta":236,"style":236},"# 基于哪个镜像\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",[23,31816,31817,31822,31827,31832,31837,31842,31847,31852],{"__ignoreMap":236},[240,31818,31819],{"class":242,"line":243},[240,31820,31821],{},"# 基于哪个镜像\n",[240,31823,31824],{"class":242,"line":250},[240,31825,31826],{},"From java:8\n",[240,31828,31829],{"class":242,"line":261},[240,31830,31831],{},"# 复制文件到容器\n",[240,31833,31834],{"class":242,"line":277},[240,31835,31836],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[240,31838,31839],{"class":242,"line":294},[240,31840,31841],{},"# 声明需要暴露的端口\n",[240,31843,31844],{"class":242,"line":309},[240,31845,31846],{},"EXPOSE 8877\n",[240,31848,31849],{"class":242,"line":529},[240,31850,31851],{},"# 配置容器启动后执行的命令\n",[240,31853,31854],{"class":242,"line":549},[240,31855,31856],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[19,31858,31859],{},"3、使用docker build命令构建镜像",[231,31861,31863],{"className":25768,"code":31862,"language":25770,"meta":236,"style":236},"docker build -t tulingmall-member:0.0.5 .\n",[23,31864,31865],{"__ignoreMap":236},[240,31866,31867,31869,31871,31873,31876],{"class":242,"line":243},[240,31868,28499],{"class":436},[240,31870,30678],{"class":443},[240,31872,30681],{"class":264},[240,31874,31875],{"class":443}," tulingmall-member:0.0.5",[240,31877,30687],{"class":443},[19,31879,31880],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[19,31882,31883],{},[219,31884],{"alt":236,"src":31885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[19,31887,31888],{},"4、启动镜像，加-d可在后台启动",[231,31890,31892],{"className":25768,"code":31891,"language":25770,"meta":236,"style":236},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[23,31893,31894],{"__ignoreMap":236},[240,31895,31896,31898,31900,31902,31904,31907],{"class":242,"line":243},[240,31897,28499],{"class":436},[240,31899,29176],{"class":443},[240,31901,31769],{"class":264},[240,31903,31162],{"class":264},[240,31905,31906],{"class":443}," 8877:8877",[240,31908,31909],{"class":443}," tulingmall-member:0.0.5\n",[19,31911,31912],{},"加上JVM参数：",[231,31914,31916],{"className":25768,"code":31915,"language":25770,"meta":236,"style":236},"# --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",[23,31917,31918,31923,31938,31948,31957,31964],{"__ignoreMap":236},[240,31919,31920],{"class":242,"line":243},[240,31921,31922],{"class":246},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[240,31924,31925,31927,31929,31932,31934,31936],{"class":242,"line":250},[240,31926,28499],{"class":436},[240,31928,29176],{"class":443},[240,31930,31931],{"class":264},"  -d",[240,31933,31162],{"class":264},[240,31935,31906],{"class":443},[240,31937,26625],{"class":264},[240,31939,31940,31942,31945],{"class":242,"line":261},[240,31941,30074],{"class":257},[240,31943,31944],{"class":443},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[240,31946,31947],{"class":264},"  \\\n",[240,31949,31950,31952,31955],{"class":242,"line":277},[240,31951,30074],{"class":257},[240,31953,31954],{"class":443},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[240,31956,31947],{"class":264},[240,31958,31959,31962],{"class":242,"line":294},[240,31960,31961],{"class":257},"--cap-add=SYS_PTRACE  ",[240,31963,28121],{"class":264},[240,31965,31966],{"class":242,"line":309},[240,31967,31968],{"class":257},"tulingmall-member:0.0.5\n",[19,31970,31971],{},"5、访问会员服务接口",[19,31973,31974],{},[219,31975],{"alt":236,"src":31976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[23945,31978,31980],{"id":31979},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[19,31982,31983],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[19,31985,31986,31987],{},"阿里云docker镜像仓库：",[254,31988,31989],{"href":31989,"rel":31990},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[25811],[19,31992,31993],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[19,31995,31996],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[19,31998,31999],{},[219,32000],{"alt":236,"src":32001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[19,32003,32004],{},"要把镜像推送到镜像仓库",[231,32006,32008],{"className":25768,"code":32007,"language":25770,"meta":236,"style":236},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[23,32009,32010],{"__ignoreMap":236},[240,32011,32012,32014,32016,32018],{"class":242,"line":243},[240,32013,28499],{"class":436},[240,32015,30843],{"class":443},[240,32017,31875],{"class":443},[240,32019,32020],{"class":443}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[19,32022,32023],{},"最后将镜像推送到远程仓库",[231,32025,32027],{"className":25768,"code":32026,"language":25770,"meta":236,"style":236},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[23,32028,32029],{"__ignoreMap":236},[240,32030,32031,32033,32035],{"class":242,"line":243},[240,32032,28499],{"class":436},[240,32034,30962],{"class":443},[240,32036,32020],{"class":443},[2019,32038,32039],{},"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":236,"searchDepth":250,"depth":250,"links":32041},[32042,32043,32044],{"id":30429,"depth":261,"text":30430},{"id":30658,"depth":261,"text":30659},{"id":31684,"depth":261,"text":31685},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":30421,"description":236},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":32051,"title":32052,"body":32053,"description":236,"extension":2049,"meta":32196,"navigation":2051,"path":32197,"seo":32198,"stem":32199,"__hash__":32200},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":32054,"toc":32194},[32055,32058,32063,32068,32071,32076,32081,32084,32089,32094,32097,32102,32105,32108,32111,32114,32117,32120,32140,32162,32165,32168,32188,32191],[10,32056,32052],{"id":32057},"_7vscode远程开发",[1826,32059,32060],{},[1829,32061,32062],{},"插件1：微软Docker工具",[19,32064,32065],{},[219,32066],{"alt":236,"src":32067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[19,32069,32070],{},"docker扩展插件已经进化为container tools了，请安装container tools",[19,32072,32073],{},[219,32074],{"alt":236,"src":32075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[1826,32077,32078],{"start":250},[1829,32079,32080],{},"插件2：微软Docker远程开发工具",[19,32082,32083],{},"下面这是远程开发的插件。",[19,32085,32086],{},[219,32087],{"alt":236,"src":32088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[19,32090,32091],{},[219,32092],{"alt":236,"src":32093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[19,32095,32096],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[19,32098,32099],{},[219,32100],{"alt":236,"src":32101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[19,32103,32104],{},"安装完拓展之后，vscode进行链接：",[19,32106,32107],{},"1.按ctrl+shift+p",[19,32109,32110],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[19,32112,32113],{},"3.选择目前运行的容器",[19,32115,32116],{},"4.VS Code 会在新窗口中打开并连接到容器",[19,32118,32119],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[231,32121,32123],{"className":25768,"code":32122,"language":25770,"meta":236,"style":236},"docker run -v 主机目录:容器目录 image-name\n",[23,32124,32125],{"__ignoreMap":236},[240,32126,32127,32129,32131,32134,32137],{"class":242,"line":243},[240,32128,28499],{"class":436},[240,32130,29176],{"class":443},[240,32132,32133],{"class":264}," -v",[240,32135,32136],{"class":443}," 主机目录:容器目录",[240,32138,32139],{"class":443}," image-name\n",[231,32141,32143],{"className":25768,"code":32142,"language":25770,"meta":236,"style":236},"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",[23,32144,32145],{"__ignoreMap":236},[240,32146,32147,32149,32151,32154,32156,32159],{"class":242,"line":243},[240,32148,28499],{"class":436},[240,32150,29176],{"class":443},[240,32152,32153],{"class":264}," -it",[240,32155,32133],{"class":264},[240,32157,32158],{"class":443}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[240,32160,32161],{"class":443}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[19,32163,32164],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[19,32166,32167],{},"查看挂载情况：",[231,32169,32171],{"className":25768,"code":32170,"language":25770,"meta":236,"style":236},"mount | grep -i project\n",[23,32172,32173],{"__ignoreMap":236},[240,32174,32175,32178,32180,32183,32185],{"class":242,"line":243},[240,32176,32177],{"class":436},"mount",[240,32179,27056],{"class":288},[240,32181,32182],{"class":436}," grep",[240,32184,28376],{"class":264},[240,32186,32187],{"class":443}," project\n",[19,32189,32190],{},"也可以通过ls来进行查看",[2019,32192,32193],{},"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":236,"searchDepth":250,"depth":250,"links":32195},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":32052,"description":236},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":32202,"title":32203,"body":32204,"description":2048,"extension":2049,"meta":32208,"navigation":2051,"path":32210,"seo":32211,"stem":32212,"__hash__":32213},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":32205,"toc":32206},[],{"title":236,"searchDepth":250,"depth":250,"links":32207},[],{"category":32209},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":32203,"description":2048},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":32215,"title":32216,"body":32217,"description":2048,"extension":2049,"meta":32221,"navigation":2051,"path":32222,"seo":32223,"stem":32224,"__hash__":32225},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":32218,"toc":32219},[],{"title":236,"searchDepth":250,"depth":250,"links":32220},[],{"category":32209},"\u002Fwiki\u002F2025-11-10-k8s",{"title":32216,"description":2048},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":32227,"title":32228,"body":32229,"description":2048,"extension":2049,"meta":32522,"navigation":2051,"path":32523,"seo":32524,"stem":32525,"__hash__":32526},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":32230,"toc":32520},[32231,32234,32242,32257,32262,32313,32316,32322,32509,32514,32517],[10,32232,32228],{"id":32233},"_1验证深度学习环境",[19,32235,32236,32237],{},"关于环境的安装，看",[254,32238,32241],{"href":32239,"rel":32240},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[25811],"Pytorch-->深度学习",[19,32243,32244,32245,32248,32249,32252,32253,32256],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[23,32246,32247],{},"pytorch-cuda=12.4"," 是一个“ ",[68,32250,32251],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[68,32254,32255],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[19,32258,32259],{},[219,32260],{"alt":236,"src":32261},"\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",[231,32263,32265],{"className":25768,"code":32264,"language":25770,"meta":236,"style":236},"# 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",[23,32266,32267,32272],{"__ignoreMap":236},[240,32268,32269],{"class":242,"line":243},[240,32270,32271],{"class":246},"# CUDA 12.4\n",[240,32273,32274,32277,32279,32282,32285,32288,32291,32294,32296,32299,32302,32305,32308,32310],{"class":242,"line":250},[240,32275,32276],{"class":436},"conda",[240,32278,25780],{"class":443},[240,32280,32281],{"class":443}," pytorch==",[240,32283,32284],{"class":264},"2.5.1",[240,32286,32287],{"class":443}," torchvision==",[240,32289,32290],{"class":264},"0.20.1",[240,32292,32293],{"class":443}," torchaudio==",[240,32295,32284],{"class":264},[240,32297,32298],{"class":443}," pytorch-cuda=",[240,32300,32301],{"class":264},"12.4",[240,32303,32304],{"class":264}," -c",[240,32306,32307],{"class":443}," pytorch",[240,32309,32304],{"class":264},[240,32311,32312],{"class":443}," nvidia\n",[19,32314,32315],{},"）：",[19,32317,32318],{},[254,32319,32320],{"href":32320,"rel":32321},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[25811],[231,32323,32327],{"className":32324,"code":32325,"language":32326,"meta":236,"style":236},"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",[23,32328,32329,32334,32342,32347,32357,32373,32378,32388,32425,32432,32444,32460,32465,32475,32487,32497],{"__ignoreMap":236},[240,32330,32331],{"class":242,"line":243},[240,32332,32333],{"class":246},"# 对深度学习环境进行测试\n",[240,32335,32336,32339],{"class":242,"line":250},[240,32337,32338],{"class":288},"import",[240,32340,32341],{"class":257}," torch\n",[240,32343,32344],{"class":242,"line":261},[240,32345,32346],{"class":246},"# 查看cuda是否被激活\n",[240,32348,32349,32352,32354],{"class":242,"line":277},[240,32350,32351],{"class":257},"flag",[240,32353,440],{"class":288},[240,32355,32356],{"class":257},"torch.cuda.is_available()\n",[240,32358,32359,32362,32364,32367,32370],{"class":242,"line":294},[240,32360,32361],{"class":264},"print",[240,32363,789],{"class":257},[240,32365,32366],{"class":443},"\"cuda:\"",[240,32368,32369],{"class":257},", flag)   ",[240,32371,32372],{"class":246},"#返回true的话说明被激活\n",[240,32374,32375],{"class":242,"line":309},[240,32376,32377],{"class":246},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[240,32379,32380,32383,32385],{"class":242,"line":529},[240,32381,32382],{"class":257},"ngpu",[240,32384,440],{"class":288},[240,32386,32387],{"class":264},"1\n",[240,32389,32390,32393,32395,32398,32401,32403,32406,32409,32412,32414,32416,32418,32420,32423],{"class":242,"line":549},[240,32391,32392],{"class":257},"device",[240,32394,440],{"class":288},[240,32396,32397],{"class":257},"torch.device(",[240,32399,32400],{"class":443},"\"cuda:0\"",[240,32402,3658],{"class":288},[240,32404,32405],{"class":257},"(torch.cuda.is_available() ",[240,32407,32408],{"class":288},"and",[240,32410,32411],{"class":257}," ngpu",[240,32413,3053],{"class":288},[240,32415,1274],{"class":264},[240,32417,1230],{"class":257},[240,32419,3655],{"class":288},[240,32421,32422],{"class":443}," \"cpu\"",[240,32424,2129],{"class":257},[240,32426,32427,32429],{"class":242,"line":569},[240,32428,32361],{"class":264},[240,32430,32431],{"class":257},"(device)\n",[240,32433,32434,32436,32439,32441],{"class":242,"line":589},[240,32435,32361],{"class":264},[240,32437,32438],{"class":257},"(torch.cuda.get_device_name(",[240,32440,1274],{"class":264},[240,32442,32443],{"class":257},"))\n",[240,32445,32446,32448,32451,32453,32455,32457],{"class":242,"line":715},[240,32447,32361],{"class":264},[240,32449,32450],{"class":257},"(torch.rand(",[240,32452,1692],{"class":264},[240,32454,2479],{"class":257},[240,32456,1692],{"class":264},[240,32458,32459],{"class":257},").cuda())\n",[240,32461,32462],{"class":242,"line":727},[240,32463,32464],{"class":246},"# 查看cuda和cudnn的版本\n",[240,32466,32467,32470,32472],{"class":242,"line":1730},[240,32468,32469],{"class":257},"cuda_version",[240,32471,440],{"class":288},[240,32473,32474],{"class":257},"torch.version.cuda\n",[240,32476,32477,32479,32481,32484],{"class":242,"line":3582},[240,32478,32361],{"class":264},[240,32480,789],{"class":257},[240,32482,32483],{"class":443},"\"cuda version\"",[240,32485,32486],{"class":257},",cuda_version)\n",[240,32488,32489,32492,32494],{"class":242,"line":3596},[240,32490,32491],{"class":257},"cudnn_version",[240,32493,440],{"class":288},[240,32495,32496],{"class":257},"torch.backends.cudnn.version()\n",[240,32498,32499,32501,32503,32506],{"class":242,"line":3601},[240,32500,32361],{"class":264},[240,32502,789],{"class":257},[240,32504,32505],{"class":443},"\"cudnn version\"",[240,32507,32508],{"class":257},",cudnn_version)\n",[19,32510,32511],{},[219,32512],{"alt":236,"src":32513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-002.png",[19,32515,32516],{},"cuda:0 指的是一块显卡",[2019,32518,32519],{},"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":236,"searchDepth":250,"depth":250,"links":32521},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":32228,"description":2048},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":32528,"title":32529,"body":32530,"description":2048,"extension":2049,"meta":52334,"navigation":2051,"path":52335,"seo":52336,"stem":52337,"__hash__":52338},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":32531,"toc":52328},[32532,32535,32539,32543,32546,32551,32556,32559,32564,32569,32574,32577,32581,32586,32590,32595,32598,32603,32606,32609,32612,32615,32620,32623,32628,32633,32638,32643,32646,32650,32653,32658,33262,33267,33270,33275,33278,33281,33745,33748,33751,33754,33757,35808,35811,35816,35821,36616,36619,36624,37402,37406,39065,39069,39783,39787,39791,39796,39801,39806,39809,39814,39819,39824,39829,39834,39838,39843,41125,41130,41133,41136,41139,41294,41297,41300,42516,42521,43216,43220,43224,43229,43234,43237,43242,43247,43252,43257,43262,43267,43272,43277,43282,43287,43292,43297,43302,43307,43312,43317,43322,43327,43332,43337,43342,43347,43352,43357,43362,43367,43372,43377,43382,43387,43391,43395,43398,44876,44880,46527,46531,47225,47229,47232,47235,47779,47782,47786,47789,49186,49190,49193,49771,51558,51562,51565,52325],[10,32533,32529],{"id":32534},"_2经典神经网络",[32,32536,32538],{"id":32537},"_21lenet与alexnet","2.1.LeNet与AlexNet",[23945,32540,32542],{"id":32541},"_211原理介绍","2.1.1.原理介绍",[19,32544,32545],{},"LeNet-5",[1826,32547,32548],{},[1829,32549,32550],{},"原理",[19,32552,32553],{},[219,32554],{"alt":236,"src":32555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[19,32557,32558],{},"B是batch批次；C是channel通道",[1826,32560,32561],{"start":250},[1829,32562,32563],{},"网络参数详细",[19,32565,32566],{},[219,32567],{"alt":236,"src":32568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-004.png",[19,32570,32571],{},[219,32572],{"alt":236,"src":32573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[19,32575,32576],{},"AlexNet",[1826,32578,32579],{},[1829,32580,32550],{},[19,32582,32583],{},[219,32584],{"alt":236,"src":32585},"\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",[1826,32587,32588],{"start":250},[1829,32589,32563],{},[19,32591,32592],{},[219,32593],{"alt":236,"src":32594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-007.png",[19,32596,32597],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[19,32599,32600],{},[219,32601],{"alt":236,"src":32602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[19,32604,32605],{},"数据处理中的图像增强操作:",[19,32607,32608],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[19,32610,32611],{},"①增加数据量，保证训练数据充足；②防止过拟合",[19,32613,32614],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[19,32616,32617],{},[219,32618],{"alt":236,"src":32619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-009.png",[19,32621,32622],{},"提升网络精确度的方法：LRN正则化",[19,32624,32625],{},[219,32626],{"alt":236,"src":32627},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-010.png",[19,32629,32630],{},[219,32631],{"alt":236,"src":32632},"\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",[1826,32634,32635],{"start":261},[1829,32636,32637],{},"AlexNet的总结",[19,32639,32640],{},[219,32641],{"alt":236,"src":32642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-012.png",[19,32644,32645],{},"比LeNet模型要深一丢丢",[23945,32647,32649],{"id":32648},"_212代码实现","2.1.2.代码实现",[19,32651,32652],{},"（1）LeNet",[1826,32654,32655],{},[1829,32656,32657],{},"模型搭建",[231,32659,32661],{"className":32324,"code":32660,"language":32326,"meta":236,"style":236},"# 导入库\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",[23,32662,32663,32668,32674,32679,32692,32697,32709,32713,32733,32738,32743,32754,32759,32778,32782,32787,32836,32848,32853,32882,32917,32944,32949,32961,32966,32986,33005,33024,33028,33033,33043,33060,33071,33086,33097,33108,33123,33138,33149,33156,33160,33174,33179,33202,33207,33212,33217,33221,33226,33231,33241],{"__ignoreMap":236},[240,32664,32665],{"class":242,"line":243},[240,32666,32667],{"class":246},"# 导入库\n",[240,32669,32670,32672],{"class":242,"line":250},[240,32671,32338],{"class":288},[240,32673,32341],{"class":257},[240,32675,32676],{"class":242,"line":261},[240,32677,32678],{"class":246},"# 导入神经网络层\n",[240,32680,32681,32684,32687,32689],{"class":242,"line":277},[240,32682,32683],{"class":288},"from",[240,32685,32686],{"class":257}," torch ",[240,32688,32338],{"class":288},[240,32690,32691],{"class":257}," nn\n",[240,32693,32694],{"class":242,"line":294},[240,32695,32696],{"class":246},"# 导入展示神经网络参数的包\n",[240,32698,32699,32701,32704,32706],{"class":242,"line":309},[240,32700,32683],{"class":288},[240,32702,32703],{"class":257}," torchsummary ",[240,32705,32338],{"class":288},[240,32707,32708],{"class":257}," summary\n",[240,32710,32711],{"class":242,"line":529},[240,32712,4353],{"emptyLinePlaceholder":2051},[240,32714,32715,32717,32720,32722,32725,32727,32730],{"class":242,"line":549},[240,32716,16643],{"class":288},[240,32718,32719],{"class":436}," LeNet",[240,32721,789],{"class":257},[240,32723,32724],{"class":436},"nn",[240,32726,2657],{"class":257},[240,32728,32729],{"class":436},"Module",[240,32731,32732],{"class":257},"):\n",[240,32734,32735],{"class":242,"line":569},[240,32736,32737],{"class":246},"    # 模型初始化:\n",[240,32739,32740],{"class":242,"line":589},[240,32741,32742],{"class":246},"    # 定义一些网络层和激活函数\n",[240,32744,32745,32748,32751],{"class":242,"line":715},[240,32746,32747],{"class":288},"    def",[240,32749,32750],{"class":264}," __init__",[240,32752,32753],{"class":257},"(self):\n",[240,32755,32756],{"class":242,"line":727},[240,32757,32758],{"class":246},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[240,32760,32761,32764,32767,32770,32773,32776],{"class":242,"line":1730},[240,32762,32763],{"class":264},"        super",[240,32765,32766],{"class":257},"(LeNet,",[240,32768,32769],{"class":264},"self",[240,32771,32772],{"class":257},").",[240,32774,32775],{"class":264},"__init__",[240,32777,3929],{"class":257},[240,32779,32780],{"class":242,"line":3582},[240,32781,4353],{"emptyLinePlaceholder":2051},[240,32783,32784],{"class":242,"line":3596},[240,32785,32786],{"class":246},"        # 定义网络层\n",[240,32788,32789,32792,32795,32797,32800,32803,32805,32807,32809,32812,32814,32816,32818,32821,32823,32825,32827,32830,32832,32834],{"class":242,"line":3601},[240,32790,32791],{"class":264},"        self",[240,32793,32794],{"class":257},".c1",[240,32796,440],{"class":288},[240,32798,32799],{"class":257},"nn.Conv2d(",[240,32801,32802],{"class":792},"in_channels",[240,32804,440],{"class":288},[240,32806,1643],{"class":264},[240,32808,2479],{"class":257},[240,32810,32811],{"class":792},"out_channels",[240,32813,440],{"class":288},[240,32815,2445],{"class":264},[240,32817,2479],{"class":257},[240,32819,32820],{"class":792},"kernel_size",[240,32822,440],{"class":288},[240,32824,1741],{"class":264},[240,32826,2479],{"class":257},[240,32828,32829],{"class":792},"padding",[240,32831,440],{"class":288},[240,32833,1668],{"class":264},[240,32835,2129],{"class":257},[240,32837,32838,32840,32843,32845],{"class":242,"line":3607},[240,32839,32791],{"class":264},[240,32841,32842],{"class":257},".sig",[240,32844,440],{"class":288},[240,32846,32847],{"class":257},"nn.Sigmoid()\n",[240,32849,32850],{"class":242,"line":3628},[240,32851,32852],{"class":246},"        # 定义池化\n",[240,32854,32855,32857,32860,32862,32865,32867,32869,32871,32873,32876,32878,32880],{"class":242,"line":3633},[240,32856,32791],{"class":264},[240,32858,32859],{"class":257},".s2",[240,32861,440],{"class":288},[240,32863,32864],{"class":257},"nn.AvgPool2d(",[240,32866,32820],{"class":792},[240,32868,440],{"class":288},[240,32870,1668],{"class":264},[240,32872,2479],{"class":257},[240,32874,32875],{"class":792},"stride",[240,32877,440],{"class":288},[240,32879,1668],{"class":264},[240,32881,2129],{"class":257},[240,32883,32884,32886,32889,32891,32893,32895,32897,32899,32901,32903,32905,32907,32909,32911,32913,32915],{"class":242,"line":3647},[240,32885,32791],{"class":264},[240,32887,32888],{"class":257},".c3",[240,32890,440],{"class":288},[240,32892,32799],{"class":257},[240,32894,32802],{"class":792},[240,32896,440],{"class":288},[240,32898,2445],{"class":264},[240,32900,2479],{"class":257},[240,32902,32811],{"class":792},[240,32904,440],{"class":288},[240,32906,2700],{"class":264},[240,32908,2479],{"class":257},[240,32910,32820],{"class":792},[240,32912,440],{"class":288},[240,32914,1741],{"class":264},[240,32916,2129],{"class":257},[240,32918,32919,32921,32924,32926,32928,32930,32932,32934,32936,32938,32940,32942],{"class":242,"line":3652},[240,32920,32791],{"class":264},[240,32922,32923],{"class":257},".s4",[240,32925,440],{"class":288},[240,32927,32864],{"class":257},[240,32929,32820],{"class":792},[240,32931,440],{"class":288},[240,32933,1668],{"class":264},[240,32935,2479],{"class":257},[240,32937,32875],{"class":792},[240,32939,440],{"class":288},[240,32941,1668],{"class":264},[240,32943,2129],{"class":257},[240,32945,32946],{"class":242,"line":3681},[240,32947,32948],{"class":246},"        # 定义平展层\n",[240,32950,32951,32953,32956,32958],{"class":242,"line":3686},[240,32952,32791],{"class":264},[240,32954,32955],{"class":257},".flatten",[240,32957,440],{"class":288},[240,32959,32960],{"class":257},"nn.Flatten()\n",[240,32962,32963],{"class":242,"line":3703},[240,32964,32965],{"class":246},"        # 定义全连接层\n",[240,32967,32968,32970,32973,32975,32978,32980,32982,32984],{"class":242,"line":3708},[240,32969,32791],{"class":264},[240,32971,32972],{"class":257},".f5",[240,32974,440],{"class":288},[240,32976,32977],{"class":257},"nn.Linear(",[240,32979,5939],{"class":264},[240,32981,2479],{"class":257},[240,32983,1575],{"class":264},[240,32985,2129],{"class":257},[240,32987,32988,32990,32993,32995,32997,32999,33001,33003],{"class":242,"line":3713},[240,32989,32791],{"class":264},[240,32991,32992],{"class":257},".f6",[240,32994,440],{"class":288},[240,32996,32977],{"class":257},[240,32998,1575],{"class":264},[240,33000,2479],{"class":257},[240,33002,2808],{"class":264},[240,33004,2129],{"class":257},[240,33006,33007,33009,33012,33014,33016,33018,33020,33022],{"class":242,"line":3718},[240,33008,32791],{"class":264},[240,33010,33011],{"class":257},".f7",[240,33013,440],{"class":288},[240,33015,32977],{"class":257},[240,33017,2808],{"class":264},[240,33019,2479],{"class":257},[240,33021,2546],{"class":264},[240,33023,2129],{"class":257},[240,33025,33026],{"class":242,"line":3732},[240,33027,4353],{"emptyLinePlaceholder":2051},[240,33029,33030],{"class":242,"line":3737},[240,33031,33032],{"class":246},"    # 写工具->写前向传播\n",[240,33034,33035,33037,33040],{"class":242,"line":4530},[240,33036,32747],{"class":288},[240,33038,33039],{"class":436}," forward",[240,33041,33042],{"class":257},"(self,x):\n",[240,33044,33045,33048,33050,33052,33055,33057],{"class":242,"line":4544},[240,33046,33047],{"class":257},"        x",[240,33049,440],{"class":288},[240,33051,32769],{"class":264},[240,33053,33054],{"class":257},".sig(",[240,33056,32769],{"class":264},[240,33058,33059],{"class":257},".c1(x))\n",[240,33061,33062,33064,33066,33068],{"class":242,"line":4552},[240,33063,33047],{"class":257},[240,33065,440],{"class":288},[240,33067,32769],{"class":264},[240,33069,33070],{"class":257},".s2(x)\n",[240,33072,33073,33075,33077,33079,33081,33083],{"class":242,"line":4557},[240,33074,33047],{"class":257},[240,33076,440],{"class":288},[240,33078,32769],{"class":264},[240,33080,33054],{"class":257},[240,33082,32769],{"class":264},[240,33084,33085],{"class":257},".c3(x))\n",[240,33087,33088,33090,33092,33094],{"class":242,"line":4563},[240,33089,33047],{"class":257},[240,33091,440],{"class":288},[240,33093,32769],{"class":264},[240,33095,33096],{"class":257},".s4(x)\n",[240,33098,33099,33101,33103,33105],{"class":242,"line":4569},[240,33100,33047],{"class":257},[240,33102,440],{"class":288},[240,33104,32769],{"class":264},[240,33106,33107],{"class":257},".flatten(x)\n",[240,33109,33110,33112,33114,33116,33118,33120],{"class":242,"line":4574},[240,33111,33047],{"class":257},[240,33113,440],{"class":288},[240,33115,32769],{"class":264},[240,33117,33054],{"class":257},[240,33119,32769],{"class":264},[240,33121,33122],{"class":257},".f5(x))\n",[240,33124,33125,33127,33129,33131,33133,33135],{"class":242,"line":9899},[240,33126,33047],{"class":257},[240,33128,440],{"class":288},[240,33130,32769],{"class":264},[240,33132,33054],{"class":257},[240,33134,32769],{"class":264},[240,33136,33137],{"class":257},".f6(x))\n",[240,33139,33140,33142,33144,33146],{"class":242,"line":9923},[240,33141,33047],{"class":257},[240,33143,440],{"class":288},[240,33145,32769],{"class":264},[240,33147,33148],{"class":257},".f7(x)\n",[240,33150,33151,33153],{"class":242,"line":9928},[240,33152,16701],{"class":288},[240,33154,33155],{"class":257}," x\n",[240,33157,33158],{"class":242,"line":9934},[240,33159,4353],{"emptyLinePlaceholder":2051},[240,33161,33162,33164,33167,33169,33172],{"class":242,"line":9961},[240,33163,3489],{"class":288},[240,33165,33166],{"class":264}," __name__",[240,33168,4901],{"class":288},[240,33170,33171],{"class":443},"\"__main__\"",[240,33173,5691],{"class":257},[240,33175,33176],{"class":242,"line":9966},[240,33177,33178],{"class":246},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[240,33180,33181,33184,33186,33188,33191,33193,33196,33198,33200],{"class":242,"line":9972},[240,33182,33183],{"class":257},"    device",[240,33185,440],{"class":288},[240,33187,32397],{"class":257},[240,33189,33190],{"class":443},"\"cuda\"",[240,33192,3658],{"class":288},[240,33194,33195],{"class":257}," torch.cuda.is_available() ",[240,33197,3655],{"class":288},[240,33199,32422],{"class":443},[240,33201,2129],{"class":257},[240,33203,33204],{"class":242,"line":9984},[240,33205,33206],{"class":246},"    # 如果就是想指定用cpu用下方代码:\n",[240,33208,33209],{"class":242,"line":9996},[240,33210,33211],{"class":246},"    # device=\"cpu\"\n",[240,33213,33214],{"class":242,"line":10008},[240,33215,33216],{"class":246},"    # print(device)\n",[240,33218,33219],{"class":242,"line":11667},[240,33220,4353],{"emptyLinePlaceholder":2051},[240,33222,33223],{"class":242,"line":11692},[240,33224,33225],{"class":246},"    # 实例化模型\n",[240,33227,33228],{"class":242,"line":11715},[240,33229,33230],{"class":246},"    # 将模型放到设备中去运行\n",[240,33232,33233,33236,33238],{"class":242,"line":11739},[240,33234,33235],{"class":257},"    model",[240,33237,440],{"class":288},[240,33239,33240],{"class":257},"LeNet().to(device)\n",[240,33242,33243,33246,33249,33251,33253,33255,33257,33259],{"class":242,"line":11744},[240,33244,33245],{"class":264},"    print",[240,33247,33248],{"class":257},"(summary(model,(",[240,33250,1643],{"class":264},[240,33252,2479],{"class":257},[240,33254,2996],{"class":264},[240,33256,2479],{"class":257},[240,33258,2996],{"class":264},[240,33260,33261],{"class":257},")))\n",[19,33263,33264],{},[219,33265],{"alt":236,"src":33266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-013.png",[19,33268,33269],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[1826,33271,33272],{"start":250},[1829,33273,33274],{},"训练",[19,33276,33277],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[19,33279,33280],{},"在训练之前可以将数据展示看一下",[231,33282,33284],{"className":32324,"code":33283,"language":32326,"meta":236,"style":236},"# 建立画图的函数，用于展示数据\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",[23,33285,33286,33291,33296,33308,33320,33333,33338,33350,33355,33367,33372,33384,33388,33392,33413,33425,33430,33451,33462,33466,33471,33489,33500,33505,33516,33521,33532,33536,33541,33556,33569,33574,33579,33592,33605,33618,33623,33627,33632,33652,33669,33689,33702,33715,33725,33740],{"__ignoreMap":236},[240,33287,33288],{"class":242,"line":243},[240,33289,33290],{"class":246},"# 建立画图的函数，用于展示数据\n",[240,33292,33293],{"class":242,"line":250},[240,33294,33295],{"class":246},"# torchvision中包含很多内置的数据集\n",[240,33297,33298,33300,33303,33305],{"class":242,"line":261},[240,33299,32683],{"class":288},[240,33301,33302],{"class":257}," sklearn.externals.array_api_compat.torch ",[240,33304,32338],{"class":288},[240,33306,33307],{"class":257}," squeeze\n",[240,33309,33310,33312,33315,33317],{"class":242,"line":277},[240,33311,32683],{"class":288},[240,33313,33314],{"class":257}," torchvision.datasets ",[240,33316,32338],{"class":288},[240,33318,33319],{"class":257}," FashionMNIST\n",[240,33321,33322,33324,33327,33330],{"class":242,"line":294},[240,33323,32338],{"class":288},[240,33325,33326],{"class":257}," numpy ",[240,33328,33329],{"class":288},"as",[240,33331,33332],{"class":257}," np\n",[240,33334,33335],{"class":242,"line":309},[240,33336,33337],{"class":246},"# 引入处理数据集的包\n",[240,33339,33340,33342,33345,33347],{"class":242,"line":529},[240,33341,32683],{"class":288},[240,33343,33344],{"class":257}," torchvision ",[240,33346,32338],{"class":288},[240,33348,33349],{"class":257}," transforms\n",[240,33351,33352],{"class":242,"line":549},[240,33353,33354],{"class":246},"# 从torch库中引入数据处理的包\n",[240,33356,33357,33359,33362,33364],{"class":242,"line":569},[240,33358,32338],{"class":288},[240,33360,33361],{"class":257}," torch.utils.data ",[240,33363,33329],{"class":288},[240,33365,33366],{"class":257}," Data\n",[240,33368,33369],{"class":242,"line":589},[240,33370,33371],{"class":246},"# 导入画图的库\n",[240,33373,33374,33376,33379,33381],{"class":242,"line":715},[240,33375,32338],{"class":288},[240,33377,33378],{"class":257}," matplotlib.pyplot ",[240,33380,33329],{"class":288},[240,33382,33383],{"class":257}," plt\n",[240,33385,33386],{"class":242,"line":727},[240,33387,4353],{"emptyLinePlaceholder":2051},[240,33389,33390],{"class":242,"line":1730},[240,33391,4353],{"emptyLinePlaceholder":2051},[240,33393,33394,33397,33399,33402,33405,33407,33410],{"class":242,"line":3582},[240,33395,33396],{"class":257},"train_data",[240,33398,440],{"class":288},[240,33400,33401],{"class":257},"FashionMNIST(",[240,33403,33404],{"class":792},"root",[240,33406,440],{"class":288},[240,33408,33409],{"class":443},"'.\u002Fdata'",[240,33411,33412],{"class":257},",\n",[240,33414,33415,33418,33420,33423],{"class":242,"line":3596},[240,33416,33417],{"class":792},"                        train",[240,33419,440],{"class":288},[240,33421,33422],{"class":264},"True",[240,33424,33412],{"class":257},[240,33426,33427],{"class":242,"line":3601},[240,33428,33429],{"class":246},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[240,33431,33432,33435,33437,33440,33443,33445,33448],{"class":242,"line":3607},[240,33433,33434],{"class":792},"                        transform",[240,33436,440],{"class":288},[240,33438,33439],{"class":257},"transforms.Compose([transforms.Resize(",[240,33441,33442],{"class":792},"size",[240,33444,440],{"class":288},[240,33446,33447],{"class":264},"224",[240,33449,33450],{"class":257},"),transforms.ToTensor()]),\n",[240,33452,33453,33456,33458,33460],{"class":242,"line":3628},[240,33454,33455],{"class":792},"                        download",[240,33457,440],{"class":288},[240,33459,33422],{"class":264},[240,33461,2129],{"class":257},[240,33463,33464],{"class":242,"line":3633},[240,33465,4353],{"emptyLinePlaceholder":2051},[240,33467,33468],{"class":242,"line":3647},[240,33469,33470],{"class":246},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[240,33472,33473,33476,33478,33481,33484,33486],{"class":242,"line":3652},[240,33474,33475],{"class":257},"train_loader",[240,33477,440],{"class":288},[240,33479,33480],{"class":257},"Data.DataLoader(",[240,33482,33483],{"class":792},"dataset",[240,33485,440],{"class":288},[240,33487,33488],{"class":257},"train_data,\n",[240,33490,33491,33494,33496,33498],{"class":242,"line":3681},[240,33492,33493],{"class":792},"                             batch_size",[240,33495,440],{"class":288},[240,33497,2310],{"class":264},[240,33499,33412],{"class":257},[240,33501,33502],{"class":242,"line":3686},[240,33503,33504],{"class":246},"                             # 数据是否打乱\n",[240,33506,33507,33510,33512,33514],{"class":242,"line":3703},[240,33508,33509],{"class":792},"                             shuffle",[240,33511,440],{"class":288},[240,33513,33422],{"class":264},[240,33515,33412],{"class":257},[240,33517,33518],{"class":242,"line":3708},[240,33519,33520],{"class":246},"                             # 规定加载数据的进程\n",[240,33522,33523,33526,33528,33530],{"class":242,"line":3713},[240,33524,33525],{"class":792},"                             num_workers",[240,33527,440],{"class":288},[240,33529,1274],{"class":264},[240,33531,2129],{"class":257},[240,33533,33534],{"class":242,"line":3718},[240,33535,4353],{"emptyLinePlaceholder":2051},[240,33537,33538],{"class":242,"line":3732},[240,33539,33540],{"class":246},"# 获得一个batch的数据\n",[240,33542,33543,33545,33548,33550,33553],{"class":242,"line":3737},[240,33544,4977],{"class":288},[240,33546,33547],{"class":257}," step,(b_x,b_y) ",[240,33549,27989],{"class":288},[240,33551,33552],{"class":264}," enumerate",[240,33554,33555],{"class":257},"(train_loader):\n",[240,33557,33558,33560,33563,33565,33567],{"class":242,"line":4530},[240,33559,5053],{"class":288},[240,33561,33562],{"class":257}," step ",[240,33564,3053],{"class":288},[240,33566,6045],{"class":264},[240,33568,5691],{"class":257},[240,33570,33571],{"class":242,"line":4544},[240,33572,33573],{"class":288},"        break\n",[240,33575,33576],{"class":242,"line":4552},[240,33577,33578],{"class":246},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[240,33580,33581,33584,33586,33589],{"class":242,"line":4557},[240,33582,33583],{"class":257},"batch_x",[240,33585,440],{"class":288},[240,33587,33588],{"class":257},"b_x.squeeze().numpy()  ",[240,33590,33591],{"class":246},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[240,33593,33594,33597,33599,33602],{"class":242,"line":4563},[240,33595,33596],{"class":257},"batch_y",[240,33598,440],{"class":288},[240,33600,33601],{"class":257},"b_y.numpy()   ",[240,33603,33604],{"class":246},"#将张量转换成功numpy数组\n",[240,33606,33607,33610,33612,33615],{"class":242,"line":4569},[240,33608,33609],{"class":257},"class_label",[240,33611,440],{"class":288},[240,33613,33614],{"class":257},"train_data.classes  ",[240,33616,33617],{"class":246},"#训练集标签\n",[240,33619,33620],{"class":242,"line":4574},[240,33621,33622],{"class":246},"# print(class_label)\n",[240,33624,33625],{"class":242,"line":9899},[240,33626,4353],{"emptyLinePlaceholder":2051},[240,33628,33629],{"class":242,"line":9923},[240,33630,33631],{"class":246},"# 可视化一个batch的图像\n",[240,33633,33634,33637,33640,33642,33644,33646,33648,33650],{"class":242,"line":9928},[240,33635,33636],{"class":257},"plt.figure(",[240,33638,33639],{"class":792},"figsize",[240,33641,440],{"class":288},[240,33643,789],{"class":257},[240,33645,2597],{"class":264},[240,33647,2479],{"class":257},[240,33649,1741],{"class":264},[240,33651,32443],{"class":257},[240,33653,33654,33656,33659,33661,33664,33666],{"class":242,"line":9934},[240,33655,4977],{"class":288},[240,33657,33658],{"class":257}," ii ",[240,33660,27989],{"class":288},[240,33662,33663],{"class":257}," np.arange(",[240,33665,9309],{"class":264},[240,33667,33668],{"class":257},"(batch_y)):\n",[240,33670,33671,33674,33676,33678,33680,33683,33685,33687],{"class":242,"line":9961},[240,33672,33673],{"class":257},"    plt.subplot(",[240,33675,1716],{"class":264},[240,33677,2479],{"class":257},[240,33679,2700],{"class":264},[240,33681,33682],{"class":257},",ii ",[240,33684,2580],{"class":288},[240,33686,27065],{"class":264},[240,33688,2129],{"class":257},[240,33690,33691,33694,33697,33699],{"class":242,"line":9966},[240,33692,33693],{"class":257},"    plt.imshow(batch_x[ii,:,:],",[240,33695,33696],{"class":792},"cmap",[240,33698,440],{"class":288},[240,33700,33701],{"class":257},"plt.cm.gray)\n",[240,33703,33704,33707,33709,33711,33713],{"class":242,"line":9972},[240,33705,33706],{"class":257},"    plt.title(class_label[batch_y[ii]],",[240,33708,33442],{"class":792},[240,33710,440],{"class":288},[240,33712,2546],{"class":264},[240,33714,2129],{"class":257},[240,33716,33717,33720,33723],{"class":242,"line":9984},[240,33718,33719],{"class":257},"    plt.axis(",[240,33721,33722],{"class":443},"\"off\"",[240,33724,2129],{"class":257},[240,33726,33727,33730,33733,33735,33738],{"class":242,"line":9996},[240,33728,33729],{"class":257},"    plt.subplots_adjust(",[240,33731,33732],{"class":792},"wspace",[240,33734,440],{"class":288},[240,33736,33737],{"class":264},"0.05",[240,33739,2129],{"class":257},[240,33741,33742],{"class":242,"line":10008},[240,33743,33744],{"class":257},"plt.show()\n",[19,33746,33747],{},"用matplotlib进行展示的过程可以后续再补",[19,33749,33750],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[19,33752,33753],{},"训练次数就是按照批次过整个训练集数据的次数",[19,33755,33756],{},"模型训练：",[231,33758,33760],{"className":32324,"code":33759,"language":32326,"meta":236,"style":236},"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",[23,33761,33762,33769,33776,33780,33792,33798,33809,33819,33829,33839,33849,33854,33866,33876,33880,33884,33889,33900,33913,33924,33941,33952,33991,34007,34019,34030,34035,34046,34062,34073,34084,34095,34102,34106,34111,34116,34120,34125,34135,34156,34160,34164,34169,34174,34179,34199,34203,34208,34218,34222,34227,34236,34241,34246,34251,34261,34265,34269,34274,34279,34289,34294,34304,34309,34318,34323,34332,34337,34346,34350,34355,34365,34369,34373,34378,34393,34421,34436,34440,34445,34450,34459,34464,34473,34478,34487,34492,34501,34506,34515,34520,34529,34534,34547,34552,34562,34567,34577,34583,34589,34595,34601,34612,34618,34638,34644,34655,34661,34667,34673,34679,34685,34691,34697,34717,34723,34739,34745,34759,34765,34780,34786,34795,34801,34810,34816,34822,34831,34837,34848,34854,34873,34879,34890,34896,34916,34932,34938,34952,34958,34964,34975,34981,34987,34997,35003,35014,35020,35030,35035,35041,35090,35137,35142,35148,35167,35173,35193,35199,35205,35215,35220,35226,35242,35287,35293,35299,35305,35316,35322,35328,35334,35352,35366,35375,35384,35393,35402,35408,35414,35422,35427,35433,35444,35450,35470,35476,35482,35488,35505,35511,35517,35523,35529,35535,35562,35586,35592,35598,35604,35615,35626,35632,35649,35672,35695,35701,35706,35715,35725,35731,35736,35742,35755,35761,35772,35783,35802],{"__ignoreMap":236},[240,33763,33764,33766],{"class":242,"line":243},[240,33765,32338],{"class":288},[240,33767,33768],{"class":257}," copy\n",[240,33770,33771,33773],{"class":242,"line":250},[240,33772,32338],{"class":288},[240,33774,33775],{"class":257}," time\n",[240,33777,33778],{"class":242,"line":261},[240,33779,4353],{"emptyLinePlaceholder":2051},[240,33781,33782,33784,33787,33789],{"class":242,"line":277},[240,33783,32338],{"class":288},[240,33785,33786],{"class":257}," pandas ",[240,33788,33329],{"class":288},[240,33790,33791],{"class":257}," pd\n",[240,33793,33794,33796],{"class":242,"line":294},[240,33795,32338],{"class":288},[240,33797,32341],{"class":257},[240,33799,33800,33802,33804,33806],{"class":242,"line":309},[240,33801,32683],{"class":288},[240,33803,33361],{"class":257},[240,33805,32338],{"class":288},[240,33807,33808],{"class":257}," Dataset\n",[240,33810,33811,33813,33815,33817],{"class":242,"line":529},[240,33812,32683],{"class":288},[240,33814,33314],{"class":257},[240,33816,32338],{"class":288},[240,33818,33319],{"class":257},[240,33820,33821,33823,33825,33827],{"class":242,"line":549},[240,33822,32683],{"class":288},[240,33824,33344],{"class":257},[240,33826,32338],{"class":288},[240,33828,33349],{"class":257},[240,33830,33831,33833,33835,33837],{"class":242,"line":569},[240,33832,32338],{"class":288},[240,33834,33361],{"class":257},[240,33836,33329],{"class":288},[240,33838,33366],{"class":257},[240,33840,33841,33843,33845,33847],{"class":242,"line":589},[240,33842,32338],{"class":288},[240,33844,33378],{"class":257},[240,33846,33329],{"class":288},[240,33848,33383],{"class":257},[240,33850,33851],{"class":242,"line":715},[240,33852,33853],{"class":246},"# 导入模型\n",[240,33855,33856,33858,33861,33863],{"class":242,"line":727},[240,33857,32683],{"class":288},[240,33859,33860],{"class":257}," model ",[240,33862,32338],{"class":288},[240,33864,33865],{"class":257}," LeNet\n",[240,33867,33868,33870,33872,33874],{"class":242,"line":1730},[240,33869,32683],{"class":288},[240,33871,32686],{"class":257},[240,33873,32338],{"class":288},[240,33875,32691],{"class":257},[240,33877,33878],{"class":242,"line":3582},[240,33879,4353],{"emptyLinePlaceholder":2051},[240,33881,33882],{"class":242,"line":3596},[240,33883,4353],{"emptyLinePlaceholder":2051},[240,33885,33886],{"class":242,"line":3601},[240,33887,33888],{"class":246},"# 处理训练集与验证集函数--->划分数据集\n",[240,33890,33891,33894,33897],{"class":242,"line":3607},[240,33892,33893],{"class":288},"def",[240,33895,33896],{"class":436}," train_val_data_process",[240,33898,33899],{"class":257},"():\n",[240,33901,33902,33905,33907,33909,33911],{"class":242,"line":3628},[240,33903,33904],{"class":257},"    train_data",[240,33906,440],{"class":288},[240,33908,33401],{"class":257},[240,33910,33409],{"class":443},[240,33912,33412],{"class":257},[240,33914,33915,33918,33920,33922],{"class":242,"line":3633},[240,33916,33917],{"class":792},"                            train",[240,33919,440],{"class":288},[240,33921,33422],{"class":264},[240,33923,33412],{"class":257},[240,33925,33926,33929,33931,33933,33935,33937,33939],{"class":242,"line":3647},[240,33927,33928],{"class":792},"                            transform",[240,33930,440],{"class":288},[240,33932,33439],{"class":257},[240,33934,33442],{"class":792},[240,33936,440],{"class":288},[240,33938,2996],{"class":264},[240,33940,33450],{"class":257},[240,33942,33943,33946,33948,33950],{"class":242,"line":3652},[240,33944,33945],{"class":792},"                            download",[240,33947,440],{"class":288},[240,33949,33422],{"class":264},[240,33951,2129],{"class":257},[240,33953,33954,33957,33959,33962,33965,33967,33970,33972,33974,33977,33979,33981,33984,33986,33988],{"class":242,"line":3681},[240,33955,33956],{"class":257},"    train_data,val_data",[240,33958,440],{"class":288},[240,33960,33961],{"class":257},"Data.random_split(train_data,[",[240,33963,33964],{"class":264},"round",[240,33966,789],{"class":257},[240,33968,33969],{"class":264},"0.8",[240,33971,2554],{"class":288},[240,33973,9309],{"class":264},[240,33975,33976],{"class":257},"(train_data)),",[240,33978,33964],{"class":264},[240,33980,789],{"class":257},[240,33982,33983],{"class":264},"0.2",[240,33985,2554],{"class":288},[240,33987,9309],{"class":264},[240,33989,33990],{"class":257},"(train_data))])\n",[240,33992,33993,33996,33998,34001,34003,34005],{"class":242,"line":3686},[240,33994,33995],{"class":257},"    train_dataloader ",[240,33997,440],{"class":288},[240,33999,34000],{"class":257}," Data.DataLoader(",[240,34002,33483],{"class":792},[240,34004,440],{"class":288},[240,34006,33488],{"class":257},[240,34008,34009,34012,34014,34017],{"class":242,"line":3703},[240,34010,34011],{"class":792},"                                       batch_size",[240,34013,440],{"class":288},[240,34015,34016],{"class":264},"128",[240,34018,33412],{"class":257},[240,34020,34021,34024,34026,34028],{"class":242,"line":3708},[240,34022,34023],{"class":792},"                                       shuffle",[240,34025,440],{"class":288},[240,34027,33422],{"class":264},[240,34029,33412],{"class":257},[240,34031,34032],{"class":242,"line":3713},[240,34033,34034],{"class":246},"                                       # 规定8个进程\n",[240,34036,34037,34040,34042,34044],{"class":242,"line":3718},[240,34038,34039],{"class":792},"                                       num_workers",[240,34041,440],{"class":288},[240,34043,2496],{"class":264},[240,34045,2129],{"class":257},[240,34047,34048,34051,34053,34055,34057,34059],{"class":242,"line":3732},[240,34049,34050],{"class":257},"    val_dataloader",[240,34052,440],{"class":288},[240,34054,33480],{"class":257},[240,34056,33483],{"class":792},[240,34058,440],{"class":288},[240,34060,34061],{"class":257},"val_data,\n",[240,34063,34064,34067,34069,34071],{"class":242,"line":3737},[240,34065,34066],{"class":792},"                                   batch_size",[240,34068,440],{"class":288},[240,34070,34016],{"class":264},[240,34072,33412],{"class":257},[240,34074,34075,34078,34080,34082],{"class":242,"line":4530},[240,34076,34077],{"class":792},"                                   shuffle",[240,34079,440],{"class":288},[240,34081,33422],{"class":264},[240,34083,33412],{"class":257},[240,34085,34086,34089,34091,34093],{"class":242,"line":4544},[240,34087,34088],{"class":792},"                                   num_workers",[240,34090,440],{"class":288},[240,34092,2496],{"class":264},[240,34094,2129],{"class":257},[240,34096,34097,34099],{"class":242,"line":4552},[240,34098,6042],{"class":288},[240,34100,34101],{"class":257}," train_dataloader,val_dataloader\n",[240,34103,34104],{"class":242,"line":4557},[240,34105,4353],{"emptyLinePlaceholder":2051},[240,34107,34108],{"class":242,"line":4563},[240,34109,34110],{"class":246},"# 验证是否出错\n",[240,34112,34113],{"class":242,"line":4569},[240,34114,34115],{"class":246},"# train_val_data_process()\n",[240,34117,34118],{"class":242,"line":4574},[240,34119,4353],{"emptyLinePlaceholder":2051},[240,34121,34122],{"class":242,"line":9899},[240,34123,34124],{"class":246},"# 定义模型训练函数\n",[240,34126,34127,34129,34132],{"class":242,"line":9923},[240,34128,33893],{"class":288},[240,34130,34131],{"class":436}," train_model_process",[240,34133,34134],{"class":257},"(model,train_dataloader,val_dataloader,num_epochs):\n",[240,34136,34137,34139,34141,34143,34145,34147,34149,34151,34154],{"class":242,"line":9928},[240,34138,33183],{"class":257},[240,34140,440],{"class":288},[240,34142,32397],{"class":257},[240,34144,33190],{"class":443},[240,34146,3658],{"class":288},[240,34148,33195],{"class":257},[240,34150,3655],{"class":288},[240,34152,34153],{"class":443}," 'cpu'",[240,34155,2129],{"class":257},[240,34157,34158],{"class":242,"line":9934},[240,34159,4353],{"emptyLinePlaceholder":2051},[240,34161,34162],{"class":242,"line":9961},[240,34163,4353],{"emptyLinePlaceholder":2051},[240,34165,34166],{"class":242,"line":9966},[240,34167,34168],{"class":246},"    # 定义优化器\n",[240,34170,34171],{"class":242,"line":9972},[240,34172,34173],{"class":246},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[240,34175,34176],{"class":242,"line":9984},[240,34177,34178],{"class":246},"    # lr为学习率\n",[240,34180,34181,34184,34186,34189,34192,34194,34197],{"class":242,"line":9996},[240,34182,34183],{"class":257},"    optimizer",[240,34185,440],{"class":288},[240,34187,34188],{"class":257},"torch.optim.Adam(model.parameters(),",[240,34190,34191],{"class":792},"lr",[240,34193,440],{"class":288},[240,34195,34196],{"class":264},"0.001",[240,34198,2129],{"class":257},[240,34200,34201],{"class":242,"line":10008},[240,34202,4353],{"emptyLinePlaceholder":2051},[240,34204,34205],{"class":242,"line":11667},[240,34206,34207],{"class":246},"    # 定义损失函数使用交叉熵损失函数\n",[240,34209,34210,34213,34215],{"class":242,"line":11692},[240,34211,34212],{"class":257},"    criterion",[240,34214,440],{"class":288},[240,34216,34217],{"class":257},"nn.CrossEntropyLoss()\n",[240,34219,34220],{"class":242,"line":11715},[240,34221,4353],{"emptyLinePlaceholder":2051},[240,34223,34224],{"class":242,"line":11739},[240,34225,34226],{"class":246},"    # 将模型放到GPU中进行训练\n",[240,34228,34229,34231,34233],{"class":242,"line":11744},[240,34230,33235],{"class":257},[240,34232,440],{"class":288},[240,34234,34235],{"class":257},"model.to(device)\n",[240,34237,34238],{"class":242,"line":11749},[240,34239,34240],{"class":246},"    # 复制当前模型的参数\n",[240,34242,34243],{"class":242,"line":11754},[240,34244,34245],{"class":246},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[240,34247,34248],{"class":242,"line":11763},[240,34249,34250],{"class":246},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[240,34252,34253,34256,34258],{"class":242,"line":11768},[240,34254,34255],{"class":257},"    best_model_wts",[240,34257,440],{"class":288},[240,34259,34260],{"class":257},"copy.deepcopy(model.state_dict())\n",[240,34262,34263],{"class":242,"line":11774},[240,34264,4353],{"emptyLinePlaceholder":2051},[240,34266,34267],{"class":242,"line":11795},[240,34268,4353],{"emptyLinePlaceholder":2051},[240,34270,34271],{"class":242,"line":11801},[240,34272,34273],{"class":246},"    # 初始化参数\n",[240,34275,34276],{"class":242,"line":11815},[240,34277,34278],{"class":246},"    # 最高准确度\n",[240,34280,34281,34284,34286],{"class":242,"line":11821},[240,34282,34283],{"class":257},"    best_acc",[240,34285,440],{"class":288},[240,34287,34288],{"class":264},"0.0\n",[240,34290,34291],{"class":242,"line":11848},[240,34292,34293],{"class":246},"    # 训练集损失列表\n",[240,34295,34296,34299,34301],{"class":242,"line":11857},[240,34297,34298],{"class":257},"    train_loss_all",[240,34300,440],{"class":288},[240,34302,34303],{"class":257},"[]\n",[240,34305,34306],{"class":242,"line":11863},[240,34307,34308],{"class":246},"    # 验证集函数列表\n",[240,34310,34311,34314,34316],{"class":242,"line":11871},[240,34312,34313],{"class":257},"    val_loss_all",[240,34315,440],{"class":288},[240,34317,34303],{"class":257},[240,34319,34320],{"class":242,"line":11876},[240,34321,34322],{"class":246},"    # 训练集准确度列表\n",[240,34324,34325,34328,34330],{"class":242,"line":18552},[240,34326,34327],{"class":257},"    train_acc_all",[240,34329,440],{"class":288},[240,34331,34303],{"class":257},[240,34333,34334],{"class":242,"line":18558},[240,34335,34336],{"class":246},"    # 验证集准确度列表\n",[240,34338,34339,34342,34344],{"class":242,"line":18581},[240,34340,34341],{"class":257},"    val_acc_all",[240,34343,440],{"class":288},[240,34345,34303],{"class":257},[240,34347,34348],{"class":242,"line":18587},[240,34349,4353],{"emptyLinePlaceholder":2051},[240,34351,34352],{"class":242,"line":18610},[240,34353,34354],{"class":246},"    # 保存当前时间--->方便看每轮训练的时间\n",[240,34356,34357,34360,34362],{"class":242,"line":18624},[240,34358,34359],{"class":257},"    since",[240,34361,440],{"class":288},[240,34363,34364],{"class":257},"time.time()\n",[240,34366,34367],{"class":242,"line":18644},[240,34368,4353],{"emptyLinePlaceholder":2051},[240,34370,34371],{"class":242,"line":18650},[240,34372,4353],{"emptyLinePlaceholder":2051},[240,34374,34375],{"class":242,"line":18661},[240,34376,34377],{"class":246},"    # 准备工作完成--->开始训练模型\n",[240,34379,34380,34382,34385,34387,34390],{"class":242,"line":18684},[240,34381,5153],{"class":288},[240,34383,34384],{"class":257}," epoch ",[240,34386,27989],{"class":288},[240,34388,34389],{"class":264}," range",[240,34391,34392],{"class":257},"(num_epochs):\n",[240,34394,34395,34398,34400,34403,34406,34408,34410,34412,34415,34417,34419],{"class":242,"line":18706},[240,34396,34397],{"class":264},"        print",[240,34399,789],{"class":257},[240,34401,34402],{"class":443},"\"Epoch ",[240,34404,34405],{"class":264},"{}",[240,34407,2683],{"class":443},[240,34409,34405],{"class":264},[240,34411,2355],{"class":443},[240,34413,34414],{"class":257},".format(epoch,num_epochs",[240,34416,2631],{"class":288},[240,34418,1643],{"class":264},[240,34420,32443],{"class":257},[240,34422,34423,34425,34427,34430,34432,34434],{"class":242,"line":18711},[240,34424,34397],{"class":264},[240,34426,789],{"class":257},[240,34428,34429],{"class":443},"\"-\"",[240,34431,2554],{"class":288},[240,34433,2546],{"class":264},[240,34435,2129],{"class":257},[240,34437,34438],{"class":242,"line":18717},[240,34439,4353],{"emptyLinePlaceholder":2051},[240,34441,34442],{"class":242,"line":18731},[240,34443,34444],{"class":246},"        # 初始化参数\n",[240,34446,34447],{"class":242,"line":18744},[240,34448,34449],{"class":246},"        # 训练集损失函数\n",[240,34451,34452,34455,34457],{"class":242,"line":18749},[240,34453,34454],{"class":257},"        train_loss",[240,34456,440],{"class":288},[240,34458,34288],{"class":264},[240,34460,34461],{"class":242,"line":18763},[240,34462,34463],{"class":246},"        # 训练集准确度\n",[240,34465,34466,34469,34471],{"class":242,"line":18768},[240,34467,34468],{"class":257},"        train_corrects",[240,34470,440],{"class":288},[240,34472,5037],{"class":264},[240,34474,34475],{"class":242,"line":18774},[240,34476,34477],{"class":246},"        # 验证集损失函数\n",[240,34479,34480,34483,34485],{"class":242,"line":18779},[240,34481,34482],{"class":257},"        val_loss",[240,34484,440],{"class":288},[240,34486,34288],{"class":264},[240,34488,34489],{"class":242,"line":18793},[240,34490,34491],{"class":246},"        # 验证集准确度\n",[240,34493,34494,34497,34499],{"class":242,"line":18798},[240,34495,34496],{"class":257},"        val_corrects",[240,34498,440],{"class":288},[240,34500,5037],{"class":264},[240,34502,34503],{"class":242,"line":18803},[240,34504,34505],{"class":246},"        # 训练集样本数量\n",[240,34507,34508,34511,34513],{"class":242,"line":18817},[240,34509,34510],{"class":257},"        train_num",[240,34512,440],{"class":288},[240,34514,5037],{"class":264},[240,34516,34517],{"class":242,"line":18829},[240,34518,34519],{"class":246},"        # 验证集样本数量\n",[240,34521,34522,34525,34527],{"class":242,"line":18834},[240,34523,34524],{"class":257},"        val_num",[240,34526,440],{"class":288},[240,34528,5037],{"class":264},[240,34530,34531],{"class":242,"line":18847},[240,34532,34533],{"class":246},"        # 将数据放到设备,并开始训练\n",[240,34535,34536,34538,34540,34542,34544],{"class":242,"line":18852},[240,34537,5355],{"class":288},[240,34539,33547],{"class":257},[240,34541,27989],{"class":288},[240,34543,33552],{"class":264},[240,34545,34546],{"class":257},"(train_dataloader):\n",[240,34548,34549],{"class":242,"line":18857},[240,34550,34551],{"class":246},"            # 将特征放入到训练设备\n",[240,34553,34554,34557,34559],{"class":242,"line":18862},[240,34555,34556],{"class":257},"            b_x",[240,34558,440],{"class":288},[240,34560,34561],{"class":257},"b_x.to(device)\n",[240,34563,34564],{"class":242,"line":18875},[240,34565,34566],{"class":246},"            # 将标签放入到训练设备当中\n",[240,34568,34569,34572,34574],{"class":242,"line":18880},[240,34570,34571],{"class":257},"            b_y",[240,34573,440],{"class":288},[240,34575,34576],{"class":257},"b_y.to(device)\n",[240,34578,34580],{"class":242,"line":34579},98,[240,34581,34582],{"class":246},"            # 设置模型为训练模式\n",[240,34584,34586],{"class":242,"line":34585},99,[240,34587,34588],{"class":257},"            model.train()\n",[240,34590,34592],{"class":242,"line":34591},100,[240,34593,34594],{"class":246},"            # 将数据放到模型当中,开始前向传播\n",[240,34596,34598],{"class":242,"line":34597},101,[240,34599,34600],{"class":246},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[240,34602,34604,34607,34609],{"class":242,"line":34603},102,[240,34605,34606],{"class":257},"            output",[240,34608,440],{"class":288},[240,34610,34611],{"class":257},"model(b_x)\n",[240,34613,34615],{"class":242,"line":34614},103,[240,34616,34617],{"class":246},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[240,34619,34621,34624,34626,34629,34632,34634,34636],{"class":242,"line":34620},104,[240,34622,34623],{"class":257},"            pre_lab",[240,34625,440],{"class":288},[240,34627,34628],{"class":257},"torch.argmax(output,",[240,34630,34631],{"class":792},"dim",[240,34633,440],{"class":288},[240,34635,1643],{"class":264},[240,34637,2129],{"class":257},[240,34639,34641],{"class":242,"line":34640},105,[240,34642,34643],{"class":246},"            # 计算每一个batch的损失函数\n",[240,34645,34647,34650,34652],{"class":242,"line":34646},106,[240,34648,34649],{"class":257},"            loss",[240,34651,440],{"class":288},[240,34653,34654],{"class":257},"criterion(output,b_y)\n",[240,34656,34658],{"class":242,"line":34657},107,[240,34659,34660],{"class":246},"            # 将梯度初始化为0\n",[240,34662,34664],{"class":242,"line":34663},108,[240,34665,34666],{"class":257},"            optimizer.zero_grad()\n",[240,34668,34670],{"class":242,"line":34669},109,[240,34671,34672],{"class":246},"            # 梯度置为0后再进行反向传播\n",[240,34674,34676],{"class":242,"line":34675},110,[240,34677,34678],{"class":257},"            loss.backward()\n",[240,34680,34682],{"class":242,"line":34681},111,[240,34683,34684],{"class":246},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[240,34686,34688],{"class":242,"line":34687},112,[240,34689,34690],{"class":257},"            optimizer.step()\n",[240,34692,34694],{"class":242,"line":34693},113,[240,34695,34696],{"class":246},"            # loss.item()指的是batch的平均损失\n",[240,34698,34700,34703,34705,34708,34710,34713,34715],{"class":242,"line":34699},114,[240,34701,34702],{"class":257},"            train_loss",[240,34704,11428],{"class":288},[240,34706,34707],{"class":257},"loss.item()",[240,34709,2554],{"class":288},[240,34711,34712],{"class":257},"b_x.size(",[240,34714,1274],{"class":264},[240,34716,2129],{"class":257},[240,34718,34720],{"class":242,"line":34719},115,[240,34721,34722],{"class":246},"            # 计算每个批次中正确预测的数量\n",[240,34724,34726,34729,34731,34734,34736],{"class":242,"line":34725},116,[240,34727,34728],{"class":257},"            train_corrects",[240,34730,11428],{"class":288},[240,34732,34733],{"class":257},"torch.sum(pre_lab",[240,34735,4901],{"class":288},[240,34737,34738],{"class":257},"b_y.data)\n",[240,34740,34742],{"class":242,"line":34741},117,[240,34743,34744],{"class":246},"            # 计算目前为止一共处理了多少样本\n",[240,34746,34748,34751,34753,34755,34757],{"class":242,"line":34747},118,[240,34749,34750],{"class":257},"            train_num",[240,34752,11428],{"class":288},[240,34754,34712],{"class":257},[240,34756,1274],{"class":264},[240,34758,2129],{"class":257},[240,34760,34762],{"class":242,"line":34761},119,[240,34763,34764],{"class":246},"        # 验证数据\n",[240,34766,34768,34770,34773,34775,34777],{"class":242,"line":34767},120,[240,34769,5355],{"class":288},[240,34771,34772],{"class":257}," step ,(b_x,b_y) ",[240,34774,27989],{"class":288},[240,34776,33552],{"class":264},[240,34778,34779],{"class":257},"(val_dataloader):\n",[240,34781,34783],{"class":242,"line":34782},121,[240,34784,34785],{"class":246},"            # 将特征放到验证设备当中\n",[240,34787,34789,34791,34793],{"class":242,"line":34788},122,[240,34790,34556],{"class":257},[240,34792,440],{"class":288},[240,34794,34561],{"class":257},[240,34796,34798],{"class":242,"line":34797},123,[240,34799,34800],{"class":246},"            # 将标签放到放到训练设备当中\n",[240,34802,34804,34806,34808],{"class":242,"line":34803},124,[240,34805,34571],{"class":257},[240,34807,440],{"class":288},[240,34809,34576],{"class":257},[240,34811,34813],{"class":242,"line":34812},125,[240,34814,34815],{"class":246},"            # 开启验证模式，设置模型为评估模式\n",[240,34817,34819],{"class":242,"line":34818},126,[240,34820,34821],{"class":257},"            model.eval()\n",[240,34823,34825,34828],{"class":242,"line":34824},127,[240,34826,34827],{"class":288},"            with",[240,34829,34830],{"class":257}," torch.no_grad():\n",[240,34832,34834],{"class":242,"line":34833},128,[240,34835,34836],{"class":246},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[240,34838,34840,34843,34845],{"class":242,"line":34839},129,[240,34841,34842],{"class":257},"                output ",[240,34844,440],{"class":288},[240,34846,34847],{"class":257}," model(b_x)\n",[240,34849,34851],{"class":242,"line":34850},130,[240,34852,34853],{"class":246},"                # 查找每一行中最大值对应的下标\n",[240,34855,34857,34860,34862,34865,34867,34869,34871],{"class":242,"line":34856},131,[240,34858,34859],{"class":257},"                pre_lab ",[240,34861,440],{"class":288},[240,34863,34864],{"class":257}," torch.argmax(output, ",[240,34866,34631],{"class":792},[240,34868,440],{"class":288},[240,34870,1643],{"class":264},[240,34872,2129],{"class":257},[240,34874,34876],{"class":242,"line":34875},132,[240,34877,34878],{"class":246},"                # 计算验证集上的当前 batch 损失\n",[240,34880,34882,34885,34887],{"class":242,"line":34881},133,[240,34883,34884],{"class":257},"                val_batch_loss ",[240,34886,440],{"class":288},[240,34888,34889],{"class":257}," criterion(output, b_y)\n",[240,34891,34893],{"class":242,"line":34892},134,[240,34894,34895],{"class":246},"                # 对损失函数进行累加（按样本数加权）\n",[240,34897,34899,34902,34904,34907,34909,34912,34914],{"class":242,"line":34898},135,[240,34900,34901],{"class":257},"                val_loss ",[240,34903,11428],{"class":288},[240,34905,34906],{"class":257}," val_batch_loss.item() ",[240,34908,2554],{"class":288},[240,34910,34911],{"class":257}," b_x.size(",[240,34913,1274],{"class":264},[240,34915,2129],{"class":257},[240,34917,34919,34922,34924,34927,34929],{"class":242,"line":34918},136,[240,34920,34921],{"class":257},"                val_corrects ",[240,34923,11428],{"class":288},[240,34925,34926],{"class":257}," torch.sum(pre_lab ",[240,34928,4901],{"class":288},[240,34930,34931],{"class":257}," b_y.data)\n",[240,34933,34935],{"class":242,"line":34934},137,[240,34936,34937],{"class":246},"                # 当前用于验证的样本数量\n",[240,34939,34941,34944,34946,34948,34950],{"class":242,"line":34940},138,[240,34942,34943],{"class":257},"            val_num ",[240,34945,11428],{"class":288},[240,34947,34911],{"class":257},[240,34949,1274],{"class":264},[240,34951,2129],{"class":257},[240,34953,34955],{"class":242,"line":34954},139,[240,34956,34957],{"class":246},"        # 计算并保存每一次迭代的loss值和准确率\n",[240,34959,34961],{"class":242,"line":34960},140,[240,34962,34963],{"class":246},"        # 计算并保存训练集的loss值\n",[240,34965,34967,34970,34972],{"class":242,"line":34966},141,[240,34968,34969],{"class":257},"        train_loss_all.append(train_loss",[240,34971,2683],{"class":288},[240,34973,34974],{"class":257},"train_num)\n",[240,34976,34978],{"class":242,"line":34977},142,[240,34979,34980],{"class":246},"        # 取双精度\n",[240,34982,34984],{"class":242,"line":34983},143,[240,34985,34986],{"class":246},"        # 计算并保存训练集的准确率\n",[240,34988,34990,34993,34995],{"class":242,"line":34989},144,[240,34991,34992],{"class":257},"        train_acc_all.append(train_corrects.double().item()",[240,34994,2683],{"class":288},[240,34996,34974],{"class":257},[240,34998,35000],{"class":242,"line":34999},145,[240,35001,35002],{"class":246},"        # 计算并保存验证集的loss值\n",[240,35004,35006,35009,35011],{"class":242,"line":35005},146,[240,35007,35008],{"class":257},"        val_loss_all.append(val_loss",[240,35010,2683],{"class":288},[240,35012,35013],{"class":257},"val_num)\n",[240,35015,35017],{"class":242,"line":35016},147,[240,35018,35019],{"class":246},"        # 计算并保存验证集的准确率\n",[240,35021,35023,35026,35028],{"class":242,"line":35022},148,[240,35024,35025],{"class":257},"        val_acc_all.append(val_corrects.double().item()",[240,35027,2683],{"class":288},[240,35029,35013],{"class":257},[240,35031,35033],{"class":242,"line":35032},149,[240,35034,4353],{"emptyLinePlaceholder":2051},[240,35036,35038],{"class":242,"line":35037},150,[240,35039,35040],{"class":246},"        # 打印训练一轮的loss值和准确率\n",[240,35042,35044,35046,35048,35050,35052,35055,35057,35060,35062,35065,35067,35069,35071,35073,35076,35078,35080,35083,35085,35087],{"class":242,"line":35043},151,[240,35045,34397],{"class":264},[240,35047,789],{"class":257},[240,35049,5544],{"class":443},[240,35051,34405],{"class":264},[240,35053,35054],{"class":443},"train loss:",[240,35056,2991],{"class":264},[240,35058,35059],{"class":288},":.4f",[240,35061,3040],{"class":264},[240,35063,35064],{"class":443}," train acc:",[240,35066,2991],{"class":264},[240,35068,35059],{"class":288},[240,35070,3040],{"class":264},[240,35072,5544],{"class":443},[240,35074,35075],{"class":257},".format(epoch,train_loss_all[",[240,35077,2631],{"class":288},[240,35079,1643],{"class":264},[240,35081,35082],{"class":257},"],train_acc_all[",[240,35084,2631],{"class":288},[240,35086,1643],{"class":264},[240,35088,35089],{"class":257},"]))\n",[240,35091,35093,35095,35097,35099,35101,35104,35106,35108,35110,35113,35115,35117,35119,35121,35124,35126,35128,35131,35133,35135],{"class":242,"line":35092},152,[240,35094,34397],{"class":264},[240,35096,789],{"class":257},[240,35098,5544],{"class":443},[240,35100,34405],{"class":264},[240,35102,35103],{"class":443},"val loss:",[240,35105,2991],{"class":264},[240,35107,35059],{"class":288},[240,35109,3040],{"class":264},[240,35111,35112],{"class":443}," val acc:",[240,35114,2991],{"class":264},[240,35116,35059],{"class":288},[240,35118,3040],{"class":264},[240,35120,5544],{"class":443},[240,35122,35123],{"class":257},".format(epoch,val_loss_all[",[240,35125,2631],{"class":288},[240,35127,1643],{"class":264},[240,35129,35130],{"class":257},"],val_acc_all[",[240,35132,2631],{"class":288},[240,35134,1643],{"class":264},[240,35136,35089],{"class":257},[240,35138,35140],{"class":242,"line":35139},153,[240,35141,4353],{"emptyLinePlaceholder":2051},[240,35143,35145],{"class":242,"line":35144},154,[240,35146,35147],{"class":246},"        # 判断准确度--->保存最优模型\n",[240,35149,35151,35153,35156,35158,35160,35162,35164],{"class":242,"line":35150},155,[240,35152,4450],{"class":288},[240,35154,35155],{"class":257}," val_acc_all[",[240,35157,2631],{"class":288},[240,35159,1643],{"class":264},[240,35161,3034],{"class":257},[240,35163,3053],{"class":288},[240,35165,35166],{"class":257},"best_acc:\n",[240,35168,35170],{"class":242,"line":35169},156,[240,35171,35172],{"class":246},"            # 保存当前模型准确度\n",[240,35174,35176,35179,35181,35183,35186,35188,35190],{"class":242,"line":35175},157,[240,35177,35178],{"class":257},"            best_acc:",[240,35180,2161],{"class":264},[240,35182,440],{"class":288},[240,35184,35185],{"class":257},"val_acc_all[",[240,35187,2631],{"class":288},[240,35189,1643],{"class":264},[240,35191,35192],{"class":257},"]\n",[240,35194,35196],{"class":242,"line":35195},158,[240,35197,35198],{"class":246},"            # 保存当前的准确度\n",[240,35200,35202],{"class":242,"line":35201},159,[240,35203,35204],{"class":246},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[240,35206,35208,35211,35213],{"class":242,"line":35207},160,[240,35209,35210],{"class":257},"            best_model_wts",[240,35212,440],{"class":288},[240,35214,34260],{"class":257},[240,35216,35218],{"class":242,"line":35217},161,[240,35219,4353],{"emptyLinePlaceholder":2051},[240,35221,35223],{"class":242,"line":35222},162,[240,35224,35225],{"class":246},"        # 计算耗时\n",[240,35227,35229,35232,35234,35237,35239],{"class":242,"line":35228},163,[240,35230,35231],{"class":257},"        time_use",[240,35233,440],{"class":288},[240,35235,35236],{"class":257},"time.time()",[240,35238,2631],{"class":288},[240,35240,35241],{"class":257},"since\n",[240,35243,35245,35247,35249,35252,35254,35257,35259,35261,35263,35265,35267,35270,35273,35276,35278,35281,35283,35285],{"class":242,"line":35244},164,[240,35246,34397],{"class":264},[240,35248,789],{"class":257},[240,35250,35251],{"class":443},"'训练和验证耗费的时间",[240,35253,2991],{"class":264},[240,35255,35256],{"class":288},":.0f",[240,35258,3040],{"class":264},[240,35260,2643],{"class":443},[240,35262,2991],{"class":264},[240,35264,35256],{"class":288},[240,35266,3040],{"class":264},[240,35268,35269],{"class":443},"s'",[240,35271,35272],{"class":257},".format(time_use",[240,35274,35275],{"class":288},"\u002F\u002F",[240,35277,3002],{"class":264},[240,35279,35280],{"class":257},",time_use",[240,35282,2429],{"class":288},[240,35284,3002],{"class":264},[240,35286,32443],{"class":257},[240,35288,35290],{"class":242,"line":35289},165,[240,35291,35292],{"class":246},"    # 选择最优参数\n",[240,35294,35296],{"class":242,"line":35295},166,[240,35297,35298],{"class":246},"    # 加载最高准确率下的模型参数\n",[240,35300,35302],{"class":242,"line":35301},167,[240,35303,35304],{"class":246},"    # model.load_state_dict(best_model_wts)\n",[240,35306,35308,35311,35314],{"class":242,"line":35307},168,[240,35309,35310],{"class":257},"    torch.save(model.state_dict(best_model_wts), ",[240,35312,35313],{"class":443},"'.\u002Fbest_model.pth'",[240,35315,2129],{"class":257},[240,35317,35319],{"class":242,"line":35318},169,[240,35320,35321],{"class":246},"    # 或者写成\n",[240,35323,35325],{"class":242,"line":35324},170,[240,35326,35327],{"class":246},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[240,35329,35331],{"class":242,"line":35330},171,[240,35332,35333],{"class":246},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[240,35335,35337,35340,35342,35345,35348,35350],{"class":242,"line":35336},172,[240,35338,35339],{"class":257},"    train_process",[240,35341,440],{"class":288},[240,35343,35344],{"class":257},"pd.DataFrame(",[240,35346,35347],{"class":792},"data",[240,35349,440],{"class":288},[240,35351,3504],{"class":257},[240,35353,35355,35358,35360,35363],{"class":242,"line":35354},173,[240,35356,35357],{"class":443},"        \"epoch\"",[240,35359,2954],{"class":257},[240,35361,35362],{"class":264},"range",[240,35364,35365],{"class":257},"(num_epochs),\n",[240,35367,35369,35372],{"class":242,"line":35368},174,[240,35370,35371],{"class":443},"        \"train_loss_all\"",[240,35373,35374],{"class":257},":train_loss_all,\n",[240,35376,35378,35381],{"class":242,"line":35377},175,[240,35379,35380],{"class":443},"        \"val_loss_all\"",[240,35382,35383],{"class":257},":val_loss_all,\n",[240,35385,35387,35390],{"class":242,"line":35386},176,[240,35388,35389],{"class":443},"        \"train_acc_all\"",[240,35391,35392],{"class":257},":train_acc_all,\n",[240,35394,35396,35399],{"class":242,"line":35395},177,[240,35397,35398],{"class":443},"        \"val_acc_all\"",[240,35400,35401],{"class":257},":val_acc_all\n",[240,35403,35405],{"class":242,"line":35404},178,[240,35406,35407],{"class":257},"    })\n",[240,35409,35411],{"class":242,"line":35410},179,[240,35412,35413],{"class":246},"    # 返回训练保存的过程\n",[240,35415,35417,35419],{"class":242,"line":35416},180,[240,35418,6042],{"class":288},[240,35420,35421],{"class":257}," train_process\n",[240,35423,35425],{"class":242,"line":35424},181,[240,35426,4353],{"emptyLinePlaceholder":2051},[240,35428,35430],{"class":242,"line":35429},182,[240,35431,35432],{"class":246},"# 将loss值和精度按照图片的形式展示出来\n",[240,35434,35436,35438,35441],{"class":242,"line":35435},183,[240,35437,33893],{"class":288},[240,35439,35440],{"class":436}," matplot_acc_loss",[240,35442,35443],{"class":257},"(train_process):\n",[240,35445,35447],{"class":242,"line":35446},184,[240,35448,35449],{"class":246},"    # 设置图的大小\n",[240,35451,35453,35456,35458,35460,35462,35464,35466,35468],{"class":242,"line":35452},185,[240,35454,35455],{"class":257},"    plt.figure(",[240,35457,33639],{"class":792},[240,35459,440],{"class":288},[240,35461,789],{"class":257},[240,35463,2597],{"class":264},[240,35465,2479],{"class":257},[240,35467,1716],{"class":264},[240,35469,32443],{"class":257},[240,35471,35473],{"class":242,"line":35472},186,[240,35474,35475],{"class":246},"    # 设置图中有几张图\n",[240,35477,35479],{"class":242,"line":35478},187,[240,35480,35481],{"class":246},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[240,35483,35485],{"class":242,"line":35484},188,[240,35486,35487],{"class":246},"    # ①loss图\n",[240,35489,35491,35493,35495,35497,35499,35501,35503],{"class":242,"line":35490},189,[240,35492,33673],{"class":257},[240,35494,1643],{"class":264},[240,35496,2479],{"class":257},[240,35498,1668],{"class":264},[240,35500,2479],{"class":257},[240,35502,1643],{"class":264},[240,35504,2129],{"class":257},[240,35506,35508],{"class":242,"line":35507},190,[240,35509,35510],{"class":246},"    # 补充:\n",[240,35512,35514],{"class":242,"line":35513},191,[240,35515,35516],{"class":246},"    # plt.subplot(nrows, ncols, index)\n",[240,35518,35520],{"class":242,"line":35519},192,[240,35521,35522],{"class":246},"    # nrows：行数\n",[240,35524,35526],{"class":242,"line":35525},193,[240,35527,35528],{"class":246},"    # ncols：列数\n",[240,35530,35532],{"class":242,"line":35531},194,[240,35533,35534],{"class":246},"    # index：目前选中第几个子图（从1开始）\n",[240,35536,35538,35541,35544,35547,35550,35552,35555,35557,35560],{"class":242,"line":35537},195,[240,35539,35540],{"class":257},"    plt.plot(train_process[",[240,35542,35543],{"class":443},"\"epoch\"",[240,35545,35546],{"class":257},"],train_process.train_loss_all,",[240,35548,35549],{"class":443},"'ro-'",[240,35551,2479],{"class":257},[240,35553,35554],{"class":792},"label",[240,35556,440],{"class":288},[240,35558,35559],{"class":443},"'train loss'",[240,35561,2129],{"class":257},[240,35563,35565,35567,35569,35572,35575,35577,35579,35581,35584],{"class":242,"line":35564},196,[240,35566,35540],{"class":257},[240,35568,35543],{"class":443},[240,35570,35571],{"class":257},"],train_process.val_loss_all,",[240,35573,35574],{"class":443},"'bs--'",[240,35576,2479],{"class":257},[240,35578,35554],{"class":792},[240,35580,440],{"class":288},[240,35582,35583],{"class":443},"'val loss'",[240,35585,2129],{"class":257},[240,35587,35589],{"class":242,"line":35588},197,[240,35590,35591],{"class":246},"    # 添加一个图例\n",[240,35593,35595],{"class":242,"line":35594},198,[240,35596,35597],{"class":257},"    plt.legend()\n",[240,35599,35601],{"class":242,"line":35600},199,[240,35602,35603],{"class":246},"    # 给轴添加标签\n",[240,35605,35607,35610,35613],{"class":242,"line":35606},200,[240,35608,35609],{"class":257},"    plt.xlabel(",[240,35611,35612],{"class":443},"'epoch'",[240,35614,2129],{"class":257},[240,35616,35618,35621,35624],{"class":242,"line":35617},201,[240,35619,35620],{"class":257},"    plt.ylabel(",[240,35622,35623],{"class":443},"'loss'",[240,35625,2129],{"class":257},[240,35627,35629],{"class":242,"line":35628},202,[240,35630,35631],{"class":246},"    # ②准确度图\n",[240,35633,35635,35637,35639,35641,35643,35645,35647],{"class":242,"line":35634},203,[240,35636,33673],{"class":257},[240,35638,1643],{"class":264},[240,35640,2479],{"class":257},[240,35642,1668],{"class":264},[240,35644,2479],{"class":257},[240,35646,1668],{"class":264},[240,35648,2129],{"class":257},[240,35650,35652,35654,35656,35659,35661,35663,35665,35667,35670],{"class":242,"line":35651},204,[240,35653,35540],{"class":257},[240,35655,35543],{"class":443},[240,35657,35658],{"class":257},"],train_process.train_acc_all,",[240,35660,35549],{"class":443},[240,35662,2479],{"class":257},[240,35664,35554],{"class":792},[240,35666,440],{"class":288},[240,35668,35669],{"class":443},"'train acc'",[240,35671,2129],{"class":257},[240,35673,35675,35677,35679,35682,35684,35686,35688,35690,35693],{"class":242,"line":35674},205,[240,35676,35540],{"class":257},[240,35678,35543],{"class":443},[240,35680,35681],{"class":257},"],train_process.val_acc_all,",[240,35683,35574],{"class":443},[240,35685,2479],{"class":257},[240,35687,35554],{"class":792},[240,35689,440],{"class":288},[240,35691,35692],{"class":443},"'val acc'",[240,35694,2129],{"class":257},[240,35696,35698],{"class":242,"line":35697},206,[240,35699,35700],{"class":246},"    # 添加图例\n",[240,35702,35704],{"class":242,"line":35703},207,[240,35705,35597],{"class":257},[240,35707,35709,35711,35713],{"class":242,"line":35708},208,[240,35710,35609],{"class":257},[240,35712,35543],{"class":443},[240,35714,2129],{"class":257},[240,35716,35718,35720,35723],{"class":242,"line":35717},209,[240,35719,35620],{"class":257},[240,35721,35722],{"class":443},"\"acc\"",[240,35724,2129],{"class":257},[240,35726,35728],{"class":242,"line":35727},210,[240,35729,35730],{"class":257},"    plt.show()\n",[240,35732,35734],{"class":242,"line":35733},211,[240,35735,4353],{"emptyLinePlaceholder":2051},[240,35737,35739],{"class":242,"line":35738},212,[240,35740,35741],{"class":246},"# 正式开始训练:\n",[240,35743,35745,35747,35749,35751,35753],{"class":242,"line":35744},213,[240,35746,3489],{"class":288},[240,35748,33166],{"class":264},[240,35750,4901],{"class":288},[240,35752,33171],{"class":443},[240,35754,5691],{"class":257},[240,35756,35758],{"class":242,"line":35757},214,[240,35759,35760],{"class":246},"    # 将模型实例化\n",[240,35762,35764,35767,35769],{"class":242,"line":35763},215,[240,35765,35766],{"class":257},"    LeNet",[240,35768,440],{"class":288},[240,35770,35771],{"class":257},"LeNet()\n",[240,35773,35775,35778,35780],{"class":242,"line":35774},216,[240,35776,35777],{"class":257},"    train_dataloader,val_dataloader",[240,35779,440],{"class":288},[240,35781,35782],{"class":257},"train_val_data_process()\n",[240,35784,35786,35788,35790,35793,35796,35798,35800],{"class":242,"line":35785},217,[240,35787,35339],{"class":257},[240,35789,440],{"class":288},[240,35791,35792],{"class":257},"train_model_process(LeNet,train_dataloader,val_dataloader,",[240,35794,35795],{"class":792},"num_epochs",[240,35797,440],{"class":288},[240,35799,1000],{"class":264},[240,35801,2129],{"class":257},[240,35803,35805],{"class":242,"line":35804},218,[240,35806,35807],{"class":257},"    matplot_acc_loss(train_process)\n",[19,35809,35810],{},"画图的补充点学习：",[19,35812,35813],{},[219,35814],{"alt":236,"src":35815},"\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",[1826,35817,35818],{"start":261},[1829,35819,35820],{},"测试",[231,35822,35824],{"className":32324,"code":35823,"language":32326,"meta":236,"style":236},"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",[23,35825,35826,35832,35842,35854,35864,35869,35879,35889,35893,35898,35907,35924,35936,35953,35964,35980,35985,35996,36007,36018,36025,36029,36034,36044,36049,36066,36074,36078,36083,36092,36101,36105,36110,36115,36120,36127,36132,36144,36154,36164,36169,36173,36178,36187,36192,36208,36213,36218,36223,36237,36242,36256,36260,36265,36280,36285,36297,36301,36306,36318,36323,36331,36336,36341,36351,36356,36365,36370,36375,36379,36384,36389,36405,36413,36418,36423,36482,36488,36493,36504,36512,36520,36524,36529,36533,36538,36546,36551,36567,36572,36582,36592],{"__ignoreMap":236},[240,35827,35828,35830],{"class":242,"line":243},[240,35829,32338],{"class":288},[240,35831,32341],{"class":257},[240,35833,35834,35836,35838,35840],{"class":242,"line":250},[240,35835,32338],{"class":288},[240,35837,33361],{"class":257},[240,35839,33329],{"class":288},[240,35841,33366],{"class":257},[240,35843,35844,35846,35849,35851],{"class":242,"line":261},[240,35845,32683],{"class":288},[240,35847,35848],{"class":257}," jupyter_client.consoleapp ",[240,35850,32338],{"class":288},[240,35852,35853],{"class":257}," classes\n",[240,35855,35856,35858,35860,35862],{"class":242,"line":277},[240,35857,32683],{"class":288},[240,35859,33344],{"class":257},[240,35861,32338],{"class":288},[240,35863,33349],{"class":257},[240,35865,35866],{"class":242,"line":294},[240,35867,35868],{"class":246},"# 导入数据集\n",[240,35870,35871,35873,35875,35877],{"class":242,"line":309},[240,35872,32683],{"class":288},[240,35874,33314],{"class":257},[240,35876,32338],{"class":288},[240,35878,33319],{"class":257},[240,35880,35881,35883,35885,35887],{"class":242,"line":529},[240,35882,32683],{"class":288},[240,35884,33860],{"class":257},[240,35886,32338],{"class":288},[240,35888,33865],{"class":257},[240,35890,35891],{"class":242,"line":549},[240,35892,4353],{"emptyLinePlaceholder":2051},[240,35894,35895],{"class":242,"line":569},[240,35896,35897],{"class":246},"# 测试数据处理\n",[240,35899,35900,35902,35905],{"class":242,"line":589},[240,35901,33893],{"class":288},[240,35903,35904],{"class":436}," test_data_process",[240,35906,33899],{"class":257},[240,35908,35909,35912,35914,35916,35918,35920,35922],{"class":242,"line":715},[240,35910,35911],{"class":257},"    test_data",[240,35913,440],{"class":288},[240,35915,33401],{"class":257},[240,35917,33404],{"class":792},[240,35919,440],{"class":288},[240,35921,33409],{"class":443},[240,35923,33412],{"class":257},[240,35925,35926,35929,35931,35934],{"class":242,"line":727},[240,35927,35928],{"class":792},"                           train",[240,35930,440],{"class":288},[240,35932,35933],{"class":264},"False",[240,35935,33412],{"class":257},[240,35937,35938,35941,35943,35945,35947,35949,35951],{"class":242,"line":1730},[240,35939,35940],{"class":792},"                           transform",[240,35942,440],{"class":288},[240,35944,33439],{"class":257},[240,35946,33442],{"class":792},[240,35948,440],{"class":288},[240,35950,2996],{"class":264},[240,35952,33450],{"class":257},[240,35954,35955,35958,35960,35962],{"class":242,"line":3582},[240,35956,35957],{"class":792},"                           download",[240,35959,440],{"class":288},[240,35961,33422],{"class":264},[240,35963,2129],{"class":257},[240,35965,35966,35969,35971,35973,35975,35977],{"class":242,"line":3596},[240,35967,35968],{"class":257},"    test_dataloader",[240,35970,440],{"class":288},[240,35972,33480],{"class":257},[240,35974,33483],{"class":792},[240,35976,440],{"class":288},[240,35978,35979],{"class":257},"test_data,\n",[240,35981,35982],{"class":242,"line":3601},[240,35983,35984],{"class":246},"                                    # 这里是一张一张进行测试\n",[240,35986,35987,35990,35992,35994],{"class":242,"line":3607},[240,35988,35989],{"class":792},"                                    batch_size",[240,35991,440],{"class":288},[240,35993,1643],{"class":264},[240,35995,33412],{"class":257},[240,35997,35998,36001,36003,36005],{"class":242,"line":3628},[240,35999,36000],{"class":792},"                                    shuffle",[240,36002,440],{"class":288},[240,36004,33422],{"class":264},[240,36006,33412],{"class":257},[240,36008,36009,36012,36014,36016],{"class":242,"line":3633},[240,36010,36011],{"class":792},"                                    num_workers",[240,36013,440],{"class":288},[240,36015,1274],{"class":264},[240,36017,2129],{"class":257},[240,36019,36020,36022],{"class":242,"line":3647},[240,36021,6042],{"class":288},[240,36023,36024],{"class":257}," test_dataloader\n",[240,36026,36027],{"class":242,"line":3652},[240,36028,4353],{"emptyLinePlaceholder":2051},[240,36030,36031],{"class":242,"line":3681},[240,36032,36033],{"class":246},"# 定义模型测试函数\n",[240,36035,36036,36038,36041],{"class":242,"line":3686},[240,36037,33893],{"class":288},[240,36039,36040],{"class":436}," test_model_process",[240,36042,36043],{"class":257},"(model,test_dataloader):\n",[240,36045,36046],{"class":242,"line":3703},[240,36047,36048],{"class":246},"    # 将模型放到设备当中，先进行判断\n",[240,36050,36051,36053,36055,36057,36059,36061,36063],{"class":242,"line":3708},[240,36052,33183],{"class":257},[240,36054,440],{"class":288},[240,36056,33190],{"class":443},[240,36058,3658],{"class":288},[240,36060,33195],{"class":257},[240,36062,3655],{"class":288},[240,36064,36065],{"class":443}," \"cpu\"\n",[240,36067,36068,36070,36072],{"class":242,"line":3713},[240,36069,33235],{"class":257},[240,36071,440],{"class":288},[240,36073,34235],{"class":257},[240,36075,36076],{"class":242,"line":3718},[240,36077,4353],{"emptyLinePlaceholder":2051},[240,36079,36080],{"class":242,"line":3732},[240,36081,36082],{"class":246},"    # 设置初始化参数\n",[240,36084,36085,36088,36090],{"class":242,"line":3737},[240,36086,36087],{"class":257},"    test_corrects",[240,36089,440],{"class":288},[240,36091,34288],{"class":264},[240,36093,36094,36097,36099],{"class":242,"line":4530},[240,36095,36096],{"class":257},"    test_num",[240,36098,440],{"class":288},[240,36100,5037],{"class":264},[240,36102,36103],{"class":242,"line":4544},[240,36104,4353],{"emptyLinePlaceholder":2051},[240,36106,36107],{"class":242,"line":4552},[240,36108,36109],{"class":246},"    # 进行模型测试\n",[240,36111,36112],{"class":242,"line":4557},[240,36113,36114],{"class":246},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[240,36116,36117],{"class":242,"line":4563},[240,36118,36119],{"class":246},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[240,36121,36122,36125],{"class":242,"line":4569},[240,36123,36124],{"class":288},"    with",[240,36126,34830],{"class":257},[240,36128,36129],{"class":242,"line":4574},[240,36130,36131],{"class":246},"        # 从数据中进行\n",[240,36133,36134,36136,36139,36141],{"class":242,"line":9899},[240,36135,5355],{"class":288},[240,36137,36138],{"class":257}," test_data_x,test_data_y ",[240,36140,27989],{"class":288},[240,36142,36143],{"class":257}," test_dataloader:\n",[240,36145,36146,36149,36151],{"class":242,"line":9923},[240,36147,36148],{"class":257},"            test_data_x",[240,36150,440],{"class":288},[240,36152,36153],{"class":257},"test_data_x.to(device)\n",[240,36155,36156,36159,36161],{"class":242,"line":9928},[240,36157,36158],{"class":257},"            test_data_y",[240,36160,440],{"class":288},[240,36162,36163],{"class":257},"test_data_y.to(device)\n",[240,36165,36166],{"class":242,"line":9934},[240,36167,36168],{"class":246},"            # 设置为验证模式\n",[240,36170,36171],{"class":242,"line":9961},[240,36172,34821],{"class":257},[240,36174,36175],{"class":242,"line":9966},[240,36176,36177],{"class":246},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[240,36179,36180,36182,36184],{"class":242,"line":9972},[240,36181,34606],{"class":257},[240,36183,440],{"class":288},[240,36185,36186],{"class":257},"model(test_data_x)\n",[240,36188,36189],{"class":242,"line":9984},[240,36190,36191],{"class":246},"            # 查找每一行中最大值对应的下标\n",[240,36193,36194,36196,36198,36200,36202,36204,36206],{"class":242,"line":9996},[240,36195,34623],{"class":257},[240,36197,440],{"class":288},[240,36199,34628],{"class":257},[240,36201,34631],{"class":792},[240,36203,440],{"class":288},[240,36205,1643],{"class":264},[240,36207,2129],{"class":257},[240,36209,36210],{"class":242,"line":10008},[240,36211,36212],{"class":246},"            # 计算正确率\n",[240,36214,36215],{"class":242,"line":11667},[240,36216,36217],{"class":246},"            # .data表示是一个不带梯度信息的tensor\n",[240,36219,36220],{"class":242,"line":11692},[240,36221,36222],{"class":246},"            # 如果预测正确，则准确度test_corrects加1\n",[240,36224,36225,36228,36230,36232,36234],{"class":242,"line":11715},[240,36226,36227],{"class":257},"            test_corrects",[240,36229,11428],{"class":288},[240,36231,34733],{"class":257},[240,36233,4901],{"class":288},[240,36235,36236],{"class":257},"test_data_y.data)\n",[240,36238,36239],{"class":242,"line":11739},[240,36240,36241],{"class":246},"            # 将所有的测试样本进行累计\n",[240,36243,36244,36247,36249,36252,36254],{"class":242,"line":11744},[240,36245,36246],{"class":257},"            test_num",[240,36248,11428],{"class":288},[240,36250,36251],{"class":257},"test_data_x.size(",[240,36253,1274],{"class":264},[240,36255,2129],{"class":257},[240,36257,36258],{"class":242,"line":11749},[240,36259,4353],{"emptyLinePlaceholder":2051},[240,36261,36262],{"class":242,"line":11754},[240,36263,36264],{"class":246},"        # 计算准确度\n",[240,36266,36267,36270,36272,36275,36277],{"class":242,"line":11763},[240,36268,36269],{"class":257},"        test_acc",[240,36271,440],{"class":288},[240,36273,36274],{"class":257},"test_corrects.double().item()",[240,36276,2683],{"class":288},[240,36278,36279],{"class":257},"test_num\n",[240,36281,36282],{"class":242,"line":11768},[240,36283,36284],{"class":246},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[240,36286,36287,36289,36291,36294],{"class":242,"line":11774},[240,36288,34397],{"class":264},[240,36290,789],{"class":257},[240,36292,36293],{"class":443},"\"测试的准确率：\"",[240,36295,36296],{"class":257},",test_acc)\n",[240,36298,36299],{"class":242,"line":11795},[240,36300,4353],{"emptyLinePlaceholder":2051},[240,36302,36303],{"class":242,"line":11801},[240,36304,36305],{"class":246},"# 实现模型的测试功能\n",[240,36307,36308,36310,36312,36314,36316],{"class":242,"line":11815},[240,36309,3489],{"class":288},[240,36311,33166],{"class":264},[240,36313,4901],{"class":288},[240,36315,33171],{"class":443},[240,36317,5691],{"class":257},[240,36319,36320],{"class":242,"line":11821},[240,36321,36322],{"class":246},"    # 加载模型\n",[240,36324,36325,36327,36329],{"class":242,"line":11848},[240,36326,33235],{"class":257},[240,36328,440],{"class":288},[240,36330,35771],{"class":257},[240,36332,36333],{"class":242,"line":11857},[240,36334,36335],{"class":246},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[240,36337,36338],{"class":242,"line":11863},[240,36339,36340],{"class":246},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[240,36342,36343,36346,36349],{"class":242,"line":11871},[240,36344,36345],{"class":257},"    model.load_state_dict(torch.load(",[240,36347,36348],{"class":443},"'best_model.pth'",[240,36350,32443],{"class":257},[240,36352,36353],{"class":242,"line":11876},[240,36354,36355],{"class":246},"    # 数据加载\n",[240,36357,36358,36360,36362],{"class":242,"line":18552},[240,36359,35968],{"class":257},[240,36361,440],{"class":288},[240,36363,36364],{"class":257},"test_data_process()\n",[240,36366,36367],{"class":242,"line":18558},[240,36368,36369],{"class":246},"    # 加载模型测试的函数\n",[240,36371,36372],{"class":242,"line":18581},[240,36373,36374],{"class":257},"    test_model_process(model,test_dataloader)\n",[240,36376,36377],{"class":242,"line":18587},[240,36378,4353],{"emptyLinePlaceholder":2051},[240,36380,36381],{"class":242,"line":18610},[240,36382,36383],{"class":246},"    # 验证集推理实现：\n",[240,36385,36386],{"class":242,"line":18624},[240,36387,36388],{"class":246},"    # 加载数据加载的更详细一些\n",[240,36390,36391,36393,36395,36397,36399,36401,36403],{"class":242,"line":18644},[240,36392,33183],{"class":257},[240,36394,440],{"class":288},[240,36396,33190],{"class":443},[240,36398,3658],{"class":288},[240,36400,33195],{"class":257},[240,36402,3655],{"class":288},[240,36404,36065],{"class":443},[240,36406,36407,36409,36411],{"class":242,"line":18650},[240,36408,33235],{"class":257},[240,36410,440],{"class":288},[240,36412,34235],{"class":257},[240,36414,36415],{"class":242,"line":18661},[240,36416,36417],{"class":246},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[240,36419,36420],{"class":242,"line":18684},[240,36421,36422],{"class":246},"    # 顺序不可改变\n",[240,36424,36425,36428,36430,36432,36435,36437,36440,36442,36445,36447,36450,36452,36455,36457,36460,36462,36465,36467,36470,36472,36475,36477,36480],{"class":242,"line":18706},[240,36426,36427],{"class":257},"    classes",[240,36429,440],{"class":288},[240,36431,2985],{"class":257},[240,36433,36434],{"class":443},"'T-shirt\u002Ftop'",[240,36436,2479],{"class":257},[240,36438,36439],{"class":443},"'Trouser'",[240,36441,2479],{"class":257},[240,36443,36444],{"class":443},"'Pullover'",[240,36446,2479],{"class":257},[240,36448,36449],{"class":443},"'Dress'",[240,36451,2479],{"class":257},[240,36453,36454],{"class":443},"'Coat'",[240,36456,2479],{"class":257},[240,36458,36459],{"class":443},"'Sandal'",[240,36461,2479],{"class":257},[240,36463,36464],{"class":443},"'Shirt'",[240,36466,2479],{"class":257},[240,36468,36469],{"class":443},"'Sneaker'",[240,36471,2479],{"class":257},[240,36473,36474],{"class":443},"'Bag'",[240,36476,2479],{"class":257},[240,36478,36479],{"class":443},"'Ankle boot'",[240,36481,35192],{"class":257},[240,36483,36484,36486],{"class":242,"line":18711},[240,36485,36124],{"class":288},[240,36487,34830],{"class":257},[240,36489,36490],{"class":242,"line":18717},[240,36491,36492],{"class":246},"        # 将数据和标签都放到设备当中\n",[240,36494,36495,36497,36500,36502],{"class":242,"line":18731},[240,36496,5355],{"class":288},[240,36498,36499],{"class":257}," b_x,b_y ",[240,36501,27989],{"class":288},[240,36503,36143],{"class":257},[240,36505,36506,36508,36510],{"class":242,"line":18744},[240,36507,34556],{"class":257},[240,36509,440],{"class":288},[240,36511,34561],{"class":257},[240,36513,36514,36516,36518],{"class":242,"line":18749},[240,36515,34571],{"class":257},[240,36517,440],{"class":288},[240,36519,34576],{"class":257},[240,36521,36522],{"class":242,"line":18763},[240,36523,4353],{"emptyLinePlaceholder":2051},[240,36525,36526],{"class":242,"line":18768},[240,36527,36528],{"class":246},"            # 设置模型为验证模式\n",[240,36530,36531],{"class":242,"line":18774},[240,36532,34821],{"class":257},[240,36534,36535],{"class":242,"line":18779},[240,36536,36537],{"class":246},"            # 模型推理结果\n",[240,36539,36540,36542,36544],{"class":242,"line":18793},[240,36541,34606],{"class":257},[240,36543,440],{"class":288},[240,36545,34611],{"class":257},[240,36547,36548],{"class":242,"line":18798},[240,36549,36550],{"class":246},"            # 获取最大下标，最大下标就是类别号\n",[240,36552,36553,36555,36557,36559,36561,36563,36565],{"class":242,"line":18803},[240,36554,34623],{"class":257},[240,36556,440],{"class":288},[240,36558,34628],{"class":257},[240,36560,34631],{"class":792},[240,36562,440],{"class":288},[240,36564,1643],{"class":264},[240,36566,2129],{"class":257},[240,36568,36569],{"class":242,"line":18817},[240,36570,36571],{"class":246},"            # 取出张量中的数值\n",[240,36573,36574,36577,36579],{"class":242,"line":18829},[240,36575,36576],{"class":257},"            result",[240,36578,440],{"class":288},[240,36580,36581],{"class":257},"pre_lab.item()\n",[240,36583,36584,36587,36589],{"class":242,"line":18834},[240,36585,36586],{"class":257},"            label",[240,36588,440],{"class":288},[240,36590,36591],{"class":257},"b_y.item()\n",[240,36593,36594,36597,36599,36602,36605,36608,36610,36613],{"class":242,"line":18847},[240,36595,36596],{"class":264},"            print",[240,36598,789],{"class":257},[240,36600,36601],{"class":443},"\"预测值：\"",[240,36603,36604],{"class":257},",classes[result],",[240,36606,36607],{"class":443},"\"------\"",[240,36609,2479],{"class":257},[240,36611,36612],{"class":443},"\"真实值：\"",[240,36614,36615],{"class":257},",classes[label])\n",[19,36617,36618],{},"（2）AlexNet",[1826,36620,36621],{},[1829,36622,36623],{},"神经网络构建",[231,36625,36627],{"className":32324,"code":36626,"language":32326,"meta":236,"style":236},"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",[23,36628,36629,36635,36645,36655,36667,36671,36688,36696,36711,36723,36765,36792,36835,36861,36905,36948,36991,37018,37022,37032,37037,37065,37084,37103,37107,37112,37120,37135,37145,37159,37169,37184,37199,37214,37225,37229,37234,37244,37259,37264,37278,37293,37305,37310,37321,37326,37332,37337,37349,37369,37374,37383],{"__ignoreMap":236},[240,36630,36631,36633],{"class":242,"line":243},[240,36632,32338],{"class":288},[240,36634,32341],{"class":257},[240,36636,36637,36639,36641,36643],{"class":242,"line":250},[240,36638,32683],{"class":288},[240,36640,32686],{"class":257},[240,36642,32338],{"class":288},[240,36644,32691],{"class":257},[240,36646,36647,36649,36651,36653],{"class":242,"line":261},[240,36648,32683],{"class":288},[240,36650,32703],{"class":257},[240,36652,32338],{"class":288},[240,36654,32708],{"class":257},[240,36656,36657,36659,36662,36664],{"class":242,"line":277},[240,36658,32338],{"class":288},[240,36660,36661],{"class":257}," torch.nn.functional ",[240,36663,33329],{"class":288},[240,36665,36666],{"class":257}," F\n",[240,36668,36669],{"class":242,"line":294},[240,36670,4353],{"emptyLinePlaceholder":2051},[240,36672,36673,36675,36678,36680,36682,36684,36686],{"class":242,"line":309},[240,36674,16643],{"class":288},[240,36676,36677],{"class":436}," AlexNet",[240,36679,789],{"class":257},[240,36681,32724],{"class":436},[240,36683,2657],{"class":257},[240,36685,32729],{"class":436},[240,36687,32732],{"class":257},[240,36689,36690,36692,36694],{"class":242,"line":529},[240,36691,32747],{"class":288},[240,36693,32750],{"class":264},[240,36695,32753],{"class":257},[240,36697,36698,36700,36703,36705,36707,36709],{"class":242,"line":549},[240,36699,32763],{"class":264},[240,36701,36702],{"class":257},"(AlexNet,",[240,36704,32769],{"class":264},[240,36706,32772],{"class":257},[240,36708,32775],{"class":264},[240,36710,3929],{"class":257},[240,36712,36713,36715,36718,36720],{"class":242,"line":569},[240,36714,32791],{"class":264},[240,36716,36717],{"class":257},".ReLu",[240,36719,440],{"class":288},[240,36721,36722],{"class":257},"nn.ReLU()\n",[240,36724,36725,36727,36729,36731,36733,36735,36737,36739,36741,36743,36745,36747,36749,36751,36753,36755,36757,36759,36761,36763],{"class":242,"line":589},[240,36726,32791],{"class":264},[240,36728,32794],{"class":257},[240,36730,440],{"class":288},[240,36732,32799],{"class":257},[240,36734,32802],{"class":792},[240,36736,440],{"class":288},[240,36738,1643],{"class":264},[240,36740,2479],{"class":257},[240,36742,32811],{"class":792},[240,36744,440],{"class":288},[240,36746,2316],{"class":264},[240,36748,2479],{"class":257},[240,36750,32820],{"class":792},[240,36752,440],{"class":288},[240,36754,2571],{"class":264},[240,36756,2479],{"class":257},[240,36758,32875],{"class":792},[240,36760,440],{"class":288},[240,36762,1716],{"class":264},[240,36764,2129],{"class":257},[240,36766,36767,36769,36771,36773,36776,36778,36780,36782,36784,36786,36788,36790],{"class":242,"line":715},[240,36768,32791],{"class":264},[240,36770,32859],{"class":257},[240,36772,440],{"class":288},[240,36774,36775],{"class":257},"nn.MaxPool2d(",[240,36777,32820],{"class":792},[240,36779,440],{"class":288},[240,36781,1692],{"class":264},[240,36783,2479],{"class":257},[240,36785,32875],{"class":792},[240,36787,440],{"class":288},[240,36789,1668],{"class":264},[240,36791,2129],{"class":257},[240,36793,36794,36796,36798,36800,36802,36804,36806,36808,36810,36812,36814,36817,36819,36821,36823,36825,36827,36829,36831,36833],{"class":242,"line":727},[240,36795,32791],{"class":264},[240,36797,32888],{"class":257},[240,36799,440],{"class":288},[240,36801,32799],{"class":257},[240,36803,32802],{"class":792},[240,36805,440],{"class":288},[240,36807,2316],{"class":264},[240,36809,2479],{"class":257},[240,36811,32811],{"class":792},[240,36813,440],{"class":288},[240,36815,36816],{"class":264},"256",[240,36818,2479],{"class":257},[240,36820,32820],{"class":792},[240,36822,440],{"class":288},[240,36824,1741],{"class":264},[240,36826,2479],{"class":257},[240,36828,32829],{"class":792},[240,36830,440],{"class":288},[240,36832,1668],{"class":264},[240,36834,2129],{"class":257},[240,36836,36837,36839,36841,36843,36845,36847,36849,36851,36853,36855,36857,36859],{"class":242,"line":1730},[240,36838,32791],{"class":264},[240,36840,32923],{"class":257},[240,36842,440],{"class":288},[240,36844,36775],{"class":257},[240,36846,32820],{"class":792},[240,36848,440],{"class":288},[240,36850,1692],{"class":264},[240,36852,2479],{"class":257},[240,36854,32875],{"class":792},[240,36856,440],{"class":288},[240,36858,1668],{"class":264},[240,36860,2129],{"class":257},[240,36862,36863,36865,36868,36870,36872,36874,36876,36878,36880,36882,36884,36887,36889,36891,36893,36895,36897,36899,36901,36903],{"class":242,"line":3582},[240,36864,32791],{"class":264},[240,36866,36867],{"class":257},".c5",[240,36869,440],{"class":288},[240,36871,32799],{"class":257},[240,36873,32802],{"class":792},[240,36875,440],{"class":288},[240,36877,36816],{"class":264},[240,36879,2479],{"class":257},[240,36881,32811],{"class":792},[240,36883,440],{"class":288},[240,36885,36886],{"class":264},"384",[240,36888,2479],{"class":257},[240,36890,32820],{"class":792},[240,36892,440],{"class":288},[240,36894,1692],{"class":264},[240,36896,2479],{"class":257},[240,36898,32829],{"class":792},[240,36900,440],{"class":288},[240,36902,1643],{"class":264},[240,36904,2129],{"class":257},[240,36906,36907,36909,36912,36914,36916,36918,36920,36922,36924,36926,36928,36930,36932,36934,36936,36938,36940,36942,36944,36946],{"class":242,"line":3596},[240,36908,32791],{"class":264},[240,36910,36911],{"class":257},".c6",[240,36913,440],{"class":288},[240,36915,32799],{"class":257},[240,36917,32802],{"class":792},[240,36919,440],{"class":288},[240,36921,36886],{"class":264},[240,36923,2479],{"class":257},[240,36925,32811],{"class":792},[240,36927,440],{"class":288},[240,36929,36886],{"class":264},[240,36931,2479],{"class":257},[240,36933,32820],{"class":792},[240,36935,440],{"class":288},[240,36937,1692],{"class":264},[240,36939,2479],{"class":257},[240,36941,32829],{"class":792},[240,36943,440],{"class":288},[240,36945,1643],{"class":264},[240,36947,2129],{"class":257},[240,36949,36950,36952,36955,36957,36959,36961,36963,36965,36967,36969,36971,36973,36975,36977,36979,36981,36983,36985,36987,36989],{"class":242,"line":3601},[240,36951,32791],{"class":264},[240,36953,36954],{"class":257},".c7",[240,36956,440],{"class":288},[240,36958,32799],{"class":257},[240,36960,32802],{"class":792},[240,36962,440],{"class":288},[240,36964,36886],{"class":264},[240,36966,2479],{"class":257},[240,36968,32811],{"class":792},[240,36970,440],{"class":288},[240,36972,36816],{"class":264},[240,36974,2479],{"class":257},[240,36976,32820],{"class":792},[240,36978,440],{"class":288},[240,36980,1692],{"class":264},[240,36982,2479],{"class":257},[240,36984,32829],{"class":792},[240,36986,440],{"class":288},[240,36988,1643],{"class":264},[240,36990,2129],{"class":257},[240,36992,36993,36995,36998,37000,37002,37004,37006,37008,37010,37012,37014,37016],{"class":242,"line":3607},[240,36994,32791],{"class":264},[240,36996,36997],{"class":257},".s8",[240,36999,440],{"class":288},[240,37001,36775],{"class":257},[240,37003,32820],{"class":792},[240,37005,440],{"class":288},[240,37007,1692],{"class":264},[240,37009,2479],{"class":257},[240,37011,32875],{"class":792},[240,37013,440],{"class":288},[240,37015,1668],{"class":264},[240,37017,2129],{"class":257},[240,37019,37020],{"class":242,"line":3628},[240,37021,32948],{"class":246},[240,37023,37024,37026,37028,37030],{"class":242,"line":3633},[240,37025,32791],{"class":264},[240,37027,32955],{"class":257},[240,37029,440],{"class":288},[240,37031,32960],{"class":257},[240,37033,37034],{"class":242,"line":3647},[240,37035,37036],{"class":246},"       # 定义全连接层\n",[240,37038,37039,37041,37044,37046,37048,37050,37052,37054,37056,37058,37060,37063],{"class":242,"line":3652},[240,37040,32791],{"class":264},[240,37042,37043],{"class":257},".f1",[240,37045,440],{"class":288},[240,37047,32977],{"class":257},[240,37049,2445],{"class":264},[240,37051,2554],{"class":288},[240,37053,2445],{"class":264},[240,37055,2554],{"class":288},[240,37057,36816],{"class":264},[240,37059,2479],{"class":257},[240,37061,37062],{"class":264},"4096",[240,37064,2129],{"class":257},[240,37066,37067,37069,37072,37074,37076,37078,37080,37082],{"class":242,"line":3681},[240,37068,32791],{"class":264},[240,37070,37071],{"class":257},".f2",[240,37073,440],{"class":288},[240,37075,32977],{"class":257},[240,37077,37062],{"class":264},[240,37079,2479],{"class":257},[240,37081,37062],{"class":264},[240,37083,2129],{"class":257},[240,37085,37086,37088,37091,37093,37095,37097,37099,37101],{"class":242,"line":3686},[240,37087,32791],{"class":264},[240,37089,37090],{"class":257},".f3",[240,37092,440],{"class":288},[240,37094,32977],{"class":257},[240,37096,37062],{"class":264},[240,37098,2479],{"class":257},[240,37100,2546],{"class":264},[240,37102,2129],{"class":257},[240,37104,37105],{"class":242,"line":3703},[240,37106,4353],{"emptyLinePlaceholder":2051},[240,37108,37109],{"class":242,"line":3708},[240,37110,37111],{"class":246},"    # 定义前向传播\n",[240,37113,37114,37116,37118],{"class":242,"line":3713},[240,37115,32747],{"class":288},[240,37117,33039],{"class":436},[240,37119,33042],{"class":257},[240,37121,37122,37124,37126,37128,37131,37133],{"class":242,"line":3718},[240,37123,33047],{"class":257},[240,37125,440],{"class":288},[240,37127,32769],{"class":264},[240,37129,37130],{"class":257},".ReLu(",[240,37132,32769],{"class":264},[240,37134,33059],{"class":257},[240,37136,37137,37139,37141,37143],{"class":242,"line":3732},[240,37138,33047],{"class":257},[240,37140,440],{"class":288},[240,37142,32769],{"class":264},[240,37144,33070],{"class":257},[240,37146,37147,37149,37151,37153,37155,37157],{"class":242,"line":3737},[240,37148,33047],{"class":257},[240,37150,440],{"class":288},[240,37152,32769],{"class":264},[240,37154,37130],{"class":257},[240,37156,32769],{"class":264},[240,37158,33085],{"class":257},[240,37160,37161,37163,37165,37167],{"class":242,"line":4530},[240,37162,33047],{"class":257},[240,37164,440],{"class":288},[240,37166,32769],{"class":264},[240,37168,33096],{"class":257},[240,37170,37171,37173,37175,37177,37179,37181],{"class":242,"line":4544},[240,37172,33047],{"class":257},[240,37174,440],{"class":288},[240,37176,32769],{"class":264},[240,37178,37130],{"class":257},[240,37180,32769],{"class":264},[240,37182,37183],{"class":257},".c5(x))\n",[240,37185,37186,37188,37190,37192,37194,37196],{"class":242,"line":4552},[240,37187,33047],{"class":257},[240,37189,440],{"class":288},[240,37191,32769],{"class":264},[240,37193,37130],{"class":257},[240,37195,32769],{"class":264},[240,37197,37198],{"class":257},".c6(x))\n",[240,37200,37201,37203,37205,37207,37209,37211],{"class":242,"line":4557},[240,37202,33047],{"class":257},[240,37204,440],{"class":288},[240,37206,32769],{"class":264},[240,37208,37130],{"class":257},[240,37210,32769],{"class":264},[240,37212,37213],{"class":257},".c7(x))\n",[240,37215,37216,37218,37220,37222],{"class":242,"line":4563},[240,37217,33047],{"class":257},[240,37219,440],{"class":288},[240,37221,32769],{"class":264},[240,37223,37224],{"class":257},".s8(x)\n",[240,37226,37227],{"class":242,"line":4569},[240,37228,4353],{"emptyLinePlaceholder":2051},[240,37230,37231],{"class":242,"line":4574},[240,37232,37233],{"class":246},"        # 展平加线性全连接层\n",[240,37235,37236,37238,37240,37242],{"class":242,"line":9899},[240,37237,33047],{"class":257},[240,37239,440],{"class":288},[240,37241,32769],{"class":264},[240,37243,33107],{"class":257},[240,37245,37246,37248,37250,37252,37254,37256],{"class":242,"line":9923},[240,37247,33047],{"class":257},[240,37249,440],{"class":288},[240,37251,32769],{"class":264},[240,37253,37130],{"class":257},[240,37255,32769],{"class":264},[240,37257,37258],{"class":257},".f1(x))\n",[240,37260,37261],{"class":242,"line":9928},[240,37262,37263],{"class":246},"        # 还需要dropout对神经元随机进行失活\n",[240,37265,37266,37268,37270,37273,37276],{"class":242,"line":9934},[240,37267,33047],{"class":257},[240,37269,440],{"class":288},[240,37271,37272],{"class":257},"F.dropout(x,",[240,37274,37275],{"class":264},"0.5",[240,37277,2129],{"class":257},[240,37279,37280,37282,37284,37286,37288,37290],{"class":242,"line":9961},[240,37281,33047],{"class":257},[240,37283,440],{"class":288},[240,37285,32769],{"class":264},[240,37287,37130],{"class":257},[240,37289,32769],{"class":264},[240,37291,37292],{"class":257},".f2(x))\n",[240,37294,37295,37297,37299,37301,37303],{"class":242,"line":9966},[240,37296,33047],{"class":257},[240,37298,440],{"class":288},[240,37300,37272],{"class":257},[240,37302,37275],{"class":264},[240,37304,2129],{"class":257},[240,37306,37307],{"class":242,"line":9972},[240,37308,37309],{"class":246},"        # 直接输出\n",[240,37311,37312,37314,37316,37318],{"class":242,"line":9984},[240,37313,33047],{"class":257},[240,37315,440],{"class":288},[240,37317,32769],{"class":264},[240,37319,37320],{"class":257},".f3(x)\n",[240,37322,37323],{"class":242,"line":9996},[240,37324,37325],{"class":246},"        # 前向传播输出\n",[240,37327,37328,37330],{"class":242,"line":10008},[240,37329,16701],{"class":288},[240,37331,33155],{"class":257},[240,37333,37334],{"class":242,"line":11667},[240,37335,37336],{"class":246},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[240,37338,37339,37341,37343,37345,37347],{"class":242,"line":11692},[240,37340,3489],{"class":288},[240,37342,33166],{"class":264},[240,37344,4901],{"class":288},[240,37346,33171],{"class":443},[240,37348,5691],{"class":257},[240,37350,37351,37353,37355,37357,37359,37361,37363,37365,37367],{"class":242,"line":11715},[240,37352,33183],{"class":257},[240,37354,440],{"class":288},[240,37356,32397],{"class":257},[240,37358,33190],{"class":443},[240,37360,3658],{"class":288},[240,37362,33195],{"class":257},[240,37364,3655],{"class":288},[240,37366,32422],{"class":443},[240,37368,2129],{"class":257},[240,37370,37371],{"class":242,"line":11739},[240,37372,37373],{"class":246},"    # 模型实例化，然后将实例化的模型放到设备中\n",[240,37375,37376,37378,37380],{"class":242,"line":11744},[240,37377,33235],{"class":257},[240,37379,440],{"class":288},[240,37381,37382],{"class":257},"AlexNet().to(device)\n",[240,37384,37385,37387,37389,37391,37393,37396,37398,37400],{"class":242,"line":11749},[240,37386,33245],{"class":264},[240,37388,33248],{"class":257},[240,37390,1643],{"class":264},[240,37392,2479],{"class":257},[240,37394,37395],{"class":264},"227",[240,37397,2479],{"class":257},[240,37399,37395],{"class":264},[240,37401,33261],{"class":257},[1826,37403,37404],{"start":250},[1829,37405,33274],{},[231,37407,37409],{"className":32324,"code":37408,"language":32326,"meta":236,"style":236},"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",[23,37410,37411,37417,37423,37433,37439,37449,37459,37469,37479,37489,37493,37504,37514,37518,37522,37526,37534,37546,37556,37572,37582,37614,37628,37638,37648,37652,37662,37676,37686,37696,37706,37712,37716,37720,37724,37728,37732,37740,37760,37764,37768,37772,37776,37780,37796,37800,37804,37812,37816,37820,37828,37832,37836,37840,37848,37852,37856,37860,37864,37872,37876,37884,37888,37896,37900,37908,37912,37920,37924,37928,37936,37940,37944,37948,37960,37984,37998,38002,38006,38010,38018,38022,38030,38034,38042,38046,38054,38058,38066,38070,38078,38082,38094,38098,38106,38110,38118,38122,38126,38130,38134,38142,38146,38162,38166,38174,38178,38182,38186,38190,38194,38198,38202,38218,38222,38234,38238,38250,38254,38266,38270,38278,38282,38290,38294,38298,38303,38309,38313,38322,38326,38343,38347,38356,38360,38378,38391,38396,38409,38413,38417,38425,38429,38433,38441,38445,38453,38457,38465,38469,38473,38515,38557,38561,38565,38581,38585,38601,38605,38609,38617,38621,38625,38637,38675,38680,38685,38694,38698,38712,38722,38728,38734,38740,38746,38750,38754,38760,38764,38768,38776,38780,38798,38802,38806,38810,38826,38830,38834,38838,38842,38846,38866,38886,38890,38894,38898,38906,38914,38918,38934,38954,38974,38978,38982,38990,38998,39002,39006,39010,39022,39026,39036,39044,39061],{"__ignoreMap":236},[240,37412,37413,37415],{"class":242,"line":243},[240,37414,32338],{"class":288},[240,37416,33768],{"class":257},[240,37418,37419,37421],{"class":242,"line":250},[240,37420,32338],{"class":288},[240,37422,33775],{"class":257},[240,37424,37425,37427,37429,37431],{"class":242,"line":261},[240,37426,32338],{"class":288},[240,37428,33786],{"class":257},[240,37430,33329],{"class":288},[240,37432,33791],{"class":257},[240,37434,37435,37437],{"class":242,"line":277},[240,37436,32338],{"class":288},[240,37438,32341],{"class":257},[240,37440,37441,37443,37445,37447],{"class":242,"line":294},[240,37442,32683],{"class":288},[240,37444,33361],{"class":257},[240,37446,32338],{"class":288},[240,37448,33808],{"class":257},[240,37450,37451,37453,37455,37457],{"class":242,"line":309},[240,37452,32683],{"class":288},[240,37454,33314],{"class":257},[240,37456,32338],{"class":288},[240,37458,33319],{"class":257},[240,37460,37461,37463,37465,37467],{"class":242,"line":529},[240,37462,32683],{"class":288},[240,37464,33344],{"class":257},[240,37466,32338],{"class":288},[240,37468,33349],{"class":257},[240,37470,37471,37473,37475,37477],{"class":242,"line":549},[240,37472,32338],{"class":288},[240,37474,33361],{"class":257},[240,37476,33329],{"class":288},[240,37478,33366],{"class":257},[240,37480,37481,37483,37485,37487],{"class":242,"line":569},[240,37482,32338],{"class":288},[240,37484,33378],{"class":257},[240,37486,33329],{"class":288},[240,37488,33383],{"class":257},[240,37490,37491],{"class":242,"line":589},[240,37492,33853],{"class":246},[240,37494,37495,37497,37499,37501],{"class":242,"line":715},[240,37496,32683],{"class":288},[240,37498,33860],{"class":257},[240,37500,32338],{"class":288},[240,37502,37503],{"class":257}," AlexNet\n",[240,37505,37506,37508,37510,37512],{"class":242,"line":727},[240,37507,32683],{"class":288},[240,37509,32686],{"class":257},[240,37511,32338],{"class":288},[240,37513,32691],{"class":257},[240,37515,37516],{"class":242,"line":1730},[240,37517,4353],{"emptyLinePlaceholder":2051},[240,37519,37520],{"class":242,"line":3582},[240,37521,4353],{"emptyLinePlaceholder":2051},[240,37523,37524],{"class":242,"line":3596},[240,37525,33888],{"class":246},[240,37527,37528,37530,37532],{"class":242,"line":3601},[240,37529,33893],{"class":288},[240,37531,33896],{"class":436},[240,37533,33899],{"class":257},[240,37535,37536,37538,37540,37542,37544],{"class":242,"line":3607},[240,37537,33904],{"class":257},[240,37539,440],{"class":288},[240,37541,33401],{"class":257},[240,37543,33409],{"class":443},[240,37545,33412],{"class":257},[240,37547,37548,37550,37552,37554],{"class":242,"line":3628},[240,37549,33917],{"class":792},[240,37551,440],{"class":288},[240,37553,33422],{"class":264},[240,37555,33412],{"class":257},[240,37557,37558,37560,37562,37564,37566,37568,37570],{"class":242,"line":3633},[240,37559,33928],{"class":792},[240,37561,440],{"class":288},[240,37563,33439],{"class":257},[240,37565,33442],{"class":792},[240,37567,440],{"class":288},[240,37569,37395],{"class":264},[240,37571,33450],{"class":257},[240,37573,37574,37576,37578,37580],{"class":242,"line":3647},[240,37575,33945],{"class":792},[240,37577,440],{"class":288},[240,37579,33422],{"class":264},[240,37581,2129],{"class":257},[240,37583,37584,37586,37588,37590,37592,37594,37596,37598,37600,37602,37604,37606,37608,37610,37612],{"class":242,"line":3652},[240,37585,33956],{"class":257},[240,37587,440],{"class":288},[240,37589,33961],{"class":257},[240,37591,33964],{"class":264},[240,37593,789],{"class":257},[240,37595,33969],{"class":264},[240,37597,2554],{"class":288},[240,37599,9309],{"class":264},[240,37601,33976],{"class":257},[240,37603,33964],{"class":264},[240,37605,789],{"class":257},[240,37607,33983],{"class":264},[240,37609,2554],{"class":288},[240,37611,9309],{"class":264},[240,37613,33990],{"class":257},[240,37615,37616,37618,37620,37622,37624,37626],{"class":242,"line":3681},[240,37617,33995],{"class":257},[240,37619,440],{"class":288},[240,37621,34000],{"class":257},[240,37623,33483],{"class":792},[240,37625,440],{"class":288},[240,37627,33488],{"class":257},[240,37629,37630,37632,37634,37636],{"class":242,"line":3686},[240,37631,34011],{"class":792},[240,37633,440],{"class":288},[240,37635,34016],{"class":264},[240,37637,33412],{"class":257},[240,37639,37640,37642,37644,37646],{"class":242,"line":3703},[240,37641,34023],{"class":792},[240,37643,440],{"class":288},[240,37645,33422],{"class":264},[240,37647,33412],{"class":257},[240,37649,37650],{"class":242,"line":3708},[240,37651,34034],{"class":246},[240,37653,37654,37656,37658,37660],{"class":242,"line":3713},[240,37655,34039],{"class":792},[240,37657,440],{"class":288},[240,37659,2496],{"class":264},[240,37661,2129],{"class":257},[240,37663,37664,37666,37668,37670,37672,37674],{"class":242,"line":3718},[240,37665,34050],{"class":257},[240,37667,440],{"class":288},[240,37669,33480],{"class":257},[240,37671,33483],{"class":792},[240,37673,440],{"class":288},[240,37675,34061],{"class":257},[240,37677,37678,37680,37682,37684],{"class":242,"line":3732},[240,37679,34066],{"class":792},[240,37681,440],{"class":288},[240,37683,34016],{"class":264},[240,37685,33412],{"class":257},[240,37687,37688,37690,37692,37694],{"class":242,"line":3737},[240,37689,34077],{"class":792},[240,37691,440],{"class":288},[240,37693,33422],{"class":264},[240,37695,33412],{"class":257},[240,37697,37698,37700,37702,37704],{"class":242,"line":4530},[240,37699,34088],{"class":792},[240,37701,440],{"class":288},[240,37703,2496],{"class":264},[240,37705,2129],{"class":257},[240,37707,37708,37710],{"class":242,"line":4544},[240,37709,6042],{"class":288},[240,37711,34101],{"class":257},[240,37713,37714],{"class":242,"line":4552},[240,37715,4353],{"emptyLinePlaceholder":2051},[240,37717,37718],{"class":242,"line":4557},[240,37719,34110],{"class":246},[240,37721,37722],{"class":242,"line":4563},[240,37723,34115],{"class":246},[240,37725,37726],{"class":242,"line":4569},[240,37727,4353],{"emptyLinePlaceholder":2051},[240,37729,37730],{"class":242,"line":4574},[240,37731,34124],{"class":246},[240,37733,37734,37736,37738],{"class":242,"line":9899},[240,37735,33893],{"class":288},[240,37737,34131],{"class":436},[240,37739,34134],{"class":257},[240,37741,37742,37744,37746,37748,37750,37752,37754,37756,37758],{"class":242,"line":9923},[240,37743,33183],{"class":257},[240,37745,440],{"class":288},[240,37747,32397],{"class":257},[240,37749,33190],{"class":443},[240,37751,3658],{"class":288},[240,37753,33195],{"class":257},[240,37755,3655],{"class":288},[240,37757,34153],{"class":443},[240,37759,2129],{"class":257},[240,37761,37762],{"class":242,"line":9928},[240,37763,4353],{"emptyLinePlaceholder":2051},[240,37765,37766],{"class":242,"line":9934},[240,37767,4353],{"emptyLinePlaceholder":2051},[240,37769,37770],{"class":242,"line":9961},[240,37771,34168],{"class":246},[240,37773,37774],{"class":242,"line":9966},[240,37775,34173],{"class":246},[240,37777,37778],{"class":242,"line":9972},[240,37779,34178],{"class":246},[240,37781,37782,37784,37786,37788,37790,37792,37794],{"class":242,"line":9984},[240,37783,34183],{"class":257},[240,37785,440],{"class":288},[240,37787,34188],{"class":257},[240,37789,34191],{"class":792},[240,37791,440],{"class":288},[240,37793,34196],{"class":264},[240,37795,2129],{"class":257},[240,37797,37798],{"class":242,"line":9996},[240,37799,4353],{"emptyLinePlaceholder":2051},[240,37801,37802],{"class":242,"line":10008},[240,37803,34207],{"class":246},[240,37805,37806,37808,37810],{"class":242,"line":11667},[240,37807,34212],{"class":257},[240,37809,440],{"class":288},[240,37811,34217],{"class":257},[240,37813,37814],{"class":242,"line":11692},[240,37815,4353],{"emptyLinePlaceholder":2051},[240,37817,37818],{"class":242,"line":11715},[240,37819,34226],{"class":246},[240,37821,37822,37824,37826],{"class":242,"line":11739},[240,37823,33235],{"class":257},[240,37825,440],{"class":288},[240,37827,34235],{"class":257},[240,37829,37830],{"class":242,"line":11744},[240,37831,34240],{"class":246},[240,37833,37834],{"class":242,"line":11749},[240,37835,34245],{"class":246},[240,37837,37838],{"class":242,"line":11754},[240,37839,34250],{"class":246},[240,37841,37842,37844,37846],{"class":242,"line":11763},[240,37843,34255],{"class":257},[240,37845,440],{"class":288},[240,37847,34260],{"class":257},[240,37849,37850],{"class":242,"line":11768},[240,37851,4353],{"emptyLinePlaceholder":2051},[240,37853,37854],{"class":242,"line":11774},[240,37855,4353],{"emptyLinePlaceholder":2051},[240,37857,37858],{"class":242,"line":11795},[240,37859,34273],{"class":246},[240,37861,37862],{"class":242,"line":11801},[240,37863,34278],{"class":246},[240,37865,37866,37868,37870],{"class":242,"line":11815},[240,37867,34283],{"class":257},[240,37869,440],{"class":288},[240,37871,34288],{"class":264},[240,37873,37874],{"class":242,"line":11821},[240,37875,34293],{"class":246},[240,37877,37878,37880,37882],{"class":242,"line":11848},[240,37879,34298],{"class":257},[240,37881,440],{"class":288},[240,37883,34303],{"class":257},[240,37885,37886],{"class":242,"line":11857},[240,37887,34308],{"class":246},[240,37889,37890,37892,37894],{"class":242,"line":11863},[240,37891,34313],{"class":257},[240,37893,440],{"class":288},[240,37895,34303],{"class":257},[240,37897,37898],{"class":242,"line":11871},[240,37899,34322],{"class":246},[240,37901,37902,37904,37906],{"class":242,"line":11876},[240,37903,34327],{"class":257},[240,37905,440],{"class":288},[240,37907,34303],{"class":257},[240,37909,37910],{"class":242,"line":18552},[240,37911,34336],{"class":246},[240,37913,37914,37916,37918],{"class":242,"line":18558},[240,37915,34341],{"class":257},[240,37917,440],{"class":288},[240,37919,34303],{"class":257},[240,37921,37922],{"class":242,"line":18581},[240,37923,4353],{"emptyLinePlaceholder":2051},[240,37925,37926],{"class":242,"line":18587},[240,37927,34354],{"class":246},[240,37929,37930,37932,37934],{"class":242,"line":18610},[240,37931,34359],{"class":257},[240,37933,440],{"class":288},[240,37935,34364],{"class":257},[240,37937,37938],{"class":242,"line":18624},[240,37939,4353],{"emptyLinePlaceholder":2051},[240,37941,37942],{"class":242,"line":18644},[240,37943,4353],{"emptyLinePlaceholder":2051},[240,37945,37946],{"class":242,"line":18650},[240,37947,34377],{"class":246},[240,37949,37950,37952,37954,37956,37958],{"class":242,"line":18661},[240,37951,5153],{"class":288},[240,37953,34384],{"class":257},[240,37955,27989],{"class":288},[240,37957,34389],{"class":264},[240,37959,34392],{"class":257},[240,37961,37962,37964,37966,37968,37970,37972,37974,37976,37978,37980,37982],{"class":242,"line":18684},[240,37963,34397],{"class":264},[240,37965,789],{"class":257},[240,37967,34402],{"class":443},[240,37969,34405],{"class":264},[240,37971,2683],{"class":443},[240,37973,34405],{"class":264},[240,37975,2355],{"class":443},[240,37977,34414],{"class":257},[240,37979,2631],{"class":288},[240,37981,1643],{"class":264},[240,37983,32443],{"class":257},[240,37985,37986,37988,37990,37992,37994,37996],{"class":242,"line":18706},[240,37987,34397],{"class":264},[240,37989,789],{"class":257},[240,37991,34429],{"class":443},[240,37993,2554],{"class":288},[240,37995,2546],{"class":264},[240,37997,2129],{"class":257},[240,37999,38000],{"class":242,"line":18711},[240,38001,4353],{"emptyLinePlaceholder":2051},[240,38003,38004],{"class":242,"line":18717},[240,38005,34444],{"class":246},[240,38007,38008],{"class":242,"line":18731},[240,38009,34449],{"class":246},[240,38011,38012,38014,38016],{"class":242,"line":18744},[240,38013,34454],{"class":257},[240,38015,440],{"class":288},[240,38017,34288],{"class":264},[240,38019,38020],{"class":242,"line":18749},[240,38021,34463],{"class":246},[240,38023,38024,38026,38028],{"class":242,"line":18763},[240,38025,34468],{"class":257},[240,38027,440],{"class":288},[240,38029,5037],{"class":264},[240,38031,38032],{"class":242,"line":18768},[240,38033,34477],{"class":246},[240,38035,38036,38038,38040],{"class":242,"line":18774},[240,38037,34482],{"class":257},[240,38039,440],{"class":288},[240,38041,34288],{"class":264},[240,38043,38044],{"class":242,"line":18779},[240,38045,34491],{"class":246},[240,38047,38048,38050,38052],{"class":242,"line":18793},[240,38049,34496],{"class":257},[240,38051,440],{"class":288},[240,38053,5037],{"class":264},[240,38055,38056],{"class":242,"line":18798},[240,38057,34505],{"class":246},[240,38059,38060,38062,38064],{"class":242,"line":18803},[240,38061,34510],{"class":257},[240,38063,440],{"class":288},[240,38065,5037],{"class":264},[240,38067,38068],{"class":242,"line":18817},[240,38069,34519],{"class":246},[240,38071,38072,38074,38076],{"class":242,"line":18829},[240,38073,34524],{"class":257},[240,38075,440],{"class":288},[240,38077,5037],{"class":264},[240,38079,38080],{"class":242,"line":18834},[240,38081,34533],{"class":246},[240,38083,38084,38086,38088,38090,38092],{"class":242,"line":18847},[240,38085,5355],{"class":288},[240,38087,33547],{"class":257},[240,38089,27989],{"class":288},[240,38091,33552],{"class":264},[240,38093,34546],{"class":257},[240,38095,38096],{"class":242,"line":18852},[240,38097,34551],{"class":246},[240,38099,38100,38102,38104],{"class":242,"line":18857},[240,38101,34556],{"class":257},[240,38103,440],{"class":288},[240,38105,34561],{"class":257},[240,38107,38108],{"class":242,"line":18862},[240,38109,34566],{"class":246},[240,38111,38112,38114,38116],{"class":242,"line":18875},[240,38113,34571],{"class":257},[240,38115,440],{"class":288},[240,38117,34576],{"class":257},[240,38119,38120],{"class":242,"line":18880},[240,38121,34582],{"class":246},[240,38123,38124],{"class":242,"line":34579},[240,38125,34588],{"class":257},[240,38127,38128],{"class":242,"line":34585},[240,38129,34594],{"class":246},[240,38131,38132],{"class":242,"line":34591},[240,38133,34600],{"class":246},[240,38135,38136,38138,38140],{"class":242,"line":34597},[240,38137,34606],{"class":257},[240,38139,440],{"class":288},[240,38141,34611],{"class":257},[240,38143,38144],{"class":242,"line":34603},[240,38145,34617],{"class":246},[240,38147,38148,38150,38152,38154,38156,38158,38160],{"class":242,"line":34614},[240,38149,34623],{"class":257},[240,38151,440],{"class":288},[240,38153,34628],{"class":257},[240,38155,34631],{"class":792},[240,38157,440],{"class":288},[240,38159,1643],{"class":264},[240,38161,2129],{"class":257},[240,38163,38164],{"class":242,"line":34620},[240,38165,34643],{"class":246},[240,38167,38168,38170,38172],{"class":242,"line":34640},[240,38169,34649],{"class":257},[240,38171,440],{"class":288},[240,38173,34654],{"class":257},[240,38175,38176],{"class":242,"line":34646},[240,38177,34660],{"class":246},[240,38179,38180],{"class":242,"line":34657},[240,38181,34666],{"class":257},[240,38183,38184],{"class":242,"line":34663},[240,38185,34672],{"class":246},[240,38187,38188],{"class":242,"line":34669},[240,38189,34678],{"class":257},[240,38191,38192],{"class":242,"line":34675},[240,38193,34684],{"class":246},[240,38195,38196],{"class":242,"line":34681},[240,38197,34690],{"class":257},[240,38199,38200],{"class":242,"line":34687},[240,38201,34696],{"class":246},[240,38203,38204,38206,38208,38210,38212,38214,38216],{"class":242,"line":34693},[240,38205,34702],{"class":257},[240,38207,11428],{"class":288},[240,38209,34707],{"class":257},[240,38211,2554],{"class":288},[240,38213,34712],{"class":257},[240,38215,1274],{"class":264},[240,38217,2129],{"class":257},[240,38219,38220],{"class":242,"line":34699},[240,38221,34722],{"class":246},[240,38223,38224,38226,38228,38230,38232],{"class":242,"line":34719},[240,38225,34728],{"class":257},[240,38227,11428],{"class":288},[240,38229,34733],{"class":257},[240,38231,4901],{"class":288},[240,38233,34738],{"class":257},[240,38235,38236],{"class":242,"line":34725},[240,38237,34744],{"class":246},[240,38239,38240,38242,38244,38246,38248],{"class":242,"line":34741},[240,38241,34750],{"class":257},[240,38243,11428],{"class":288},[240,38245,34712],{"class":257},[240,38247,1274],{"class":264},[240,38249,2129],{"class":257},[240,38251,38252],{"class":242,"line":34747},[240,38253,34764],{"class":246},[240,38255,38256,38258,38260,38262,38264],{"class":242,"line":34761},[240,38257,5355],{"class":288},[240,38259,34772],{"class":257},[240,38261,27989],{"class":288},[240,38263,33552],{"class":264},[240,38265,34779],{"class":257},[240,38267,38268],{"class":242,"line":34767},[240,38269,34785],{"class":246},[240,38271,38272,38274,38276],{"class":242,"line":34782},[240,38273,34556],{"class":257},[240,38275,440],{"class":288},[240,38277,34561],{"class":257},[240,38279,38280],{"class":242,"line":34788},[240,38281,34800],{"class":246},[240,38283,38284,38286,38288],{"class":242,"line":34797},[240,38285,34571],{"class":257},[240,38287,440],{"class":288},[240,38289,34576],{"class":257},[240,38291,38292],{"class":242,"line":34803},[240,38293,34815],{"class":246},[240,38295,38296],{"class":242,"line":34812},[240,38297,34821],{"class":257},[240,38299,38300],{"class":242,"line":34818},[240,38301,38302],{"class":246},"            # 验证时不计算梯度以节省内存\u002F计算\n",[240,38304,38305,38307],{"class":242,"line":34824},[240,38306,34827],{"class":288},[240,38308,34830],{"class":257},[240,38310,38311],{"class":242,"line":34833},[240,38312,34836],{"class":246},[240,38314,38315,38318,38320],{"class":242,"line":34839},[240,38316,38317],{"class":257},"                output",[240,38319,440],{"class":288},[240,38321,34611],{"class":257},[240,38323,38324],{"class":242,"line":34850},[240,38325,34853],{"class":246},[240,38327,38328,38331,38333,38335,38337,38339,38341],{"class":242,"line":34856},[240,38329,38330],{"class":257},"                pre_lab",[240,38332,440],{"class":288},[240,38334,34628],{"class":257},[240,38336,34631],{"class":792},[240,38338,440],{"class":288},[240,38340,1643],{"class":264},[240,38342,2129],{"class":257},[240,38344,38345],{"class":242,"line":34875},[240,38346,34878],{"class":246},[240,38348,38349,38352,38354],{"class":242,"line":34881},[240,38350,38351],{"class":257},"                val_batch_loss",[240,38353,440],{"class":288},[240,38355,34654],{"class":257},[240,38357,38358],{"class":242,"line":34892},[240,38359,34895],{"class":246},[240,38361,38362,38365,38367,38370,38372,38374,38376],{"class":242,"line":34898},[240,38363,38364],{"class":257},"                val_loss",[240,38366,11428],{"class":288},[240,38368,38369],{"class":257},"val_batch_loss.item()",[240,38371,2554],{"class":288},[240,38373,34712],{"class":257},[240,38375,1274],{"class":264},[240,38377,2129],{"class":257},[240,38379,38380,38383,38385,38387,38389],{"class":242,"line":34918},[240,38381,38382],{"class":257},"                val_corrects",[240,38384,11428],{"class":288},[240,38386,34733],{"class":257},[240,38388,4901],{"class":288},[240,38390,34738],{"class":257},[240,38392,38393],{"class":242,"line":34934},[240,38394,38395],{"class":246},"            # 当前用于验证的样本数量\n",[240,38397,38398,38401,38403,38405,38407],{"class":242,"line":34940},[240,38399,38400],{"class":257},"            val_num",[240,38402,11428],{"class":288},[240,38404,34712],{"class":257},[240,38406,1274],{"class":264},[240,38408,2129],{"class":257},[240,38410,38411],{"class":242,"line":34954},[240,38412,34957],{"class":246},[240,38414,38415],{"class":242,"line":34960},[240,38416,34963],{"class":246},[240,38418,38419,38421,38423],{"class":242,"line":34966},[240,38420,34969],{"class":257},[240,38422,2683],{"class":288},[240,38424,34974],{"class":257},[240,38426,38427],{"class":242,"line":34977},[240,38428,34980],{"class":246},[240,38430,38431],{"class":242,"line":34983},[240,38432,34986],{"class":246},[240,38434,38435,38437,38439],{"class":242,"line":34989},[240,38436,34992],{"class":257},[240,38438,2683],{"class":288},[240,38440,34974],{"class":257},[240,38442,38443],{"class":242,"line":34999},[240,38444,35002],{"class":246},[240,38446,38447,38449,38451],{"class":242,"line":35005},[240,38448,35008],{"class":257},[240,38450,2683],{"class":288},[240,38452,35013],{"class":257},[240,38454,38455],{"class":242,"line":35016},[240,38456,35019],{"class":246},[240,38458,38459,38461,38463],{"class":242,"line":35022},[240,38460,35025],{"class":257},[240,38462,2683],{"class":288},[240,38464,35013],{"class":257},[240,38466,38467],{"class":242,"line":35032},[240,38468,4353],{"emptyLinePlaceholder":2051},[240,38470,38471],{"class":242,"line":35037},[240,38472,35040],{"class":246},[240,38474,38475,38477,38479,38481,38483,38485,38487,38489,38491,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513],{"class":242,"line":35043},[240,38476,34397],{"class":264},[240,38478,789],{"class":257},[240,38480,5544],{"class":443},[240,38482,34405],{"class":264},[240,38484,35054],{"class":443},[240,38486,2991],{"class":264},[240,38488,35059],{"class":288},[240,38490,3040],{"class":264},[240,38492,35064],{"class":443},[240,38494,2991],{"class":264},[240,38496,35059],{"class":288},[240,38498,3040],{"class":264},[240,38500,5544],{"class":443},[240,38502,35075],{"class":257},[240,38504,2631],{"class":288},[240,38506,1643],{"class":264},[240,38508,35082],{"class":257},[240,38510,2631],{"class":288},[240,38512,1643],{"class":264},[240,38514,35089],{"class":257},[240,38516,38517,38519,38521,38523,38525,38527,38529,38531,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555],{"class":242,"line":35092},[240,38518,34397],{"class":264},[240,38520,789],{"class":257},[240,38522,5544],{"class":443},[240,38524,34405],{"class":264},[240,38526,35103],{"class":443},[240,38528,2991],{"class":264},[240,38530,35059],{"class":288},[240,38532,3040],{"class":264},[240,38534,35112],{"class":443},[240,38536,2991],{"class":264},[240,38538,35059],{"class":288},[240,38540,3040],{"class":264},[240,38542,5544],{"class":443},[240,38544,35123],{"class":257},[240,38546,2631],{"class":288},[240,38548,1643],{"class":264},[240,38550,35130],{"class":257},[240,38552,2631],{"class":288},[240,38554,1643],{"class":264},[240,38556,35089],{"class":257},[240,38558,38559],{"class":242,"line":35139},[240,38560,4353],{"emptyLinePlaceholder":2051},[240,38562,38563],{"class":242,"line":35144},[240,38564,35147],{"class":246},[240,38566,38567,38569,38571,38573,38575,38577,38579],{"class":242,"line":35150},[240,38568,4450],{"class":288},[240,38570,35155],{"class":257},[240,38572,2631],{"class":288},[240,38574,1643],{"class":264},[240,38576,3034],{"class":257},[240,38578,3053],{"class":288},[240,38580,35166],{"class":257},[240,38582,38583],{"class":242,"line":35169},[240,38584,35172],{"class":246},[240,38586,38587,38589,38591,38593,38595,38597,38599],{"class":242,"line":35175},[240,38588,35178],{"class":257},[240,38590,2161],{"class":264},[240,38592,440],{"class":288},[240,38594,35185],{"class":257},[240,38596,2631],{"class":288},[240,38598,1643],{"class":264},[240,38600,35192],{"class":257},[240,38602,38603],{"class":242,"line":35195},[240,38604,35198],{"class":246},[240,38606,38607],{"class":242,"line":35201},[240,38608,35204],{"class":246},[240,38610,38611,38613,38615],{"class":242,"line":35207},[240,38612,35210],{"class":257},[240,38614,440],{"class":288},[240,38616,34260],{"class":257},[240,38618,38619],{"class":242,"line":35217},[240,38620,4353],{"emptyLinePlaceholder":2051},[240,38622,38623],{"class":242,"line":35222},[240,38624,35225],{"class":246},[240,38626,38627,38629,38631,38633,38635],{"class":242,"line":35228},[240,38628,35231],{"class":257},[240,38630,440],{"class":288},[240,38632,35236],{"class":257},[240,38634,2631],{"class":288},[240,38636,35241],{"class":257},[240,38638,38639,38641,38643,38645,38647,38649,38651,38653,38655,38657,38659,38661,38663,38665,38667,38669,38671,38673],{"class":242,"line":35244},[240,38640,34397],{"class":264},[240,38642,789],{"class":257},[240,38644,35251],{"class":443},[240,38646,2991],{"class":264},[240,38648,35256],{"class":288},[240,38650,3040],{"class":264},[240,38652,2643],{"class":443},[240,38654,2991],{"class":264},[240,38656,35256],{"class":288},[240,38658,3040],{"class":264},[240,38660,35269],{"class":443},[240,38662,35272],{"class":257},[240,38664,35275],{"class":288},[240,38666,3002],{"class":264},[240,38668,35280],{"class":257},[240,38670,2429],{"class":288},[240,38672,3002],{"class":264},[240,38674,32443],{"class":257},[240,38676,38677],{"class":242,"line":35289},[240,38678,38679],{"class":246},"    # 选择最优参数并保存\n",[240,38681,38682],{"class":242,"line":35295},[240,38683,38684],{"class":246},"    # 保存最佳模型权重字典\n",[240,38686,38687,38690,38692],{"class":242,"line":35301},[240,38688,38689],{"class":257},"    torch.save(best_model_wts,",[240,38691,35313],{"class":443},[240,38693,2129],{"class":257},[240,38695,38696],{"class":242,"line":35307},[240,38697,35333],{"class":246},[240,38699,38700,38702,38704,38706,38708,38710],{"class":242,"line":35318},[240,38701,35339],{"class":257},[240,38703,440],{"class":288},[240,38705,35344],{"class":257},[240,38707,35347],{"class":792},[240,38709,440],{"class":288},[240,38711,3504],{"class":257},[240,38713,38714,38716,38718,38720],{"class":242,"line":35324},[240,38715,35357],{"class":443},[240,38717,2954],{"class":257},[240,38719,35362],{"class":264},[240,38721,35365],{"class":257},[240,38723,38724,38726],{"class":242,"line":35330},[240,38725,35371],{"class":443},[240,38727,35374],{"class":257},[240,38729,38730,38732],{"class":242,"line":35336},[240,38731,35380],{"class":443},[240,38733,35383],{"class":257},[240,38735,38736,38738],{"class":242,"line":35354},[240,38737,35389],{"class":443},[240,38739,35392],{"class":257},[240,38741,38742,38744],{"class":242,"line":35368},[240,38743,35398],{"class":443},[240,38745,35401],{"class":257},[240,38747,38748],{"class":242,"line":35377},[240,38749,35407],{"class":257},[240,38751,38752],{"class":242,"line":35386},[240,38753,35413],{"class":246},[240,38755,38756,38758],{"class":242,"line":35395},[240,38757,6042],{"class":288},[240,38759,35421],{"class":257},[240,38761,38762],{"class":242,"line":35404},[240,38763,4353],{"emptyLinePlaceholder":2051},[240,38765,38766],{"class":242,"line":35410},[240,38767,35432],{"class":246},[240,38769,38770,38772,38774],{"class":242,"line":35416},[240,38771,33893],{"class":288},[240,38773,35440],{"class":436},[240,38775,35443],{"class":257},[240,38777,38778],{"class":242,"line":35424},[240,38779,35449],{"class":246},[240,38781,38782,38784,38786,38788,38790,38792,38794,38796],{"class":242,"line":35429},[240,38783,35455],{"class":257},[240,38785,33639],{"class":792},[240,38787,440],{"class":288},[240,38789,789],{"class":257},[240,38791,2597],{"class":264},[240,38793,2479],{"class":257},[240,38795,1716],{"class":264},[240,38797,32443],{"class":257},[240,38799,38800],{"class":242,"line":35435},[240,38801,35475],{"class":246},[240,38803,38804],{"class":242,"line":35446},[240,38805,35481],{"class":246},[240,38807,38808],{"class":242,"line":35452},[240,38809,35487],{"class":246},[240,38811,38812,38814,38816,38818,38820,38822,38824],{"class":242,"line":35472},[240,38813,33673],{"class":257},[240,38815,1643],{"class":264},[240,38817,2479],{"class":257},[240,38819,1668],{"class":264},[240,38821,2479],{"class":257},[240,38823,1643],{"class":264},[240,38825,2129],{"class":257},[240,38827,38828],{"class":242,"line":35478},[240,38829,35510],{"class":246},[240,38831,38832],{"class":242,"line":35484},[240,38833,35516],{"class":246},[240,38835,38836],{"class":242,"line":35490},[240,38837,35522],{"class":246},[240,38839,38840],{"class":242,"line":35507},[240,38841,35528],{"class":246},[240,38843,38844],{"class":242,"line":35513},[240,38845,35534],{"class":246},[240,38847,38848,38850,38852,38854,38856,38858,38860,38862,38864],{"class":242,"line":35519},[240,38849,35540],{"class":257},[240,38851,35543],{"class":443},[240,38853,35546],{"class":257},[240,38855,35549],{"class":443},[240,38857,2479],{"class":257},[240,38859,35554],{"class":792},[240,38861,440],{"class":288},[240,38863,35559],{"class":443},[240,38865,2129],{"class":257},[240,38867,38868,38870,38872,38874,38876,38878,38880,38882,38884],{"class":242,"line":35525},[240,38869,35540],{"class":257},[240,38871,35543],{"class":443},[240,38873,35571],{"class":257},[240,38875,35574],{"class":443},[240,38877,2479],{"class":257},[240,38879,35554],{"class":792},[240,38881,440],{"class":288},[240,38883,35583],{"class":443},[240,38885,2129],{"class":257},[240,38887,38888],{"class":242,"line":35531},[240,38889,35591],{"class":246},[240,38891,38892],{"class":242,"line":35537},[240,38893,35597],{"class":257},[240,38895,38896],{"class":242,"line":35564},[240,38897,35603],{"class":246},[240,38899,38900,38902,38904],{"class":242,"line":35588},[240,38901,35609],{"class":257},[240,38903,35612],{"class":443},[240,38905,2129],{"class":257},[240,38907,38908,38910,38912],{"class":242,"line":35594},[240,38909,35620],{"class":257},[240,38911,35623],{"class":443},[240,38913,2129],{"class":257},[240,38915,38916],{"class":242,"line":35600},[240,38917,35631],{"class":246},[240,38919,38920,38922,38924,38926,38928,38930,38932],{"class":242,"line":35606},[240,38921,33673],{"class":257},[240,38923,1643],{"class":264},[240,38925,2479],{"class":257},[240,38927,1668],{"class":264},[240,38929,2479],{"class":257},[240,38931,1668],{"class":264},[240,38933,2129],{"class":257},[240,38935,38936,38938,38940,38942,38944,38946,38948,38950,38952],{"class":242,"line":35617},[240,38937,35540],{"class":257},[240,38939,35543],{"class":443},[240,38941,35658],{"class":257},[240,38943,35549],{"class":443},[240,38945,2479],{"class":257},[240,38947,35554],{"class":792},[240,38949,440],{"class":288},[240,38951,35669],{"class":443},[240,38953,2129],{"class":257},[240,38955,38956,38958,38960,38962,38964,38966,38968,38970,38972],{"class":242,"line":35628},[240,38957,35540],{"class":257},[240,38959,35543],{"class":443},[240,38961,35681],{"class":257},[240,38963,35574],{"class":443},[240,38965,2479],{"class":257},[240,38967,35554],{"class":792},[240,38969,440],{"class":288},[240,38971,35692],{"class":443},[240,38973,2129],{"class":257},[240,38975,38976],{"class":242,"line":35634},[240,38977,35700],{"class":246},[240,38979,38980],{"class":242,"line":35651},[240,38981,35597],{"class":257},[240,38983,38984,38986,38988],{"class":242,"line":35674},[240,38985,35609],{"class":257},[240,38987,35543],{"class":443},[240,38989,2129],{"class":257},[240,38991,38992,38994,38996],{"class":242,"line":35697},[240,38993,35620],{"class":257},[240,38995,35722],{"class":443},[240,38997,2129],{"class":257},[240,38999,39000],{"class":242,"line":35703},[240,39001,35730],{"class":257},[240,39003,39004],{"class":242,"line":35708},[240,39005,4353],{"emptyLinePlaceholder":2051},[240,39007,39008],{"class":242,"line":35717},[240,39009,35741],{"class":246},[240,39011,39012,39014,39016,39018,39020],{"class":242,"line":35727},[240,39013,3489],{"class":288},[240,39015,33166],{"class":264},[240,39017,4901],{"class":288},[240,39019,33171],{"class":443},[240,39021,5691],{"class":257},[240,39023,39024],{"class":242,"line":35733},[240,39025,35760],{"class":246},[240,39027,39028,39031,39033],{"class":242,"line":35738},[240,39029,39030],{"class":257},"    AlexNet",[240,39032,440],{"class":288},[240,39034,39035],{"class":257},"AlexNet()\n",[240,39037,39038,39040,39042],{"class":242,"line":35744},[240,39039,35777],{"class":257},[240,39041,440],{"class":288},[240,39043,35782],{"class":257},[240,39045,39046,39048,39050,39053,39055,39057,39059],{"class":242,"line":35757},[240,39047,35339],{"class":257},[240,39049,440],{"class":288},[240,39051,39052],{"class":257},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[240,39054,35795],{"class":792},[240,39056,440],{"class":288},[240,39058,1000],{"class":264},[240,39060,2129],{"class":257},[240,39062,39063],{"class":242,"line":35763},[240,39064,35807],{"class":257},[1826,39066,39067],{"start":261},[1829,39068,35820],{},[231,39070,39072],{"className":32324,"code":39071,"language":32326,"meta":236,"style":236},"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",[23,39073,39074,39080,39090,39100,39110,39114,39124,39134,39145,39149,39153,39157,39165,39181,39191,39207,39217,39231,39235,39245,39255,39265,39271,39275,39279,39287,39291,39307,39315,39319,39323,39331,39339,39343,39347,39351,39355,39361,39365,39375,39383,39391,39395,39399,39403,39411,39415,39431,39435,39439,39443,39455,39459,39471,39475,39479,39491,39495,39505,39509,39513,39525,39529,39537,39541,39545,39553,39557,39565,39569,39573,39577,39581,39585,39601,39609,39613,39617,39665,39671,39675,39685,39693,39701,39705,39709,39713,39717,39725,39729,39745,39749,39757,39765],{"__ignoreMap":236},[240,39075,39076,39078],{"class":242,"line":243},[240,39077,32338],{"class":288},[240,39079,32341],{"class":257},[240,39081,39082,39084,39086,39088],{"class":242,"line":250},[240,39083,32338],{"class":288},[240,39085,33361],{"class":257},[240,39087,33329],{"class":288},[240,39089,33366],{"class":257},[240,39091,39092,39094,39096,39098],{"class":242,"line":261},[240,39093,32683],{"class":288},[240,39095,35848],{"class":257},[240,39097,32338],{"class":288},[240,39099,35853],{"class":257},[240,39101,39102,39104,39106,39108],{"class":242,"line":277},[240,39103,32683],{"class":288},[240,39105,33344],{"class":257},[240,39107,32338],{"class":288},[240,39109,33349],{"class":257},[240,39111,39112],{"class":242,"line":294},[240,39113,35868],{"class":246},[240,39115,39116,39118,39120,39122],{"class":242,"line":309},[240,39117,32683],{"class":288},[240,39119,33314],{"class":257},[240,39121,32338],{"class":288},[240,39123,33319],{"class":257},[240,39125,39126,39128,39130,39132],{"class":242,"line":529},[240,39127,32683],{"class":288},[240,39129,33860],{"class":257},[240,39131,32338],{"class":288},[240,39133,37503],{"class":257},[240,39135,39136,39138,39141,39143],{"class":242,"line":549},[240,39137,32683],{"class":288},[240,39139,39140],{"class":257}," 练习.AlexNet.model ",[240,39142,32338],{"class":288},[240,39144,37503],{"class":257},[240,39146,39147],{"class":242,"line":569},[240,39148,4353],{"emptyLinePlaceholder":2051},[240,39150,39151],{"class":242,"line":589},[240,39152,4353],{"emptyLinePlaceholder":2051},[240,39154,39155],{"class":242,"line":715},[240,39156,35897],{"class":246},[240,39158,39159,39161,39163],{"class":242,"line":727},[240,39160,33893],{"class":288},[240,39162,35904],{"class":436},[240,39164,33899],{"class":257},[240,39166,39167,39169,39171,39173,39175,39177,39179],{"class":242,"line":1730},[240,39168,35911],{"class":257},[240,39170,440],{"class":288},[240,39172,33401],{"class":257},[240,39174,33404],{"class":792},[240,39176,440],{"class":288},[240,39178,33409],{"class":443},[240,39180,33412],{"class":257},[240,39182,39183,39185,39187,39189],{"class":242,"line":3582},[240,39184,35928],{"class":792},[240,39186,440],{"class":288},[240,39188,35933],{"class":264},[240,39190,33412],{"class":257},[240,39192,39193,39195,39197,39199,39201,39203,39205],{"class":242,"line":3596},[240,39194,35940],{"class":792},[240,39196,440],{"class":288},[240,39198,33439],{"class":257},[240,39200,33442],{"class":792},[240,39202,440],{"class":288},[240,39204,37395],{"class":264},[240,39206,33450],{"class":257},[240,39208,39209,39211,39213,39215],{"class":242,"line":3601},[240,39210,35957],{"class":792},[240,39212,440],{"class":288},[240,39214,33422],{"class":264},[240,39216,2129],{"class":257},[240,39218,39219,39221,39223,39225,39227,39229],{"class":242,"line":3607},[240,39220,35968],{"class":257},[240,39222,440],{"class":288},[240,39224,33480],{"class":257},[240,39226,33483],{"class":792},[240,39228,440],{"class":288},[240,39230,35979],{"class":257},[240,39232,39233],{"class":242,"line":3628},[240,39234,35984],{"class":246},[240,39236,39237,39239,39241,39243],{"class":242,"line":3633},[240,39238,35989],{"class":792},[240,39240,440],{"class":288},[240,39242,1643],{"class":264},[240,39244,33412],{"class":257},[240,39246,39247,39249,39251,39253],{"class":242,"line":3647},[240,39248,36000],{"class":792},[240,39250,440],{"class":288},[240,39252,33422],{"class":264},[240,39254,33412],{"class":257},[240,39256,39257,39259,39261,39263],{"class":242,"line":3652},[240,39258,36011],{"class":792},[240,39260,440],{"class":288},[240,39262,1274],{"class":264},[240,39264,2129],{"class":257},[240,39266,39267,39269],{"class":242,"line":3681},[240,39268,6042],{"class":288},[240,39270,36024],{"class":257},[240,39272,39273],{"class":242,"line":3686},[240,39274,4353],{"emptyLinePlaceholder":2051},[240,39276,39277],{"class":242,"line":3703},[240,39278,36033],{"class":246},[240,39280,39281,39283,39285],{"class":242,"line":3708},[240,39282,33893],{"class":288},[240,39284,36040],{"class":436},[240,39286,36043],{"class":257},[240,39288,39289],{"class":242,"line":3713},[240,39290,36048],{"class":246},[240,39292,39293,39295,39297,39299,39301,39303,39305],{"class":242,"line":3718},[240,39294,33183],{"class":257},[240,39296,440],{"class":288},[240,39298,33190],{"class":443},[240,39300,3658],{"class":288},[240,39302,33195],{"class":257},[240,39304,3655],{"class":288},[240,39306,36065],{"class":443},[240,39308,39309,39311,39313],{"class":242,"line":3732},[240,39310,33235],{"class":257},[240,39312,440],{"class":288},[240,39314,34235],{"class":257},[240,39316,39317],{"class":242,"line":3737},[240,39318,4353],{"emptyLinePlaceholder":2051},[240,39320,39321],{"class":242,"line":4530},[240,39322,36082],{"class":246},[240,39324,39325,39327,39329],{"class":242,"line":4544},[240,39326,36087],{"class":257},[240,39328,440],{"class":288},[240,39330,34288],{"class":264},[240,39332,39333,39335,39337],{"class":242,"line":4552},[240,39334,36096],{"class":257},[240,39336,440],{"class":288},[240,39338,5037],{"class":264},[240,39340,39341],{"class":242,"line":4557},[240,39342,4353],{"emptyLinePlaceholder":2051},[240,39344,39345],{"class":242,"line":4563},[240,39346,36109],{"class":246},[240,39348,39349],{"class":242,"line":4569},[240,39350,36114],{"class":246},[240,39352,39353],{"class":242,"line":4574},[240,39354,36119],{"class":246},[240,39356,39357,39359],{"class":242,"line":9899},[240,39358,36124],{"class":288},[240,39360,34830],{"class":257},[240,39362,39363],{"class":242,"line":9923},[240,39364,36131],{"class":246},[240,39366,39367,39369,39371,39373],{"class":242,"line":9928},[240,39368,5355],{"class":288},[240,39370,36138],{"class":257},[240,39372,27989],{"class":288},[240,39374,36143],{"class":257},[240,39376,39377,39379,39381],{"class":242,"line":9934},[240,39378,36148],{"class":257},[240,39380,440],{"class":288},[240,39382,36153],{"class":257},[240,39384,39385,39387,39389],{"class":242,"line":9961},[240,39386,36158],{"class":257},[240,39388,440],{"class":288},[240,39390,36163],{"class":257},[240,39392,39393],{"class":242,"line":9966},[240,39394,36168],{"class":246},[240,39396,39397],{"class":242,"line":9972},[240,39398,34821],{"class":257},[240,39400,39401],{"class":242,"line":9984},[240,39402,36177],{"class":246},[240,39404,39405,39407,39409],{"class":242,"line":9996},[240,39406,34606],{"class":257},[240,39408,440],{"class":288},[240,39410,36186],{"class":257},[240,39412,39413],{"class":242,"line":10008},[240,39414,36191],{"class":246},[240,39416,39417,39419,39421,39423,39425,39427,39429],{"class":242,"line":11667},[240,39418,34623],{"class":257},[240,39420,440],{"class":288},[240,39422,34628],{"class":257},[240,39424,34631],{"class":792},[240,39426,440],{"class":288},[240,39428,1643],{"class":264},[240,39430,2129],{"class":257},[240,39432,39433],{"class":242,"line":11692},[240,39434,36212],{"class":246},[240,39436,39437],{"class":242,"line":11715},[240,39438,36217],{"class":246},[240,39440,39441],{"class":242,"line":11739},[240,39442,36222],{"class":246},[240,39444,39445,39447,39449,39451,39453],{"class":242,"line":11744},[240,39446,36227],{"class":257},[240,39448,11428],{"class":288},[240,39450,34733],{"class":257},[240,39452,4901],{"class":288},[240,39454,36236],{"class":257},[240,39456,39457],{"class":242,"line":11749},[240,39458,36241],{"class":246},[240,39460,39461,39463,39465,39467,39469],{"class":242,"line":11754},[240,39462,36246],{"class":257},[240,39464,11428],{"class":288},[240,39466,36251],{"class":257},[240,39468,1274],{"class":264},[240,39470,2129],{"class":257},[240,39472,39473],{"class":242,"line":11763},[240,39474,4353],{"emptyLinePlaceholder":2051},[240,39476,39477],{"class":242,"line":11768},[240,39478,36264],{"class":246},[240,39480,39481,39483,39485,39487,39489],{"class":242,"line":11774},[240,39482,36269],{"class":257},[240,39484,440],{"class":288},[240,39486,36274],{"class":257},[240,39488,2683],{"class":288},[240,39490,36279],{"class":257},[240,39492,39493],{"class":242,"line":11795},[240,39494,36284],{"class":246},[240,39496,39497,39499,39501,39503],{"class":242,"line":11801},[240,39498,34397],{"class":264},[240,39500,789],{"class":257},[240,39502,36293],{"class":443},[240,39504,36296],{"class":257},[240,39506,39507],{"class":242,"line":11815},[240,39508,4353],{"emptyLinePlaceholder":2051},[240,39510,39511],{"class":242,"line":11821},[240,39512,36305],{"class":246},[240,39514,39515,39517,39519,39521,39523],{"class":242,"line":11848},[240,39516,3489],{"class":288},[240,39518,33166],{"class":264},[240,39520,4901],{"class":288},[240,39522,33171],{"class":443},[240,39524,5691],{"class":257},[240,39526,39527],{"class":242,"line":11857},[240,39528,36322],{"class":246},[240,39530,39531,39533,39535],{"class":242,"line":11863},[240,39532,33235],{"class":257},[240,39534,440],{"class":288},[240,39536,39035],{"class":257},[240,39538,39539],{"class":242,"line":11871},[240,39540,36335],{"class":246},[240,39542,39543],{"class":242,"line":11876},[240,39544,36340],{"class":246},[240,39546,39547,39549,39551],{"class":242,"line":18552},[240,39548,36345],{"class":257},[240,39550,36348],{"class":443},[240,39552,32443],{"class":257},[240,39554,39555],{"class":242,"line":18558},[240,39556,36355],{"class":246},[240,39558,39559,39561,39563],{"class":242,"line":18581},[240,39560,35968],{"class":257},[240,39562,440],{"class":288},[240,39564,36364],{"class":257},[240,39566,39567],{"class":242,"line":18587},[240,39568,36369],{"class":246},[240,39570,39571],{"class":242,"line":18610},[240,39572,36374],{"class":257},[240,39574,39575],{"class":242,"line":18624},[240,39576,4353],{"emptyLinePlaceholder":2051},[240,39578,39579],{"class":242,"line":18644},[240,39580,36383],{"class":246},[240,39582,39583],{"class":242,"line":18650},[240,39584,36388],{"class":246},[240,39586,39587,39589,39591,39593,39595,39597,39599],{"class":242,"line":18661},[240,39588,33183],{"class":257},[240,39590,440],{"class":288},[240,39592,33190],{"class":443},[240,39594,3658],{"class":288},[240,39596,33195],{"class":257},[240,39598,3655],{"class":288},[240,39600,36065],{"class":443},[240,39602,39603,39605,39607],{"class":242,"line":18684},[240,39604,33235],{"class":257},[240,39606,440],{"class":288},[240,39608,34235],{"class":257},[240,39610,39611],{"class":242,"line":18706},[240,39612,36417],{"class":246},[240,39614,39615],{"class":242,"line":18711},[240,39616,36422],{"class":246},[240,39618,39619,39621,39623,39625,39627,39629,39631,39633,39635,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663],{"class":242,"line":18717},[240,39620,36427],{"class":257},[240,39622,440],{"class":288},[240,39624,2985],{"class":257},[240,39626,36434],{"class":443},[240,39628,2479],{"class":257},[240,39630,36439],{"class":443},[240,39632,2479],{"class":257},[240,39634,36444],{"class":443},[240,39636,2479],{"class":257},[240,39638,36449],{"class":443},[240,39640,2479],{"class":257},[240,39642,36454],{"class":443},[240,39644,2479],{"class":257},[240,39646,36459],{"class":443},[240,39648,2479],{"class":257},[240,39650,36464],{"class":443},[240,39652,2479],{"class":257},[240,39654,36469],{"class":443},[240,39656,2479],{"class":257},[240,39658,36474],{"class":443},[240,39660,2479],{"class":257},[240,39662,36479],{"class":443},[240,39664,35192],{"class":257},[240,39666,39667,39669],{"class":242,"line":18731},[240,39668,36124],{"class":288},[240,39670,34830],{"class":257},[240,39672,39673],{"class":242,"line":18744},[240,39674,36492],{"class":246},[240,39676,39677,39679,39681,39683],{"class":242,"line":18749},[240,39678,5355],{"class":288},[240,39680,36499],{"class":257},[240,39682,27989],{"class":288},[240,39684,36143],{"class":257},[240,39686,39687,39689,39691],{"class":242,"line":18763},[240,39688,34556],{"class":257},[240,39690,440],{"class":288},[240,39692,34561],{"class":257},[240,39694,39695,39697,39699],{"class":242,"line":18768},[240,39696,34571],{"class":257},[240,39698,440],{"class":288},[240,39700,34576],{"class":257},[240,39702,39703],{"class":242,"line":18774},[240,39704,4353],{"emptyLinePlaceholder":2051},[240,39706,39707],{"class":242,"line":18779},[240,39708,36528],{"class":246},[240,39710,39711],{"class":242,"line":18793},[240,39712,34821],{"class":257},[240,39714,39715],{"class":242,"line":18798},[240,39716,36537],{"class":246},[240,39718,39719,39721,39723],{"class":242,"line":18803},[240,39720,34606],{"class":257},[240,39722,440],{"class":288},[240,39724,34611],{"class":257},[240,39726,39727],{"class":242,"line":18817},[240,39728,36550],{"class":246},[240,39730,39731,39733,39735,39737,39739,39741,39743],{"class":242,"line":18829},[240,39732,34623],{"class":257},[240,39734,440],{"class":288},[240,39736,34628],{"class":257},[240,39738,34631],{"class":792},[240,39740,440],{"class":288},[240,39742,1643],{"class":264},[240,39744,2129],{"class":257},[240,39746,39747],{"class":242,"line":18834},[240,39748,36571],{"class":246},[240,39750,39751,39753,39755],{"class":242,"line":18847},[240,39752,36576],{"class":257},[240,39754,440],{"class":288},[240,39756,36581],{"class":257},[240,39758,39759,39761,39763],{"class":242,"line":18852},[240,39760,36586],{"class":257},[240,39762,440],{"class":288},[240,39764,36591],{"class":257},[240,39766,39767,39769,39771,39773,39775,39777,39779,39781],{"class":242,"line":18857},[240,39768,36596],{"class":264},[240,39770,789],{"class":257},[240,39772,36601],{"class":443},[240,39774,36604],{"class":257},[240,39776,36607],{"class":443},[240,39778,2479],{"class":257},[240,39780,36612],{"class":443},[240,39782,36615],{"class":257},[32,39784,39786],{"id":39785},"_22vgg","2.2.VGG",[23945,39788,39790],{"id":39789},"_221原理","2.2.1.原理",[19,39792,39793],{},[219,39794],{"alt":236,"src":39795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[19,39797,39798],{},[219,39799],{"alt":236,"src":39800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[19,39802,39803],{},[219,39804],{"alt":236,"src":39805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[19,39807,39808],{},"参数详细描述：",[19,39810,39811],{},[219,39812],{"alt":236,"src":39813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[19,39815,39816],{},[219,39817],{"alt":236,"src":39818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[19,39820,39821],{},[219,39822],{"alt":236,"src":39823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[19,39825,39826],{},[219,39827],{"alt":236,"src":39828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-021.png",[19,39830,39831],{},[219,39832],{"alt":236,"src":39833},"\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",[23945,39835,39837],{"id":39836},"_222代码实现","2.2.2.代码实现",[1826,39839,39840],{},[1829,39841,39842],{},"网络搭建",[231,39844,39846],{"className":32324,"code":39845,"language":32326,"meta":236,"style":236},"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",[23,39847,39848,39854,39866,39876,39886,39890,39907,39915,39934,39939,39944,39956,39994,39999,40035,40039,40068,40073,40078,40089,40125,40129,40165,40169,40197,40201,40206,40217,40253,40257,40293,40297,40333,40337,40365,40369,40374,40385,40422,40426,40462,40466,40502,40506,40534,40538,40543,40554,40590,40594,40630,40634,40670,40674,40702,40706,40711,40722,40727,40732,40737,40758,40762,40774,40778,40790,40794,40798,40803,40808,40823,40828,40838,40843,40858,40863,40882,40887,40896,40901,40911,40916,40921,40935,40940,40954,40962,40966,40970,40978,40989,41000,41011,41022,41033,41044,41050,41054,41059,41072,41092,41098,41107],{"__ignoreMap":236},[240,39849,39850,39852],{"class":242,"line":243},[240,39851,32338],{"class":288},[240,39853,32341],{"class":257},[240,39855,39856,39858,39861,39863],{"class":242,"line":250},[240,39857,32683],{"class":288},[240,39859,39860],{"class":257}," sympy.core.sympify ",[240,39862,32338],{"class":288},[240,39864,39865],{"class":257}," kernS\n",[240,39867,39868,39870,39872,39874],{"class":242,"line":261},[240,39869,32683],{"class":288},[240,39871,32686],{"class":257},[240,39873,32338],{"class":288},[240,39875,32691],{"class":257},[240,39877,39878,39880,39882,39884],{"class":242,"line":277},[240,39879,32683],{"class":288},[240,39881,32703],{"class":257},[240,39883,32338],{"class":288},[240,39885,32708],{"class":257},[240,39887,39888],{"class":242,"line":294},[240,39889,4353],{"emptyLinePlaceholder":2051},[240,39891,39892,39894,39897,39899,39901,39903,39905],{"class":242,"line":309},[240,39893,16643],{"class":288},[240,39895,39896],{"class":436}," VGG16",[240,39898,789],{"class":257},[240,39900,32724],{"class":436},[240,39902,2657],{"class":257},[240,39904,32729],{"class":436},[240,39906,32732],{"class":257},[240,39908,39909,39911,39913],{"class":242,"line":529},[240,39910,32747],{"class":288},[240,39912,32750],{"class":264},[240,39914,32753],{"class":257},[240,39916,39917,39919,39921,39924,39926,39928,39930,39932],{"class":242,"line":549},[240,39918,32763],{"class":264},[240,39920,789],{"class":257},[240,39922,39923],{"class":264},"VGG16",[240,39925,1277],{"class":257},[240,39927,32769],{"class":264},[240,39929,32772],{"class":257},[240,39931,32775],{"class":264},[240,39933,3929],{"class":257},[240,39935,39936],{"class":242,"line":569},[240,39937,39938],{"class":246},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[240,39940,39941],{"class":242,"line":589},[240,39942,39943],{"class":246},"        # 这里用的是灰度图\n",[240,39945,39946,39948,39951,39953],{"class":242,"line":715},[240,39947,32791],{"class":264},[240,39949,39950],{"class":257},".block1",[240,39952,440],{"class":288},[240,39954,39955],{"class":257},"nn.Sequential(\n",[240,39957,39958,39961,39963,39965,39967,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991],{"class":242,"line":727},[240,39959,39960],{"class":257},"            nn.Conv2d(",[240,39962,32802],{"class":792},[240,39964,440],{"class":288},[240,39966,1643],{"class":264},[240,39968,2479],{"class":257},[240,39970,32811],{"class":792},[240,39972,440],{"class":288},[240,39974,2310],{"class":264},[240,39976,2479],{"class":257},[240,39978,32820],{"class":792},[240,39980,440],{"class":288},[240,39982,1692],{"class":264},[240,39984,2479],{"class":257},[240,39986,32829],{"class":792},[240,39988,440],{"class":288},[240,39990,1643],{"class":264},[240,39992,39993],{"class":257},"),\n",[240,39995,39996],{"class":242,"line":1730},[240,39997,39998],{"class":257},"            nn.ReLU(),\n",[240,40000,40001,40003,40005,40007,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033],{"class":242,"line":3582},[240,40002,39960],{"class":257},[240,40004,32802],{"class":792},[240,40006,440],{"class":288},[240,40008,2310],{"class":264},[240,40010,2479],{"class":257},[240,40012,32811],{"class":792},[240,40014,440],{"class":288},[240,40016,2310],{"class":264},[240,40018,2479],{"class":257},[240,40020,32820],{"class":792},[240,40022,440],{"class":288},[240,40024,1692],{"class":264},[240,40026,2479],{"class":257},[240,40028,32829],{"class":792},[240,40030,440],{"class":288},[240,40032,1643],{"class":264},[240,40034,39993],{"class":257},[240,40036,40037],{"class":242,"line":3596},[240,40038,39998],{"class":257},[240,40040,40041,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066],{"class":242,"line":3601},[240,40042,40043],{"class":257},"            nn.MaxPool2d(",[240,40045,32820],{"class":792},[240,40047,440],{"class":288},[240,40049,1668],{"class":264},[240,40051,2479],{"class":257},[240,40053,32875],{"class":792},[240,40055,440],{"class":288},[240,40057,1668],{"class":264},[240,40059,2479],{"class":257},[240,40061,32829],{"class":792},[240,40063,440],{"class":288},[240,40065,1274],{"class":264},[240,40067,2129],{"class":257},[240,40069,40070],{"class":242,"line":3607},[240,40071,40072],{"class":257},"        )\n",[240,40074,40075],{"class":242,"line":3628},[240,40076,40077],{"class":246},"        # 第二层\n",[240,40079,40080,40082,40085,40087],{"class":242,"line":3633},[240,40081,32791],{"class":264},[240,40083,40084],{"class":257},".block2",[240,40086,440],{"class":288},[240,40088,39955],{"class":257},[240,40090,40091,40093,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123],{"class":242,"line":3647},[240,40092,39960],{"class":257},[240,40094,32802],{"class":792},[240,40096,440],{"class":288},[240,40098,2310],{"class":264},[240,40100,2479],{"class":257},[240,40102,32811],{"class":792},[240,40104,440],{"class":288},[240,40106,34016],{"class":264},[240,40108,2479],{"class":257},[240,40110,32820],{"class":792},[240,40112,440],{"class":288},[240,40114,1692],{"class":264},[240,40116,2479],{"class":257},[240,40118,32829],{"class":792},[240,40120,440],{"class":288},[240,40122,1643],{"class":264},[240,40124,39993],{"class":257},[240,40126,40127],{"class":242,"line":3652},[240,40128,39998],{"class":257},[240,40130,40131,40133,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163],{"class":242,"line":3681},[240,40132,39960],{"class":257},[240,40134,32802],{"class":792},[240,40136,440],{"class":288},[240,40138,34016],{"class":264},[240,40140,2479],{"class":257},[240,40142,32811],{"class":792},[240,40144,440],{"class":288},[240,40146,34016],{"class":264},[240,40148,2479],{"class":257},[240,40150,32820],{"class":792},[240,40152,440],{"class":288},[240,40154,1692],{"class":264},[240,40156,2479],{"class":257},[240,40158,32829],{"class":792},[240,40160,440],{"class":288},[240,40162,1643],{"class":264},[240,40164,39993],{"class":257},[240,40166,40167],{"class":242,"line":3686},[240,40168,39998],{"class":257},[240,40170,40171,40173,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195],{"class":242,"line":3703},[240,40172,40043],{"class":257},[240,40174,32820],{"class":792},[240,40176,440],{"class":288},[240,40178,1668],{"class":264},[240,40180,2479],{"class":257},[240,40182,32875],{"class":792},[240,40184,440],{"class":288},[240,40186,1668],{"class":264},[240,40188,2479],{"class":257},[240,40190,32829],{"class":792},[240,40192,440],{"class":288},[240,40194,1274],{"class":264},[240,40196,2129],{"class":257},[240,40198,40199],{"class":242,"line":3708},[240,40200,40072],{"class":257},[240,40202,40203],{"class":242,"line":3713},[240,40204,40205],{"class":246},"        # 第三层\n",[240,40207,40208,40210,40213,40215],{"class":242,"line":3718},[240,40209,32791],{"class":264},[240,40211,40212],{"class":257},".block3",[240,40214,440],{"class":288},[240,40216,39955],{"class":257},[240,40218,40219,40221,40223,40225,40227,40229,40231,40233,40235,40237,40239,40241,40243,40245,40247,40249,40251],{"class":242,"line":3732},[240,40220,39960],{"class":257},[240,40222,32802],{"class":792},[240,40224,440],{"class":288},[240,40226,34016],{"class":264},[240,40228,2479],{"class":257},[240,40230,32811],{"class":792},[240,40232,440],{"class":288},[240,40234,36816],{"class":264},[240,40236,2479],{"class":257},[240,40238,32820],{"class":792},[240,40240,440],{"class":288},[240,40242,1692],{"class":264},[240,40244,2479],{"class":257},[240,40246,32829],{"class":792},[240,40248,440],{"class":288},[240,40250,1643],{"class":264},[240,40252,39993],{"class":257},[240,40254,40255],{"class":242,"line":3737},[240,40256,39998],{"class":257},[240,40258,40259,40261,40263,40265,40267,40269,40271,40273,40275,40277,40279,40281,40283,40285,40287,40289,40291],{"class":242,"line":4530},[240,40260,39960],{"class":257},[240,40262,32802],{"class":792},[240,40264,440],{"class":288},[240,40266,36816],{"class":264},[240,40268,2479],{"class":257},[240,40270,32811],{"class":792},[240,40272,440],{"class":288},[240,40274,36816],{"class":264},[240,40276,2479],{"class":257},[240,40278,32820],{"class":792},[240,40280,440],{"class":288},[240,40282,1692],{"class":264},[240,40284,2479],{"class":257},[240,40286,32829],{"class":792},[240,40288,440],{"class":288},[240,40290,1643],{"class":264},[240,40292,39993],{"class":257},[240,40294,40295],{"class":242,"line":4544},[240,40296,39998],{"class":257},[240,40298,40299,40301,40303,40305,40307,40309,40311,40313,40315,40317,40319,40321,40323,40325,40327,40329,40331],{"class":242,"line":4552},[240,40300,39960],{"class":257},[240,40302,32802],{"class":792},[240,40304,440],{"class":288},[240,40306,36816],{"class":264},[240,40308,2479],{"class":257},[240,40310,32811],{"class":792},[240,40312,440],{"class":288},[240,40314,36816],{"class":264},[240,40316,2479],{"class":257},[240,40318,32820],{"class":792},[240,40320,440],{"class":288},[240,40322,1692],{"class":264},[240,40324,2479],{"class":257},[240,40326,32829],{"class":792},[240,40328,440],{"class":288},[240,40330,1643],{"class":264},[240,40332,39993],{"class":257},[240,40334,40335],{"class":242,"line":4557},[240,40336,39998],{"class":257},[240,40338,40339,40341,40343,40345,40347,40349,40351,40353,40355,40357,40359,40361,40363],{"class":242,"line":4563},[240,40340,40043],{"class":257},[240,40342,32820],{"class":792},[240,40344,440],{"class":288},[240,40346,1668],{"class":264},[240,40348,2479],{"class":257},[240,40350,32875],{"class":792},[240,40352,440],{"class":288},[240,40354,1668],{"class":264},[240,40356,2479],{"class":257},[240,40358,32829],{"class":792},[240,40360,440],{"class":288},[240,40362,1274],{"class":264},[240,40364,2129],{"class":257},[240,40366,40367],{"class":242,"line":4569},[240,40368,40072],{"class":257},[240,40370,40371],{"class":242,"line":4574},[240,40372,40373],{"class":246},"        # 第四层\n",[240,40375,40376,40378,40381,40383],{"class":242,"line":9899},[240,40377,32791],{"class":264},[240,40379,40380],{"class":257},".block4",[240,40382,440],{"class":288},[240,40384,39955],{"class":257},[240,40386,40387,40389,40391,40393,40395,40397,40399,40401,40404,40406,40408,40410,40412,40414,40416,40418,40420],{"class":242,"line":9923},[240,40388,39960],{"class":257},[240,40390,32802],{"class":792},[240,40392,440],{"class":288},[240,40394,36816],{"class":264},[240,40396,2479],{"class":257},[240,40398,32811],{"class":792},[240,40400,440],{"class":288},[240,40402,40403],{"class":264},"512",[240,40405,2479],{"class":257},[240,40407,32820],{"class":792},[240,40409,440],{"class":288},[240,40411,1692],{"class":264},[240,40413,2479],{"class":257},[240,40415,32829],{"class":792},[240,40417,440],{"class":288},[240,40419,1643],{"class":264},[240,40421,39993],{"class":257},[240,40423,40424],{"class":242,"line":9928},[240,40425,39998],{"class":257},[240,40427,40428,40430,40432,40434,40436,40438,40440,40442,40444,40446,40448,40450,40452,40454,40456,40458,40460],{"class":242,"line":9934},[240,40429,39960],{"class":257},[240,40431,32802],{"class":792},[240,40433,440],{"class":288},[240,40435,40403],{"class":264},[240,40437,2479],{"class":257},[240,40439,32811],{"class":792},[240,40441,440],{"class":288},[240,40443,40403],{"class":264},[240,40445,2479],{"class":257},[240,40447,32820],{"class":792},[240,40449,440],{"class":288},[240,40451,1692],{"class":264},[240,40453,2479],{"class":257},[240,40455,32829],{"class":792},[240,40457,440],{"class":288},[240,40459,1643],{"class":264},[240,40461,39993],{"class":257},[240,40463,40464],{"class":242,"line":9961},[240,40465,39998],{"class":257},[240,40467,40468,40470,40472,40474,40476,40478,40480,40482,40484,40486,40488,40490,40492,40494,40496,40498,40500],{"class":242,"line":9966},[240,40469,39960],{"class":257},[240,40471,32802],{"class":792},[240,40473,440],{"class":288},[240,40475,40403],{"class":264},[240,40477,2479],{"class":257},[240,40479,32811],{"class":792},[240,40481,440],{"class":288},[240,40483,40403],{"class":264},[240,40485,2479],{"class":257},[240,40487,32820],{"class":792},[240,40489,440],{"class":288},[240,40491,1692],{"class":264},[240,40493,2479],{"class":257},[240,40495,32829],{"class":792},[240,40497,440],{"class":288},[240,40499,1643],{"class":264},[240,40501,39993],{"class":257},[240,40503,40504],{"class":242,"line":9972},[240,40505,39998],{"class":257},[240,40507,40508,40510,40512,40514,40516,40518,40520,40522,40524,40526,40528,40530,40532],{"class":242,"line":9984},[240,40509,40043],{"class":257},[240,40511,32820],{"class":792},[240,40513,440],{"class":288},[240,40515,1668],{"class":264},[240,40517,2479],{"class":257},[240,40519,32875],{"class":792},[240,40521,440],{"class":288},[240,40523,1668],{"class":264},[240,40525,2479],{"class":257},[240,40527,32829],{"class":792},[240,40529,440],{"class":288},[240,40531,1274],{"class":264},[240,40533,2129],{"class":257},[240,40535,40536],{"class":242,"line":9996},[240,40537,40072],{"class":257},[240,40539,40540],{"class":242,"line":10008},[240,40541,40542],{"class":246},"        # 第五层\n",[240,40544,40545,40547,40550,40552],{"class":242,"line":11667},[240,40546,32791],{"class":264},[240,40548,40549],{"class":257},".block5",[240,40551,440],{"class":288},[240,40553,39955],{"class":257},[240,40555,40556,40558,40560,40562,40564,40566,40568,40570,40572,40574,40576,40578,40580,40582,40584,40586,40588],{"class":242,"line":11692},[240,40557,39960],{"class":257},[240,40559,32802],{"class":792},[240,40561,440],{"class":288},[240,40563,40403],{"class":264},[240,40565,2479],{"class":257},[240,40567,32811],{"class":792},[240,40569,440],{"class":288},[240,40571,40403],{"class":264},[240,40573,2479],{"class":257},[240,40575,32820],{"class":792},[240,40577,440],{"class":288},[240,40579,1692],{"class":264},[240,40581,2479],{"class":257},[240,40583,32829],{"class":792},[240,40585,440],{"class":288},[240,40587,1643],{"class":264},[240,40589,39993],{"class":257},[240,40591,40592],{"class":242,"line":11715},[240,40593,39998],{"class":257},[240,40595,40596,40598,40600,40602,40604,40606,40608,40610,40612,40614,40616,40618,40620,40622,40624,40626,40628],{"class":242,"line":11739},[240,40597,39960],{"class":257},[240,40599,32802],{"class":792},[240,40601,440],{"class":288},[240,40603,40403],{"class":264},[240,40605,2479],{"class":257},[240,40607,32811],{"class":792},[240,40609,440],{"class":288},[240,40611,40403],{"class":264},[240,40613,2479],{"class":257},[240,40615,32820],{"class":792},[240,40617,440],{"class":288},[240,40619,1692],{"class":264},[240,40621,2479],{"class":257},[240,40623,32829],{"class":792},[240,40625,440],{"class":288},[240,40627,1643],{"class":264},[240,40629,39993],{"class":257},[240,40631,40632],{"class":242,"line":11744},[240,40633,39998],{"class":257},[240,40635,40636,40638,40640,40642,40644,40646,40648,40650,40652,40654,40656,40658,40660,40662,40664,40666,40668],{"class":242,"line":11749},[240,40637,39960],{"class":257},[240,40639,32802],{"class":792},[240,40641,440],{"class":288},[240,40643,40403],{"class":264},[240,40645,2479],{"class":257},[240,40647,32811],{"class":792},[240,40649,440],{"class":288},[240,40651,40403],{"class":264},[240,40653,2479],{"class":257},[240,40655,32820],{"class":792},[240,40657,440],{"class":288},[240,40659,1692],{"class":264},[240,40661,2479],{"class":257},[240,40663,32829],{"class":792},[240,40665,440],{"class":288},[240,40667,1643],{"class":264},[240,40669,39993],{"class":257},[240,40671,40672],{"class":242,"line":11754},[240,40673,39998],{"class":257},[240,40675,40676,40678,40680,40682,40684,40686,40688,40690,40692,40694,40696,40698,40700],{"class":242,"line":11763},[240,40677,40043],{"class":257},[240,40679,32820],{"class":792},[240,40681,440],{"class":288},[240,40683,1668],{"class":264},[240,40685,2479],{"class":257},[240,40687,32875],{"class":792},[240,40689,440],{"class":288},[240,40691,1668],{"class":264},[240,40693,2479],{"class":257},[240,40695,32829],{"class":792},[240,40697,440],{"class":288},[240,40699,1274],{"class":264},[240,40701,2129],{"class":257},[240,40703,40704],{"class":242,"line":11768},[240,40705,40072],{"class":257},[240,40707,40708],{"class":242,"line":11774},[240,40709,40710],{"class":246},"        # 全连接层\n",[240,40712,40713,40715,40718,40720],{"class":242,"line":11795},[240,40714,32791],{"class":264},[240,40716,40717],{"class":257},".block6",[240,40719,440],{"class":288},[240,40721,39955],{"class":257},[240,40723,40724],{"class":242,"line":11801},[240,40725,40726],{"class":246},"            # 平展操作\n",[240,40728,40729],{"class":242,"line":11815},[240,40730,40731],{"class":246},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[240,40733,40734],{"class":242,"line":11821},[240,40735,40736],{"class":257},"            nn.Flatten(),\n",[240,40738,40739,40742,40744,40746,40748,40750,40752,40754,40756],{"class":242,"line":11848},[240,40740,40741],{"class":257},"            nn.Linear(",[240,40743,2470],{"class":264},[240,40745,2554],{"class":288},[240,40747,2470],{"class":264},[240,40749,2554],{"class":288},[240,40751,40403],{"class":264},[240,40753,2479],{"class":257},[240,40755,36816],{"class":264},[240,40757,39993],{"class":257},[240,40759,40760],{"class":242,"line":11857},[240,40761,39998],{"class":257},[240,40763,40764,40766,40768,40770,40772],{"class":242,"line":11863},[240,40765,40741],{"class":257},[240,40767,36816],{"class":264},[240,40769,2479],{"class":257},[240,40771,34016],{"class":264},[240,40773,39993],{"class":257},[240,40775,40776],{"class":242,"line":11871},[240,40777,39998],{"class":257},[240,40779,40780,40782,40784,40786,40788],{"class":242,"line":11876},[240,40781,40741],{"class":257},[240,40783,34016],{"class":264},[240,40785,2479],{"class":257},[240,40787,2546],{"class":264},[240,40789,2129],{"class":257},[240,40791,40792],{"class":242,"line":18552},[240,40793,40072],{"class":257},[240,40795,40796],{"class":242,"line":18558},[240,40797,4353],{"emptyLinePlaceholder":2051},[240,40799,40800],{"class":242,"line":18581},[240,40801,40802],{"class":246},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[240,40804,40805],{"class":242,"line":18587},[240,40806,40807],{"class":246},"        # 循环遍历模型\n",[240,40809,40810,40812,40815,40817,40820],{"class":242,"line":18610},[240,40811,5355],{"class":288},[240,40813,40814],{"class":257}," m ",[240,40816,27989],{"class":288},[240,40818,40819],{"class":264}," self",[240,40821,40822],{"class":257},".modules():\n",[240,40824,40825],{"class":242,"line":18624},[240,40826,40827],{"class":246},"            # print(m)\n",[240,40829,40830,40832,40835],{"class":242,"line":18644},[240,40831,6594],{"class":288},[240,40833,40834],{"class":264}," isinstance",[240,40836,40837],{"class":257},"(m,nn.Conv2d):\n",[240,40839,40840],{"class":242,"line":18650},[240,40841,40842],{"class":246},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[240,40844,40845,40848,40851,40853,40856],{"class":242,"line":18661},[240,40846,40847],{"class":257},"                nn.init.kaiming_normal_(m.weight,",[240,40849,40850],{"class":792},"nonlinearity",[240,40852,440],{"class":288},[240,40854,40855],{"class":443},"'relu'",[240,40857,2129],{"class":257},[240,40859,40860],{"class":242,"line":18684},[240,40861,40862],{"class":246},"                # 判断b参数是否存在\n",[240,40864,40865,40868,40871,40874,40877,40880],{"class":242,"line":18706},[240,40866,40867],{"class":288},"                if",[240,40869,40870],{"class":257}," m.bias ",[240,40872,40873],{"class":288},"is",[240,40875,40876],{"class":288}," not",[240,40878,40879],{"class":264}," None",[240,40881,5691],{"class":257},[240,40883,40884],{"class":242,"line":18711},[240,40885,40886],{"class":246},"                    # 如果参数不存在的化初始化b=0\n",[240,40888,40889,40892,40894],{"class":242,"line":18717},[240,40890,40891],{"class":257},"                    nn.init.constant_(m.bias,",[240,40893,1274],{"class":264},[240,40895,2129],{"class":257},[240,40897,40898],{"class":242,"line":18731},[240,40899,40900],{"class":246},"            # 全连接层初始化\n",[240,40902,40903,40906,40908],{"class":242,"line":18744},[240,40904,40905],{"class":288},"            elif",[240,40907,40834],{"class":264},[240,40909,40910],{"class":257},"(m,nn.Linear):\n",[240,40912,40913],{"class":242,"line":18749},[240,40914,40915],{"class":246},"                # 这个初始化方法是利用的是正太分布的方式\n",[240,40917,40918],{"class":242,"line":18763},[240,40919,40920],{"class":246},"                # 均值为0，方差为0.01\n",[240,40922,40923,40926,40928,40930,40933],{"class":242,"line":18768},[240,40924,40925],{"class":257},"                nn.init.normal_(m.weight,",[240,40927,1274],{"class":264},[240,40929,2479],{"class":257},[240,40931,40932],{"class":264},"0.01",[240,40934,2129],{"class":257},[240,40936,40937],{"class":242,"line":18774},[240,40938,40939],{"class":246},"                # 初始化b参数\n",[240,40941,40942,40944,40946,40948,40950,40952],{"class":242,"line":18779},[240,40943,40867],{"class":288},[240,40945,40870],{"class":257},[240,40947,40873],{"class":288},[240,40949,40876],{"class":288},[240,40951,40879],{"class":264},[240,40953,5691],{"class":257},[240,40955,40956,40958,40960],{"class":242,"line":18793},[240,40957,40891],{"class":257},[240,40959,1274],{"class":264},[240,40961,2129],{"class":257},[240,40963,40964],{"class":242,"line":18798},[240,40965,4353],{"emptyLinePlaceholder":2051},[240,40967,40968],{"class":242,"line":18803},[240,40969,37111],{"class":246},[240,40971,40972,40974,40976],{"class":242,"line":18817},[240,40973,32747],{"class":288},[240,40975,33039],{"class":436},[240,40977,33042],{"class":257},[240,40979,40980,40982,40984,40986],{"class":242,"line":18829},[240,40981,33047],{"class":257},[240,40983,440],{"class":288},[240,40985,32769],{"class":264},[240,40987,40988],{"class":257},".block1(x)\n",[240,40990,40991,40993,40995,40997],{"class":242,"line":18834},[240,40992,33047],{"class":257},[240,40994,440],{"class":288},[240,40996,32769],{"class":264},[240,40998,40999],{"class":257},".block2(x)\n",[240,41001,41002,41004,41006,41008],{"class":242,"line":18847},[240,41003,33047],{"class":257},[240,41005,440],{"class":288},[240,41007,32769],{"class":264},[240,41009,41010],{"class":257},".block3(x)\n",[240,41012,41013,41015,41017,41019],{"class":242,"line":18852},[240,41014,33047],{"class":257},[240,41016,440],{"class":288},[240,41018,32769],{"class":264},[240,41020,41021],{"class":257},".block4(x)\n",[240,41023,41024,41026,41028,41030],{"class":242,"line":18857},[240,41025,33047],{"class":257},[240,41027,440],{"class":288},[240,41029,32769],{"class":264},[240,41031,41032],{"class":257},".block5(x)\n",[240,41034,41035,41037,41039,41041],{"class":242,"line":18862},[240,41036,33047],{"class":257},[240,41038,440],{"class":288},[240,41040,32769],{"class":264},[240,41042,41043],{"class":257},".block6(x)\n",[240,41045,41046,41048],{"class":242,"line":18875},[240,41047,16701],{"class":288},[240,41049,33155],{"class":257},[240,41051,41052],{"class":242,"line":18880},[240,41053,4353],{"emptyLinePlaceholder":2051},[240,41055,41056],{"class":242,"line":34579},[240,41057,41058],{"class":246},"# 验证模型\n",[240,41060,41061,41063,41065,41067,41070],{"class":242,"line":34585},[240,41062,3489],{"class":288},[240,41064,33166],{"class":264},[240,41066,4901],{"class":288},[240,41068,41069],{"class":443},"'__main__'",[240,41071,5691],{"class":257},[240,41073,41074,41076,41078,41080,41082,41084,41086,41088,41090],{"class":242,"line":34591},[240,41075,33183],{"class":257},[240,41077,440],{"class":288},[240,41079,32397],{"class":257},[240,41081,33190],{"class":443},[240,41083,3658],{"class":288},[240,41085,33195],{"class":257},[240,41087,3655],{"class":288},[240,41089,32422],{"class":443},[240,41091,2129],{"class":257},[240,41093,41094,41096],{"class":242,"line":34597},[240,41095,33245],{"class":264},[240,41097,32431],{"class":257},[240,41099,41100,41102,41104],{"class":242,"line":34603},[240,41101,33235],{"class":257},[240,41103,440],{"class":288},[240,41105,41106],{"class":257},"VGG16().to(device)\n",[240,41108,41109,41111,41113,41115,41117,41119,41121,41123],{"class":242,"line":34614},[240,41110,33245],{"class":264},[240,41112,33248],{"class":257},[240,41114,1643],{"class":264},[240,41116,2479],{"class":257},[240,41118,33447],{"class":264},[240,41120,2479],{"class":257},[240,41122,33447],{"class":264},[240,41124,33261],{"class":257},[1826,41126,41127],{"start":250},[1829,41128,41129],{},"训练代码",[19,41131,41132],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[19,41134,41135],{},"解决方式:",[19,41137,41138],{},"①权重初始化",[231,41140,41142],{"className":32324,"code":41141,"language":32326,"meta":236,"style":236},"# 权重初始化,保证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",[23,41143,41144,41149,41154,41166,41171,41179,41184,41197,41202,41216,41221,41230,41235,41244,41249,41254,41267,41272,41286],{"__ignoreMap":236},[240,41145,41146],{"class":242,"line":243},[240,41147,41148],{"class":246},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[240,41150,41151],{"class":242,"line":250},[240,41152,41153],{"class":246},"# 循环遍历模型\n",[240,41155,41156,41158,41160,41162,41164],{"class":242,"line":261},[240,41157,4977],{"class":288},[240,41159,40814],{"class":257},[240,41161,27989],{"class":288},[240,41163,40819],{"class":264},[240,41165,40822],{"class":257},[240,41167,41168],{"class":242,"line":277},[240,41169,41170],{"class":246},"    # print(m)\n",[240,41172,41173,41175,41177],{"class":242,"line":294},[240,41174,5053],{"class":288},[240,41176,40834],{"class":264},[240,41178,40837],{"class":257},[240,41180,41181],{"class":242,"line":309},[240,41182,41183],{"class":246},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[240,41185,41186,41189,41191,41193,41195],{"class":242,"line":529},[240,41187,41188],{"class":257},"        nn.init.kaiming_normal_(m.weight,",[240,41190,40850],{"class":792},[240,41192,440],{"class":288},[240,41194,40855],{"class":443},[240,41196,2129],{"class":257},[240,41198,41199],{"class":242,"line":549},[240,41200,41201],{"class":246},"        # 判断b参数是否存在\n",[240,41203,41204,41206,41208,41210,41212,41214],{"class":242,"line":569},[240,41205,4450],{"class":288},[240,41207,40870],{"class":257},[240,41209,40873],{"class":288},[240,41211,40876],{"class":288},[240,41213,40879],{"class":264},[240,41215,5691],{"class":257},[240,41217,41218],{"class":242,"line":589},[240,41219,41220],{"class":246},"            # 如果参数不存在的化初始化b=0\n",[240,41222,41223,41226,41228],{"class":242,"line":715},[240,41224,41225],{"class":257},"            nn.init.constant_(m.bias,",[240,41227,1274],{"class":264},[240,41229,2129],{"class":257},[240,41231,41232],{"class":242,"line":727},[240,41233,41234],{"class":246},"    # 全连接层初始化\n",[240,41236,41237,41240,41242],{"class":242,"line":1730},[240,41238,41239],{"class":288},"    elif",[240,41241,40834],{"class":264},[240,41243,40910],{"class":257},[240,41245,41246],{"class":242,"line":3582},[240,41247,41248],{"class":246},"        # 这个初始化方法是利用的是正太分布的方式\n",[240,41250,41251],{"class":242,"line":3596},[240,41252,41253],{"class":246},"        # 均值为0，方差为0.01\n",[240,41255,41256,41259,41261,41263,41265],{"class":242,"line":3601},[240,41257,41258],{"class":257},"        nn.init.normal_(m.weight,",[240,41260,1274],{"class":264},[240,41262,2479],{"class":257},[240,41264,40932],{"class":264},[240,41266,2129],{"class":257},[240,41268,41269],{"class":242,"line":3607},[240,41270,41271],{"class":246},"        # 初始化b参数\n",[240,41273,41274,41276,41278,41280,41282,41284],{"class":242,"line":3628},[240,41275,4450],{"class":288},[240,41277,40870],{"class":257},[240,41279,40873],{"class":288},[240,41281,40876],{"class":288},[240,41283,40879],{"class":264},[240,41285,5691],{"class":257},[240,41287,41288,41290,41292],{"class":242,"line":3633},[240,41289,41225],{"class":257},[240,41291,1274],{"class":264},[240,41293,2129],{"class":257},[19,41295,41296],{},"②尽可能地增加批次",[19,41298,41299],{},"训练完整代码：",[231,41301,41302],{"className":32324,"code":39845,"language":32326,"meta":236,"style":236},[23,41303,41304,41310,41320,41330,41340,41344,41360,41368,41386,41390,41394,41404,41440,41444,41480,41484,41512,41516,41520,41530,41566,41570,41606,41610,41638,41642,41646,41656,41692,41696,41732,41736,41772,41776,41804,41808,41812,41822,41858,41862,41898,41902,41938,41942,41970,41974,41978,41988,42024,42028,42064,42068,42104,42108,42136,42140,42144,42154,42158,42162,42166,42186,42190,42202,42206,42218,42222,42226,42230,42234,42246,42250,42258,42262,42274,42278,42292,42296,42304,42308,42316,42320,42324,42336,42340,42354,42362,42366,42370,42378,42388,42398,42408,42418,42428,42438,42444,42448,42452,42464,42484,42490,42498],{"__ignoreMap":236},[240,41305,41306,41308],{"class":242,"line":243},[240,41307,32338],{"class":288},[240,41309,32341],{"class":257},[240,41311,41312,41314,41316,41318],{"class":242,"line":250},[240,41313,32683],{"class":288},[240,41315,39860],{"class":257},[240,41317,32338],{"class":288},[240,41319,39865],{"class":257},[240,41321,41322,41324,41326,41328],{"class":242,"line":261},[240,41323,32683],{"class":288},[240,41325,32686],{"class":257},[240,41327,32338],{"class":288},[240,41329,32691],{"class":257},[240,41331,41332,41334,41336,41338],{"class":242,"line":277},[240,41333,32683],{"class":288},[240,41335,32703],{"class":257},[240,41337,32338],{"class":288},[240,41339,32708],{"class":257},[240,41341,41342],{"class":242,"line":294},[240,41343,4353],{"emptyLinePlaceholder":2051},[240,41345,41346,41348,41350,41352,41354,41356,41358],{"class":242,"line":309},[240,41347,16643],{"class":288},[240,41349,39896],{"class":436},[240,41351,789],{"class":257},[240,41353,32724],{"class":436},[240,41355,2657],{"class":257},[240,41357,32729],{"class":436},[240,41359,32732],{"class":257},[240,41361,41362,41364,41366],{"class":242,"line":529},[240,41363,32747],{"class":288},[240,41365,32750],{"class":264},[240,41367,32753],{"class":257},[240,41369,41370,41372,41374,41376,41378,41380,41382,41384],{"class":242,"line":549},[240,41371,32763],{"class":264},[240,41373,789],{"class":257},[240,41375,39923],{"class":264},[240,41377,1277],{"class":257},[240,41379,32769],{"class":264},[240,41381,32772],{"class":257},[240,41383,32775],{"class":264},[240,41385,3929],{"class":257},[240,41387,41388],{"class":242,"line":569},[240,41389,39938],{"class":246},[240,41391,41392],{"class":242,"line":589},[240,41393,39943],{"class":246},[240,41395,41396,41398,41400,41402],{"class":242,"line":715},[240,41397,32791],{"class":264},[240,41399,39950],{"class":257},[240,41401,440],{"class":288},[240,41403,39955],{"class":257},[240,41405,41406,41408,41410,41412,41414,41416,41418,41420,41422,41424,41426,41428,41430,41432,41434,41436,41438],{"class":242,"line":727},[240,41407,39960],{"class":257},[240,41409,32802],{"class":792},[240,41411,440],{"class":288},[240,41413,1643],{"class":264},[240,41415,2479],{"class":257},[240,41417,32811],{"class":792},[240,41419,440],{"class":288},[240,41421,2310],{"class":264},[240,41423,2479],{"class":257},[240,41425,32820],{"class":792},[240,41427,440],{"class":288},[240,41429,1692],{"class":264},[240,41431,2479],{"class":257},[240,41433,32829],{"class":792},[240,41435,440],{"class":288},[240,41437,1643],{"class":264},[240,41439,39993],{"class":257},[240,41441,41442],{"class":242,"line":1730},[240,41443,39998],{"class":257},[240,41445,41446,41448,41450,41452,41454,41456,41458,41460,41462,41464,41466,41468,41470,41472,41474,41476,41478],{"class":242,"line":3582},[240,41447,39960],{"class":257},[240,41449,32802],{"class":792},[240,41451,440],{"class":288},[240,41453,2310],{"class":264},[240,41455,2479],{"class":257},[240,41457,32811],{"class":792},[240,41459,440],{"class":288},[240,41461,2310],{"class":264},[240,41463,2479],{"class":257},[240,41465,32820],{"class":792},[240,41467,440],{"class":288},[240,41469,1692],{"class":264},[240,41471,2479],{"class":257},[240,41473,32829],{"class":792},[240,41475,440],{"class":288},[240,41477,1643],{"class":264},[240,41479,39993],{"class":257},[240,41481,41482],{"class":242,"line":3596},[240,41483,39998],{"class":257},[240,41485,41486,41488,41490,41492,41494,41496,41498,41500,41502,41504,41506,41508,41510],{"class":242,"line":3601},[240,41487,40043],{"class":257},[240,41489,32820],{"class":792},[240,41491,440],{"class":288},[240,41493,1668],{"class":264},[240,41495,2479],{"class":257},[240,41497,32875],{"class":792},[240,41499,440],{"class":288},[240,41501,1668],{"class":264},[240,41503,2479],{"class":257},[240,41505,32829],{"class":792},[240,41507,440],{"class":288},[240,41509,1274],{"class":264},[240,41511,2129],{"class":257},[240,41513,41514],{"class":242,"line":3607},[240,41515,40072],{"class":257},[240,41517,41518],{"class":242,"line":3628},[240,41519,40077],{"class":246},[240,41521,41522,41524,41526,41528],{"class":242,"line":3633},[240,41523,32791],{"class":264},[240,41525,40084],{"class":257},[240,41527,440],{"class":288},[240,41529,39955],{"class":257},[240,41531,41532,41534,41536,41538,41540,41542,41544,41546,41548,41550,41552,41554,41556,41558,41560,41562,41564],{"class":242,"line":3647},[240,41533,39960],{"class":257},[240,41535,32802],{"class":792},[240,41537,440],{"class":288},[240,41539,2310],{"class":264},[240,41541,2479],{"class":257},[240,41543,32811],{"class":792},[240,41545,440],{"class":288},[240,41547,34016],{"class":264},[240,41549,2479],{"class":257},[240,41551,32820],{"class":792},[240,41553,440],{"class":288},[240,41555,1692],{"class":264},[240,41557,2479],{"class":257},[240,41559,32829],{"class":792},[240,41561,440],{"class":288},[240,41563,1643],{"class":264},[240,41565,39993],{"class":257},[240,41567,41568],{"class":242,"line":3652},[240,41569,39998],{"class":257},[240,41571,41572,41574,41576,41578,41580,41582,41584,41586,41588,41590,41592,41594,41596,41598,41600,41602,41604],{"class":242,"line":3681},[240,41573,39960],{"class":257},[240,41575,32802],{"class":792},[240,41577,440],{"class":288},[240,41579,34016],{"class":264},[240,41581,2479],{"class":257},[240,41583,32811],{"class":792},[240,41585,440],{"class":288},[240,41587,34016],{"class":264},[240,41589,2479],{"class":257},[240,41591,32820],{"class":792},[240,41593,440],{"class":288},[240,41595,1692],{"class":264},[240,41597,2479],{"class":257},[240,41599,32829],{"class":792},[240,41601,440],{"class":288},[240,41603,1643],{"class":264},[240,41605,39993],{"class":257},[240,41607,41608],{"class":242,"line":3686},[240,41609,39998],{"class":257},[240,41611,41612,41614,41616,41618,41620,41622,41624,41626,41628,41630,41632,41634,41636],{"class":242,"line":3703},[240,41613,40043],{"class":257},[240,41615,32820],{"class":792},[240,41617,440],{"class":288},[240,41619,1668],{"class":264},[240,41621,2479],{"class":257},[240,41623,32875],{"class":792},[240,41625,440],{"class":288},[240,41627,1668],{"class":264},[240,41629,2479],{"class":257},[240,41631,32829],{"class":792},[240,41633,440],{"class":288},[240,41635,1274],{"class":264},[240,41637,2129],{"class":257},[240,41639,41640],{"class":242,"line":3708},[240,41641,40072],{"class":257},[240,41643,41644],{"class":242,"line":3713},[240,41645,40205],{"class":246},[240,41647,41648,41650,41652,41654],{"class":242,"line":3718},[240,41649,32791],{"class":264},[240,41651,40212],{"class":257},[240,41653,440],{"class":288},[240,41655,39955],{"class":257},[240,41657,41658,41660,41662,41664,41666,41668,41670,41672,41674,41676,41678,41680,41682,41684,41686,41688,41690],{"class":242,"line":3732},[240,41659,39960],{"class":257},[240,41661,32802],{"class":792},[240,41663,440],{"class":288},[240,41665,34016],{"class":264},[240,41667,2479],{"class":257},[240,41669,32811],{"class":792},[240,41671,440],{"class":288},[240,41673,36816],{"class":264},[240,41675,2479],{"class":257},[240,41677,32820],{"class":792},[240,41679,440],{"class":288},[240,41681,1692],{"class":264},[240,41683,2479],{"class":257},[240,41685,32829],{"class":792},[240,41687,440],{"class":288},[240,41689,1643],{"class":264},[240,41691,39993],{"class":257},[240,41693,41694],{"class":242,"line":3737},[240,41695,39998],{"class":257},[240,41697,41698,41700,41702,41704,41706,41708,41710,41712,41714,41716,41718,41720,41722,41724,41726,41728,41730],{"class":242,"line":4530},[240,41699,39960],{"class":257},[240,41701,32802],{"class":792},[240,41703,440],{"class":288},[240,41705,36816],{"class":264},[240,41707,2479],{"class":257},[240,41709,32811],{"class":792},[240,41711,440],{"class":288},[240,41713,36816],{"class":264},[240,41715,2479],{"class":257},[240,41717,32820],{"class":792},[240,41719,440],{"class":288},[240,41721,1692],{"class":264},[240,41723,2479],{"class":257},[240,41725,32829],{"class":792},[240,41727,440],{"class":288},[240,41729,1643],{"class":264},[240,41731,39993],{"class":257},[240,41733,41734],{"class":242,"line":4544},[240,41735,39998],{"class":257},[240,41737,41738,41740,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762,41764,41766,41768,41770],{"class":242,"line":4552},[240,41739,39960],{"class":257},[240,41741,32802],{"class":792},[240,41743,440],{"class":288},[240,41745,36816],{"class":264},[240,41747,2479],{"class":257},[240,41749,32811],{"class":792},[240,41751,440],{"class":288},[240,41753,36816],{"class":264},[240,41755,2479],{"class":257},[240,41757,32820],{"class":792},[240,41759,440],{"class":288},[240,41761,1692],{"class":264},[240,41763,2479],{"class":257},[240,41765,32829],{"class":792},[240,41767,440],{"class":288},[240,41769,1643],{"class":264},[240,41771,39993],{"class":257},[240,41773,41774],{"class":242,"line":4557},[240,41775,39998],{"class":257},[240,41777,41778,41780,41782,41784,41786,41788,41790,41792,41794,41796,41798,41800,41802],{"class":242,"line":4563},[240,41779,40043],{"class":257},[240,41781,32820],{"class":792},[240,41783,440],{"class":288},[240,41785,1668],{"class":264},[240,41787,2479],{"class":257},[240,41789,32875],{"class":792},[240,41791,440],{"class":288},[240,41793,1668],{"class":264},[240,41795,2479],{"class":257},[240,41797,32829],{"class":792},[240,41799,440],{"class":288},[240,41801,1274],{"class":264},[240,41803,2129],{"class":257},[240,41805,41806],{"class":242,"line":4569},[240,41807,40072],{"class":257},[240,41809,41810],{"class":242,"line":4574},[240,41811,40373],{"class":246},[240,41813,41814,41816,41818,41820],{"class":242,"line":9899},[240,41815,32791],{"class":264},[240,41817,40380],{"class":257},[240,41819,440],{"class":288},[240,41821,39955],{"class":257},[240,41823,41824,41826,41828,41830,41832,41834,41836,41838,41840,41842,41844,41846,41848,41850,41852,41854,41856],{"class":242,"line":9923},[240,41825,39960],{"class":257},[240,41827,32802],{"class":792},[240,41829,440],{"class":288},[240,41831,36816],{"class":264},[240,41833,2479],{"class":257},[240,41835,32811],{"class":792},[240,41837,440],{"class":288},[240,41839,40403],{"class":264},[240,41841,2479],{"class":257},[240,41843,32820],{"class":792},[240,41845,440],{"class":288},[240,41847,1692],{"class":264},[240,41849,2479],{"class":257},[240,41851,32829],{"class":792},[240,41853,440],{"class":288},[240,41855,1643],{"class":264},[240,41857,39993],{"class":257},[240,41859,41860],{"class":242,"line":9928},[240,41861,39998],{"class":257},[240,41863,41864,41866,41868,41870,41872,41874,41876,41878,41880,41882,41884,41886,41888,41890,41892,41894,41896],{"class":242,"line":9934},[240,41865,39960],{"class":257},[240,41867,32802],{"class":792},[240,41869,440],{"class":288},[240,41871,40403],{"class":264},[240,41873,2479],{"class":257},[240,41875,32811],{"class":792},[240,41877,440],{"class":288},[240,41879,40403],{"class":264},[240,41881,2479],{"class":257},[240,41883,32820],{"class":792},[240,41885,440],{"class":288},[240,41887,1692],{"class":264},[240,41889,2479],{"class":257},[240,41891,32829],{"class":792},[240,41893,440],{"class":288},[240,41895,1643],{"class":264},[240,41897,39993],{"class":257},[240,41899,41900],{"class":242,"line":9961},[240,41901,39998],{"class":257},[240,41903,41904,41906,41908,41910,41912,41914,41916,41918,41920,41922,41924,41926,41928,41930,41932,41934,41936],{"class":242,"line":9966},[240,41905,39960],{"class":257},[240,41907,32802],{"class":792},[240,41909,440],{"class":288},[240,41911,40403],{"class":264},[240,41913,2479],{"class":257},[240,41915,32811],{"class":792},[240,41917,440],{"class":288},[240,41919,40403],{"class":264},[240,41921,2479],{"class":257},[240,41923,32820],{"class":792},[240,41925,440],{"class":288},[240,41927,1692],{"class":264},[240,41929,2479],{"class":257},[240,41931,32829],{"class":792},[240,41933,440],{"class":288},[240,41935,1643],{"class":264},[240,41937,39993],{"class":257},[240,41939,41940],{"class":242,"line":9972},[240,41941,39998],{"class":257},[240,41943,41944,41946,41948,41950,41952,41954,41956,41958,41960,41962,41964,41966,41968],{"class":242,"line":9984},[240,41945,40043],{"class":257},[240,41947,32820],{"class":792},[240,41949,440],{"class":288},[240,41951,1668],{"class":264},[240,41953,2479],{"class":257},[240,41955,32875],{"class":792},[240,41957,440],{"class":288},[240,41959,1668],{"class":264},[240,41961,2479],{"class":257},[240,41963,32829],{"class":792},[240,41965,440],{"class":288},[240,41967,1274],{"class":264},[240,41969,2129],{"class":257},[240,41971,41972],{"class":242,"line":9996},[240,41973,40072],{"class":257},[240,41975,41976],{"class":242,"line":10008},[240,41977,40542],{"class":246},[240,41979,41980,41982,41984,41986],{"class":242,"line":11667},[240,41981,32791],{"class":264},[240,41983,40549],{"class":257},[240,41985,440],{"class":288},[240,41987,39955],{"class":257},[240,41989,41990,41992,41994,41996,41998,42000,42002,42004,42006,42008,42010,42012,42014,42016,42018,42020,42022],{"class":242,"line":11692},[240,41991,39960],{"class":257},[240,41993,32802],{"class":792},[240,41995,440],{"class":288},[240,41997,40403],{"class":264},[240,41999,2479],{"class":257},[240,42001,32811],{"class":792},[240,42003,440],{"class":288},[240,42005,40403],{"class":264},[240,42007,2479],{"class":257},[240,42009,32820],{"class":792},[240,42011,440],{"class":288},[240,42013,1692],{"class":264},[240,42015,2479],{"class":257},[240,42017,32829],{"class":792},[240,42019,440],{"class":288},[240,42021,1643],{"class":264},[240,42023,39993],{"class":257},[240,42025,42026],{"class":242,"line":11715},[240,42027,39998],{"class":257},[240,42029,42030,42032,42034,42036,42038,42040,42042,42044,42046,42048,42050,42052,42054,42056,42058,42060,42062],{"class":242,"line":11739},[240,42031,39960],{"class":257},[240,42033,32802],{"class":792},[240,42035,440],{"class":288},[240,42037,40403],{"class":264},[240,42039,2479],{"class":257},[240,42041,32811],{"class":792},[240,42043,440],{"class":288},[240,42045,40403],{"class":264},[240,42047,2479],{"class":257},[240,42049,32820],{"class":792},[240,42051,440],{"class":288},[240,42053,1692],{"class":264},[240,42055,2479],{"class":257},[240,42057,32829],{"class":792},[240,42059,440],{"class":288},[240,42061,1643],{"class":264},[240,42063,39993],{"class":257},[240,42065,42066],{"class":242,"line":11744},[240,42067,39998],{"class":257},[240,42069,42070,42072,42074,42076,42078,42080,42082,42084,42086,42088,42090,42092,42094,42096,42098,42100,42102],{"class":242,"line":11749},[240,42071,39960],{"class":257},[240,42073,32802],{"class":792},[240,42075,440],{"class":288},[240,42077,40403],{"class":264},[240,42079,2479],{"class":257},[240,42081,32811],{"class":792},[240,42083,440],{"class":288},[240,42085,40403],{"class":264},[240,42087,2479],{"class":257},[240,42089,32820],{"class":792},[240,42091,440],{"class":288},[240,42093,1692],{"class":264},[240,42095,2479],{"class":257},[240,42097,32829],{"class":792},[240,42099,440],{"class":288},[240,42101,1643],{"class":264},[240,42103,39993],{"class":257},[240,42105,42106],{"class":242,"line":11754},[240,42107,39998],{"class":257},[240,42109,42110,42112,42114,42116,42118,42120,42122,42124,42126,42128,42130,42132,42134],{"class":242,"line":11763},[240,42111,40043],{"class":257},[240,42113,32820],{"class":792},[240,42115,440],{"class":288},[240,42117,1668],{"class":264},[240,42119,2479],{"class":257},[240,42121,32875],{"class":792},[240,42123,440],{"class":288},[240,42125,1668],{"class":264},[240,42127,2479],{"class":257},[240,42129,32829],{"class":792},[240,42131,440],{"class":288},[240,42133,1274],{"class":264},[240,42135,2129],{"class":257},[240,42137,42138],{"class":242,"line":11768},[240,42139,40072],{"class":257},[240,42141,42142],{"class":242,"line":11774},[240,42143,40710],{"class":246},[240,42145,42146,42148,42150,42152],{"class":242,"line":11795},[240,42147,32791],{"class":264},[240,42149,40717],{"class":257},[240,42151,440],{"class":288},[240,42153,39955],{"class":257},[240,42155,42156],{"class":242,"line":11801},[240,42157,40726],{"class":246},[240,42159,42160],{"class":242,"line":11815},[240,42161,40731],{"class":246},[240,42163,42164],{"class":242,"line":11821},[240,42165,40736],{"class":257},[240,42167,42168,42170,42172,42174,42176,42178,42180,42182,42184],{"class":242,"line":11848},[240,42169,40741],{"class":257},[240,42171,2470],{"class":264},[240,42173,2554],{"class":288},[240,42175,2470],{"class":264},[240,42177,2554],{"class":288},[240,42179,40403],{"class":264},[240,42181,2479],{"class":257},[240,42183,36816],{"class":264},[240,42185,39993],{"class":257},[240,42187,42188],{"class":242,"line":11857},[240,42189,39998],{"class":257},[240,42191,42192,42194,42196,42198,42200],{"class":242,"line":11863},[240,42193,40741],{"class":257},[240,42195,36816],{"class":264},[240,42197,2479],{"class":257},[240,42199,34016],{"class":264},[240,42201,39993],{"class":257},[240,42203,42204],{"class":242,"line":11871},[240,42205,39998],{"class":257},[240,42207,42208,42210,42212,42214,42216],{"class":242,"line":11876},[240,42209,40741],{"class":257},[240,42211,34016],{"class":264},[240,42213,2479],{"class":257},[240,42215,2546],{"class":264},[240,42217,2129],{"class":257},[240,42219,42220],{"class":242,"line":18552},[240,42221,40072],{"class":257},[240,42223,42224],{"class":242,"line":18558},[240,42225,4353],{"emptyLinePlaceholder":2051},[240,42227,42228],{"class":242,"line":18581},[240,42229,40802],{"class":246},[240,42231,42232],{"class":242,"line":18587},[240,42233,40807],{"class":246},[240,42235,42236,42238,42240,42242,42244],{"class":242,"line":18610},[240,42237,5355],{"class":288},[240,42239,40814],{"class":257},[240,42241,27989],{"class":288},[240,42243,40819],{"class":264},[240,42245,40822],{"class":257},[240,42247,42248],{"class":242,"line":18624},[240,42249,40827],{"class":246},[240,42251,42252,42254,42256],{"class":242,"line":18644},[240,42253,6594],{"class":288},[240,42255,40834],{"class":264},[240,42257,40837],{"class":257},[240,42259,42260],{"class":242,"line":18650},[240,42261,40842],{"class":246},[240,42263,42264,42266,42268,42270,42272],{"class":242,"line":18661},[240,42265,40847],{"class":257},[240,42267,40850],{"class":792},[240,42269,440],{"class":288},[240,42271,40855],{"class":443},[240,42273,2129],{"class":257},[240,42275,42276],{"class":242,"line":18684},[240,42277,40862],{"class":246},[240,42279,42280,42282,42284,42286,42288,42290],{"class":242,"line":18706},[240,42281,40867],{"class":288},[240,42283,40870],{"class":257},[240,42285,40873],{"class":288},[240,42287,40876],{"class":288},[240,42289,40879],{"class":264},[240,42291,5691],{"class":257},[240,42293,42294],{"class":242,"line":18711},[240,42295,40886],{"class":246},[240,42297,42298,42300,42302],{"class":242,"line":18717},[240,42299,40891],{"class":257},[240,42301,1274],{"class":264},[240,42303,2129],{"class":257},[240,42305,42306],{"class":242,"line":18731},[240,42307,40900],{"class":246},[240,42309,42310,42312,42314],{"class":242,"line":18744},[240,42311,40905],{"class":288},[240,42313,40834],{"class":264},[240,42315,40910],{"class":257},[240,42317,42318],{"class":242,"line":18749},[240,42319,40915],{"class":246},[240,42321,42322],{"class":242,"line":18763},[240,42323,40920],{"class":246},[240,42325,42326,42328,42330,42332,42334],{"class":242,"line":18768},[240,42327,40925],{"class":257},[240,42329,1274],{"class":264},[240,42331,2479],{"class":257},[240,42333,40932],{"class":264},[240,42335,2129],{"class":257},[240,42337,42338],{"class":242,"line":18774},[240,42339,40939],{"class":246},[240,42341,42342,42344,42346,42348,42350,42352],{"class":242,"line":18779},[240,42343,40867],{"class":288},[240,42345,40870],{"class":257},[240,42347,40873],{"class":288},[240,42349,40876],{"class":288},[240,42351,40879],{"class":264},[240,42353,5691],{"class":257},[240,42355,42356,42358,42360],{"class":242,"line":18793},[240,42357,40891],{"class":257},[240,42359,1274],{"class":264},[240,42361,2129],{"class":257},[240,42363,42364],{"class":242,"line":18798},[240,42365,4353],{"emptyLinePlaceholder":2051},[240,42367,42368],{"class":242,"line":18803},[240,42369,37111],{"class":246},[240,42371,42372,42374,42376],{"class":242,"line":18817},[240,42373,32747],{"class":288},[240,42375,33039],{"class":436},[240,42377,33042],{"class":257},[240,42379,42380,42382,42384,42386],{"class":242,"line":18829},[240,42381,33047],{"class":257},[240,42383,440],{"class":288},[240,42385,32769],{"class":264},[240,42387,40988],{"class":257},[240,42389,42390,42392,42394,42396],{"class":242,"line":18834},[240,42391,33047],{"class":257},[240,42393,440],{"class":288},[240,42395,32769],{"class":264},[240,42397,40999],{"class":257},[240,42399,42400,42402,42404,42406],{"class":242,"line":18847},[240,42401,33047],{"class":257},[240,42403,440],{"class":288},[240,42405,32769],{"class":264},[240,42407,41010],{"class":257},[240,42409,42410,42412,42414,42416],{"class":242,"line":18852},[240,42411,33047],{"class":257},[240,42413,440],{"class":288},[240,42415,32769],{"class":264},[240,42417,41021],{"class":257},[240,42419,42420,42422,42424,42426],{"class":242,"line":18857},[240,42421,33047],{"class":257},[240,42423,440],{"class":288},[240,42425,32769],{"class":264},[240,42427,41032],{"class":257},[240,42429,42430,42432,42434,42436],{"class":242,"line":18862},[240,42431,33047],{"class":257},[240,42433,440],{"class":288},[240,42435,32769],{"class":264},[240,42437,41043],{"class":257},[240,42439,42440,42442],{"class":242,"line":18875},[240,42441,16701],{"class":288},[240,42443,33155],{"class":257},[240,42445,42446],{"class":242,"line":18880},[240,42447,4353],{"emptyLinePlaceholder":2051},[240,42449,42450],{"class":242,"line":34579},[240,42451,41058],{"class":246},[240,42453,42454,42456,42458,42460,42462],{"class":242,"line":34585},[240,42455,3489],{"class":288},[240,42457,33166],{"class":264},[240,42459,4901],{"class":288},[240,42461,41069],{"class":443},[240,42463,5691],{"class":257},[240,42465,42466,42468,42470,42472,42474,42476,42478,42480,42482],{"class":242,"line":34591},[240,42467,33183],{"class":257},[240,42469,440],{"class":288},[240,42471,32397],{"class":257},[240,42473,33190],{"class":443},[240,42475,3658],{"class":288},[240,42477,33195],{"class":257},[240,42479,3655],{"class":288},[240,42481,32422],{"class":443},[240,42483,2129],{"class":257},[240,42485,42486,42488],{"class":242,"line":34597},[240,42487,33245],{"class":264},[240,42489,32431],{"class":257},[240,42491,42492,42494,42496],{"class":242,"line":34603},[240,42493,33235],{"class":257},[240,42495,440],{"class":288},[240,42497,41106],{"class":257},[240,42499,42500,42502,42504,42506,42508,42510,42512,42514],{"class":242,"line":34614},[240,42501,33245],{"class":264},[240,42503,33248],{"class":257},[240,42505,1643],{"class":264},[240,42507,2479],{"class":257},[240,42509,33447],{"class":264},[240,42511,2479],{"class":257},[240,42513,33447],{"class":264},[240,42515,33261],{"class":257},[1826,42517,42518],{"start":261},[1829,42519,42520],{},"测试代码",[231,42522,42524],{"className":32324,"code":42523,"language":32326,"meta":236,"style":236},"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",[23,42525,42526,42532,42542,42552,42556,42566,42577,42581,42585,42589,42597,42613,42623,42639,42649,42663,42667,42677,42687,42697,42703,42707,42711,42719,42723,42739,42747,42751,42755,42763,42771,42775,42779,42783,42787,42793,42797,42807,42815,42823,42827,42831,42835,42843,42847,42863,42867,42871,42875,42887,42891,42903,42907,42911,42923,42927,42937,42941,42945,42957,42961,42970,42974,42978,42986,42990,42998,43002,43006,43010,43014,43018,43034,43042,43046,43050,43098,43104,43108,43118,43126,43134,43138,43142,43146,43150,43158,43162,43178,43182,43190,43198],{"__ignoreMap":236},[240,42527,42528,42530],{"class":242,"line":243},[240,42529,32338],{"class":288},[240,42531,32341],{"class":257},[240,42533,42534,42536,42538,42540],{"class":242,"line":250},[240,42535,32338],{"class":288},[240,42537,33361],{"class":257},[240,42539,33329],{"class":288},[240,42541,33366],{"class":257},[240,42543,42544,42546,42548,42550],{"class":242,"line":261},[240,42545,32683],{"class":288},[240,42547,33344],{"class":257},[240,42549,32338],{"class":288},[240,42551,33349],{"class":257},[240,42553,42554],{"class":242,"line":277},[240,42555,35868],{"class":246},[240,42557,42558,42560,42562,42564],{"class":242,"line":294},[240,42559,32683],{"class":288},[240,42561,33314],{"class":257},[240,42563,32338],{"class":288},[240,42565,33319],{"class":257},[240,42567,42568,42570,42572,42574],{"class":242,"line":309},[240,42569,32683],{"class":288},[240,42571,33860],{"class":257},[240,42573,32338],{"class":288},[240,42575,42576],{"class":264}," VGG16\n",[240,42578,42579],{"class":242,"line":529},[240,42580,4353],{"emptyLinePlaceholder":2051},[240,42582,42583],{"class":242,"line":549},[240,42584,4353],{"emptyLinePlaceholder":2051},[240,42586,42587],{"class":242,"line":569},[240,42588,35897],{"class":246},[240,42590,42591,42593,42595],{"class":242,"line":589},[240,42592,33893],{"class":288},[240,42594,35904],{"class":436},[240,42596,33899],{"class":257},[240,42598,42599,42601,42603,42605,42607,42609,42611],{"class":242,"line":715},[240,42600,35911],{"class":257},[240,42602,440],{"class":288},[240,42604,33401],{"class":257},[240,42606,33404],{"class":792},[240,42608,440],{"class":288},[240,42610,33409],{"class":443},[240,42612,33412],{"class":257},[240,42614,42615,42617,42619,42621],{"class":242,"line":727},[240,42616,35928],{"class":792},[240,42618,440],{"class":288},[240,42620,35933],{"class":264},[240,42622,33412],{"class":257},[240,42624,42625,42627,42629,42631,42633,42635,42637],{"class":242,"line":1730},[240,42626,35940],{"class":792},[240,42628,440],{"class":288},[240,42630,33439],{"class":257},[240,42632,33442],{"class":792},[240,42634,440],{"class":288},[240,42636,33447],{"class":264},[240,42638,33450],{"class":257},[240,42640,42641,42643,42645,42647],{"class":242,"line":3582},[240,42642,35957],{"class":792},[240,42644,440],{"class":288},[240,42646,33422],{"class":264},[240,42648,2129],{"class":257},[240,42650,42651,42653,42655,42657,42659,42661],{"class":242,"line":3596},[240,42652,35968],{"class":257},[240,42654,440],{"class":288},[240,42656,33480],{"class":257},[240,42658,33483],{"class":792},[240,42660,440],{"class":288},[240,42662,35979],{"class":257},[240,42664,42665],{"class":242,"line":3601},[240,42666,35984],{"class":246},[240,42668,42669,42671,42673,42675],{"class":242,"line":3607},[240,42670,35989],{"class":792},[240,42672,440],{"class":288},[240,42674,1643],{"class":264},[240,42676,33412],{"class":257},[240,42678,42679,42681,42683,42685],{"class":242,"line":3628},[240,42680,36000],{"class":792},[240,42682,440],{"class":288},[240,42684,33422],{"class":264},[240,42686,33412],{"class":257},[240,42688,42689,42691,42693,42695],{"class":242,"line":3633},[240,42690,36011],{"class":792},[240,42692,440],{"class":288},[240,42694,1274],{"class":264},[240,42696,2129],{"class":257},[240,42698,42699,42701],{"class":242,"line":3647},[240,42700,6042],{"class":288},[240,42702,36024],{"class":257},[240,42704,42705],{"class":242,"line":3652},[240,42706,4353],{"emptyLinePlaceholder":2051},[240,42708,42709],{"class":242,"line":3681},[240,42710,36033],{"class":246},[240,42712,42713,42715,42717],{"class":242,"line":3686},[240,42714,33893],{"class":288},[240,42716,36040],{"class":436},[240,42718,36043],{"class":257},[240,42720,42721],{"class":242,"line":3703},[240,42722,36048],{"class":246},[240,42724,42725,42727,42729,42731,42733,42735,42737],{"class":242,"line":3708},[240,42726,33183],{"class":257},[240,42728,440],{"class":288},[240,42730,33190],{"class":443},[240,42732,3658],{"class":288},[240,42734,33195],{"class":257},[240,42736,3655],{"class":288},[240,42738,36065],{"class":443},[240,42740,42741,42743,42745],{"class":242,"line":3713},[240,42742,33235],{"class":257},[240,42744,440],{"class":288},[240,42746,34235],{"class":257},[240,42748,42749],{"class":242,"line":3718},[240,42750,4353],{"emptyLinePlaceholder":2051},[240,42752,42753],{"class":242,"line":3732},[240,42754,36082],{"class":246},[240,42756,42757,42759,42761],{"class":242,"line":3737},[240,42758,36087],{"class":257},[240,42760,440],{"class":288},[240,42762,34288],{"class":264},[240,42764,42765,42767,42769],{"class":242,"line":4530},[240,42766,36096],{"class":257},[240,42768,440],{"class":288},[240,42770,5037],{"class":264},[240,42772,42773],{"class":242,"line":4544},[240,42774,4353],{"emptyLinePlaceholder":2051},[240,42776,42777],{"class":242,"line":4552},[240,42778,36109],{"class":246},[240,42780,42781],{"class":242,"line":4557},[240,42782,36114],{"class":246},[240,42784,42785],{"class":242,"line":4563},[240,42786,36119],{"class":246},[240,42788,42789,42791],{"class":242,"line":4569},[240,42790,36124],{"class":288},[240,42792,34830],{"class":257},[240,42794,42795],{"class":242,"line":4574},[240,42796,36131],{"class":246},[240,42798,42799,42801,42803,42805],{"class":242,"line":9899},[240,42800,5355],{"class":288},[240,42802,36138],{"class":257},[240,42804,27989],{"class":288},[240,42806,36143],{"class":257},[240,42808,42809,42811,42813],{"class":242,"line":9923},[240,42810,36148],{"class":257},[240,42812,440],{"class":288},[240,42814,36153],{"class":257},[240,42816,42817,42819,42821],{"class":242,"line":9928},[240,42818,36158],{"class":257},[240,42820,440],{"class":288},[240,42822,36163],{"class":257},[240,42824,42825],{"class":242,"line":9934},[240,42826,36168],{"class":246},[240,42828,42829],{"class":242,"line":9961},[240,42830,34821],{"class":257},[240,42832,42833],{"class":242,"line":9966},[240,42834,36177],{"class":246},[240,42836,42837,42839,42841],{"class":242,"line":9972},[240,42838,34606],{"class":257},[240,42840,440],{"class":288},[240,42842,36186],{"class":257},[240,42844,42845],{"class":242,"line":9984},[240,42846,36191],{"class":246},[240,42848,42849,42851,42853,42855,42857,42859,42861],{"class":242,"line":9996},[240,42850,34623],{"class":257},[240,42852,440],{"class":288},[240,42854,34628],{"class":257},[240,42856,34631],{"class":792},[240,42858,440],{"class":288},[240,42860,1643],{"class":264},[240,42862,2129],{"class":257},[240,42864,42865],{"class":242,"line":10008},[240,42866,36212],{"class":246},[240,42868,42869],{"class":242,"line":11667},[240,42870,36217],{"class":246},[240,42872,42873],{"class":242,"line":11692},[240,42874,36222],{"class":246},[240,42876,42877,42879,42881,42883,42885],{"class":242,"line":11715},[240,42878,36227],{"class":257},[240,42880,11428],{"class":288},[240,42882,34733],{"class":257},[240,42884,4901],{"class":288},[240,42886,36236],{"class":257},[240,42888,42889],{"class":242,"line":11739},[240,42890,36241],{"class":246},[240,42892,42893,42895,42897,42899,42901],{"class":242,"line":11744},[240,42894,36246],{"class":257},[240,42896,11428],{"class":288},[240,42898,36251],{"class":257},[240,42900,1274],{"class":264},[240,42902,2129],{"class":257},[240,42904,42905],{"class":242,"line":11749},[240,42906,4353],{"emptyLinePlaceholder":2051},[240,42908,42909],{"class":242,"line":11754},[240,42910,36264],{"class":246},[240,42912,42913,42915,42917,42919,42921],{"class":242,"line":11763},[240,42914,36269],{"class":257},[240,42916,440],{"class":288},[240,42918,36274],{"class":257},[240,42920,2683],{"class":288},[240,42922,36279],{"class":257},[240,42924,42925],{"class":242,"line":11768},[240,42926,36284],{"class":246},[240,42928,42929,42931,42933,42935],{"class":242,"line":11774},[240,42930,34397],{"class":264},[240,42932,789],{"class":257},[240,42934,36293],{"class":443},[240,42936,36296],{"class":257},[240,42938,42939],{"class":242,"line":11795},[240,42940,4353],{"emptyLinePlaceholder":2051},[240,42942,42943],{"class":242,"line":11801},[240,42944,36305],{"class":246},[240,42946,42947,42949,42951,42953,42955],{"class":242,"line":11815},[240,42948,3489],{"class":288},[240,42950,33166],{"class":264},[240,42952,4901],{"class":288},[240,42954,33171],{"class":443},[240,42956,5691],{"class":257},[240,42958,42959],{"class":242,"line":11821},[240,42960,36322],{"class":246},[240,42962,42963,42965,42967],{"class":242,"line":11848},[240,42964,33235],{"class":257},[240,42966,440],{"class":288},[240,42968,42969],{"class":257},"VGG16()\n",[240,42971,42972],{"class":242,"line":11857},[240,42973,36335],{"class":246},[240,42975,42976],{"class":242,"line":11863},[240,42977,36340],{"class":246},[240,42979,42980,42982,42984],{"class":242,"line":11871},[240,42981,36345],{"class":257},[240,42983,36348],{"class":443},[240,42985,32443],{"class":257},[240,42987,42988],{"class":242,"line":11876},[240,42989,36355],{"class":246},[240,42991,42992,42994,42996],{"class":242,"line":18552},[240,42993,35968],{"class":257},[240,42995,440],{"class":288},[240,42997,36364],{"class":257},[240,42999,43000],{"class":242,"line":18558},[240,43001,36369],{"class":246},[240,43003,43004],{"class":242,"line":18581},[240,43005,36374],{"class":257},[240,43007,43008],{"class":242,"line":18587},[240,43009,4353],{"emptyLinePlaceholder":2051},[240,43011,43012],{"class":242,"line":18610},[240,43013,36383],{"class":246},[240,43015,43016],{"class":242,"line":18624},[240,43017,36388],{"class":246},[240,43019,43020,43022,43024,43026,43028,43030,43032],{"class":242,"line":18644},[240,43021,33183],{"class":257},[240,43023,440],{"class":288},[240,43025,33190],{"class":443},[240,43027,3658],{"class":288},[240,43029,33195],{"class":257},[240,43031,3655],{"class":288},[240,43033,36065],{"class":443},[240,43035,43036,43038,43040],{"class":242,"line":18650},[240,43037,33235],{"class":257},[240,43039,440],{"class":288},[240,43041,34235],{"class":257},[240,43043,43044],{"class":242,"line":18661},[240,43045,36417],{"class":246},[240,43047,43048],{"class":242,"line":18684},[240,43049,36422],{"class":246},[240,43051,43052,43054,43056,43058,43060,43062,43064,43066,43068,43070,43072,43074,43076,43078,43080,43082,43084,43086,43088,43090,43092,43094,43096],{"class":242,"line":18706},[240,43053,36427],{"class":257},[240,43055,440],{"class":288},[240,43057,2985],{"class":257},[240,43059,36434],{"class":443},[240,43061,2479],{"class":257},[240,43063,36439],{"class":443},[240,43065,2479],{"class":257},[240,43067,36444],{"class":443},[240,43069,2479],{"class":257},[240,43071,36449],{"class":443},[240,43073,2479],{"class":257},[240,43075,36454],{"class":443},[240,43077,2479],{"class":257},[240,43079,36459],{"class":443},[240,43081,2479],{"class":257},[240,43083,36464],{"class":443},[240,43085,2479],{"class":257},[240,43087,36469],{"class":443},[240,43089,2479],{"class":257},[240,43091,36474],{"class":443},[240,43093,2479],{"class":257},[240,43095,36479],{"class":443},[240,43097,35192],{"class":257},[240,43099,43100,43102],{"class":242,"line":18711},[240,43101,36124],{"class":288},[240,43103,34830],{"class":257},[240,43105,43106],{"class":242,"line":18717},[240,43107,36492],{"class":246},[240,43109,43110,43112,43114,43116],{"class":242,"line":18731},[240,43111,5355],{"class":288},[240,43113,36499],{"class":257},[240,43115,27989],{"class":288},[240,43117,36143],{"class":257},[240,43119,43120,43122,43124],{"class":242,"line":18744},[240,43121,34556],{"class":257},[240,43123,440],{"class":288},[240,43125,34561],{"class":257},[240,43127,43128,43130,43132],{"class":242,"line":18749},[240,43129,34571],{"class":257},[240,43131,440],{"class":288},[240,43133,34576],{"class":257},[240,43135,43136],{"class":242,"line":18763},[240,43137,4353],{"emptyLinePlaceholder":2051},[240,43139,43140],{"class":242,"line":18768},[240,43141,36528],{"class":246},[240,43143,43144],{"class":242,"line":18774},[240,43145,34821],{"class":257},[240,43147,43148],{"class":242,"line":18779},[240,43149,36537],{"class":246},[240,43151,43152,43154,43156],{"class":242,"line":18793},[240,43153,34606],{"class":257},[240,43155,440],{"class":288},[240,43157,34611],{"class":257},[240,43159,43160],{"class":242,"line":18798},[240,43161,36550],{"class":246},[240,43163,43164,43166,43168,43170,43172,43174,43176],{"class":242,"line":18803},[240,43165,34623],{"class":257},[240,43167,440],{"class":288},[240,43169,34628],{"class":257},[240,43171,34631],{"class":792},[240,43173,440],{"class":288},[240,43175,1643],{"class":264},[240,43177,2129],{"class":257},[240,43179,43180],{"class":242,"line":18817},[240,43181,36571],{"class":246},[240,43183,43184,43186,43188],{"class":242,"line":18829},[240,43185,36576],{"class":257},[240,43187,440],{"class":288},[240,43189,36581],{"class":257},[240,43191,43192,43194,43196],{"class":242,"line":18834},[240,43193,36586],{"class":257},[240,43195,440],{"class":288},[240,43197,36591],{"class":257},[240,43199,43200,43202,43204,43206,43208,43210,43212,43214],{"class":242,"line":18847},[240,43201,36596],{"class":264},[240,43203,789],{"class":257},[240,43205,36601],{"class":443},[240,43207,36604],{"class":257},[240,43209,36607],{"class":443},[240,43211,2479],{"class":257},[240,43213,36612],{"class":443},[240,43215,36615],{"class":257},[32,43217,43219],{"id":43218},"_23googlenet","2.3.GoogLeNet",[23945,43221,43223],{"id":43222},"_231原理","2.3.1.原理",[1826,43225,43226],{},[1829,43227,43228],{},"网络结构",[19,43230,43231],{},[219,43232],{"alt":236,"src":43233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[19,43235,43236],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[19,43238,43239],{},[219,43240],{"alt":236,"src":43241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[19,43243,43244],{},[219,43245],{"alt":236,"src":43246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[19,43248,43249],{},[219,43250],{"alt":236,"src":43251},"\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",[1826,43253,43254],{"start":250},[1829,43255,43256],{},"1x1卷积的优点",[19,43258,43259],{},[219,43260],{"alt":236,"src":43261},"\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",[1826,43263,43264],{"start":261},[1829,43265,43266],{},"全局平均池化层优点",[19,43268,43269],{},[219,43270],{"alt":236,"src":43271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[19,43273,43274],{},[219,43275],{"alt":236,"src":43276},"\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",[1826,43278,43279],{"start":277},[1829,43280,43281],{},"参数详细描述",[19,43283,43284],{},[219,43285],{"alt":236,"src":43286},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[19,43288,43289],{},[219,43290],{"alt":236,"src":43291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[19,43293,43294],{},[219,43295],{"alt":236,"src":43296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[19,43298,43299],{},[219,43300],{"alt":236,"src":43301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[19,43303,43304],{},[219,43305],{"alt":236,"src":43306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[19,43308,43309],{},[219,43310],{"alt":236,"src":43311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[19,43313,43314],{},[219,43315],{"alt":236,"src":43316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[19,43318,43319],{},[219,43320],{"alt":236,"src":43321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[19,43323,43324],{},[219,43325],{"alt":236,"src":43326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[19,43328,43329],{},[219,43330],{"alt":236,"src":43331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[19,43333,43334],{},[219,43335],{"alt":236,"src":43336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[19,43338,43339],{},[219,43340],{"alt":236,"src":43341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[19,43343,43344],{},[219,43345],{"alt":236,"src":43346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[19,43348,43349],{},[219,43350],{"alt":236,"src":43351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[19,43353,43354],{},[219,43355],{"alt":236,"src":43356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[19,43358,43359],{},[219,43360],{"alt":236,"src":43361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[19,43363,43364],{},[219,43365],{"alt":236,"src":43366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[19,43368,43369],{},[219,43370],{"alt":236,"src":43371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[19,43373,43374],{},[219,43375],{"alt":236,"src":43376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[19,43378,43379],{},[219,43380],{"alt":236,"src":43381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-049.png",[19,43383,43384],{},[219,43385],{"alt":236,"src":43386},"\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",[23945,43388,43390],{"id":43389},"_232代码实现","2.3.2.代码实现",[1826,43392,43393],{},[1829,43394,32657],{},[19,43396,43397],{},"根据原理一步一步搭建即可",[231,43399,43401],{"className":32324,"code":43400,"language":32326,"meta":236,"style":236},"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",[23,43402,43403,43409,43419,43429,43433,43450,43459,43474,43484,43489,43522,43527,43564,43611,43616,43652,43699,43704,43709,43744,43776,43780,43788,43804,43828,43853,43874,43879,43894,43898,43902,43907,43924,43929,43938,43953,43964,44008,44012,44040,44044,44055,44083,44087,44124,44128,44156,44160,44171,44207,44239,44267,44271,44282,44316,44348,44380,44413,44447,44475,44479,44490,44523,44555,44569,44573,44586,44590,44595,44607,44615,44637,44642,44647,44652,44657,44662,44667,44681,44689,44698,44711,44726,44735,44739,44747,44758,44769,44780,44791,44802,44808,44812,44817,44829,44849,44858],{"__ignoreMap":236},[240,43404,43405,43407],{"class":242,"line":243},[240,43406,32338],{"class":288},[240,43408,32341],{"class":257},[240,43410,43411,43413,43415,43417],{"class":242,"line":250},[240,43412,32683],{"class":288},[240,43414,32686],{"class":257},[240,43416,32338],{"class":288},[240,43418,32691],{"class":257},[240,43420,43421,43423,43425,43427],{"class":242,"line":261},[240,43422,32683],{"class":288},[240,43424,32703],{"class":257},[240,43426,32338],{"class":288},[240,43428,32708],{"class":257},[240,43430,43431],{"class":242,"line":277},[240,43432,4353],{"emptyLinePlaceholder":2051},[240,43434,43435,43437,43440,43442,43444,43446,43448],{"class":242,"line":294},[240,43436,16643],{"class":288},[240,43438,43439],{"class":436}," Inception",[240,43441,789],{"class":257},[240,43443,32724],{"class":436},[240,43445,2657],{"class":257},[240,43447,32729],{"class":436},[240,43449,32732],{"class":257},[240,43451,43452,43454,43456],{"class":242,"line":309},[240,43453,32747],{"class":288},[240,43455,32750],{"class":264},[240,43457,43458],{"class":257},"(self,in_channels,c1,c2,c3,c4):\n",[240,43460,43461,43463,43466,43468,43470,43472],{"class":242,"line":529},[240,43462,32763],{"class":264},[240,43464,43465],{"class":257},"(Inception,",[240,43467,32769],{"class":264},[240,43469,32772],{"class":257},[240,43471,32775],{"class":264},[240,43473,3929],{"class":257},[240,43475,43476,43478,43480,43482],{"class":242,"line":549},[240,43477,32791],{"class":264},[240,43479,36717],{"class":257},[240,43481,440],{"class":288},[240,43483,36722],{"class":257},[240,43485,43486],{"class":242,"line":569},[240,43487,43488],{"class":246},"        # 路线1：定义1*1卷积\n",[240,43490,43491,43493,43496,43498,43500,43502,43504,43507,43509,43511,43514,43516,43518,43520],{"class":242,"line":589},[240,43492,32791],{"class":264},[240,43494,43495],{"class":257},".p1_1",[240,43497,440],{"class":288},[240,43499,32799],{"class":257},[240,43501,32802],{"class":792},[240,43503,440],{"class":288},[240,43505,43506],{"class":257},"in_channels,",[240,43508,32811],{"class":792},[240,43510,440],{"class":288},[240,43512,43513],{"class":257},"c1,",[240,43515,32820],{"class":792},[240,43517,440],{"class":288},[240,43519,1643],{"class":264},[240,43521,2129],{"class":257},[240,43523,43524],{"class":242,"line":715},[240,43525,43526],{"class":246},"        # 路线2：定义1*1卷积和3*3\n",[240,43528,43529,43531,43534,43536,43538,43540,43542,43544,43546,43548,43551,43553,43556,43558,43560,43562],{"class":242,"line":727},[240,43530,32791],{"class":264},[240,43532,43533],{"class":257},".p2_1",[240,43535,440],{"class":288},[240,43537,32799],{"class":257},[240,43539,32802],{"class":792},[240,43541,440],{"class":288},[240,43543,43506],{"class":257},[240,43545,32811],{"class":792},[240,43547,440],{"class":288},[240,43549,43550],{"class":257},"c2[",[240,43552,1274],{"class":264},[240,43554,43555],{"class":257},"],",[240,43557,32820],{"class":792},[240,43559,440],{"class":288},[240,43561,1643],{"class":264},[240,43563,2129],{"class":257},[240,43565,43566,43568,43571,43573,43575,43577,43579,43581,43583,43585,43587,43589,43591,43593,43595,43597,43599,43601,43603,43605,43607,43609],{"class":242,"line":1730},[240,43567,32791],{"class":264},[240,43569,43570],{"class":257},".p2_2",[240,43572,440],{"class":288},[240,43574,32799],{"class":257},[240,43576,32802],{"class":792},[240,43578,440],{"class":288},[240,43580,43550],{"class":257},[240,43582,1274],{"class":264},[240,43584,43555],{"class":257},[240,43586,32811],{"class":792},[240,43588,440],{"class":288},[240,43590,43550],{"class":257},[240,43592,1643],{"class":264},[240,43594,43555],{"class":257},[240,43596,32820],{"class":792},[240,43598,440],{"class":288},[240,43600,1692],{"class":264},[240,43602,2479],{"class":257},[240,43604,32829],{"class":792},[240,43606,440],{"class":288},[240,43608,1643],{"class":264},[240,43610,2129],{"class":257},[240,43612,43613],{"class":242,"line":3582},[240,43614,43615],{"class":246},"        # 路线3：定义1*1卷积和5*5\n",[240,43617,43618,43620,43623,43625,43627,43629,43631,43633,43635,43637,43640,43642,43644,43646,43648,43650],{"class":242,"line":3596},[240,43619,32791],{"class":264},[240,43621,43622],{"class":257},".p3_1",[240,43624,440],{"class":288},[240,43626,32799],{"class":257},[240,43628,32802],{"class":792},[240,43630,440],{"class":288},[240,43632,43506],{"class":257},[240,43634,32811],{"class":792},[240,43636,440],{"class":288},[240,43638,43639],{"class":257},"c3[",[240,43641,1274],{"class":264},[240,43643,43555],{"class":257},[240,43645,32820],{"class":792},[240,43647,440],{"class":288},[240,43649,1643],{"class":264},[240,43651,2129],{"class":257},[240,43653,43654,43656,43659,43661,43663,43665,43667,43669,43671,43673,43675,43677,43679,43681,43683,43685,43687,43689,43691,43693,43695,43697],{"class":242,"line":3601},[240,43655,32791],{"class":264},[240,43657,43658],{"class":257},".p3_2",[240,43660,440],{"class":288},[240,43662,32799],{"class":257},[240,43664,32802],{"class":792},[240,43666,440],{"class":288},[240,43668,43639],{"class":257},[240,43670,1274],{"class":264},[240,43672,43555],{"class":257},[240,43674,32811],{"class":792},[240,43676,440],{"class":288},[240,43678,43639],{"class":257},[240,43680,1643],{"class":264},[240,43682,43555],{"class":257},[240,43684,32820],{"class":792},[240,43686,440],{"class":288},[240,43688,1741],{"class":264},[240,43690,2479],{"class":257},[240,43692,32829],{"class":792},[240,43694,440],{"class":288},[240,43696,1668],{"class":264},[240,43698,2129],{"class":257},[240,43700,43701],{"class":242,"line":3607},[240,43702,43703],{"class":246},"        # 路线4：定义3*3最大池化和1*1卷积\n",[240,43705,43706],{"class":242,"line":3628},[240,43707,43708],{"class":246},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[240,43710,43711,43713,43716,43718,43720,43722,43724,43726,43728,43730,43732,43734,43736,43738,43740,43742],{"class":242,"line":3633},[240,43712,32791],{"class":264},[240,43714,43715],{"class":257},".p4_1",[240,43717,440],{"class":288},[240,43719,36775],{"class":257},[240,43721,32820],{"class":792},[240,43723,440],{"class":288},[240,43725,1692],{"class":264},[240,43727,2479],{"class":257},[240,43729,32875],{"class":792},[240,43731,440],{"class":288},[240,43733,1643],{"class":264},[240,43735,2479],{"class":257},[240,43737,32829],{"class":792},[240,43739,440],{"class":288},[240,43741,1643],{"class":264},[240,43743,2129],{"class":257},[240,43745,43746,43748,43751,43753,43755,43757,43759,43761,43763,43765,43768,43770,43772,43774],{"class":242,"line":3647},[240,43747,32791],{"class":264},[240,43749,43750],{"class":257},".p4_2",[240,43752,440],{"class":288},[240,43754,32799],{"class":257},[240,43756,32802],{"class":792},[240,43758,440],{"class":288},[240,43760,43506],{"class":257},[240,43762,32811],{"class":792},[240,43764,440],{"class":288},[240,43766,43767],{"class":257},"c4,",[240,43769,32820],{"class":792},[240,43771,440],{"class":288},[240,43773,1643],{"class":264},[240,43775,2129],{"class":257},[240,43777,43778],{"class":242,"line":3652},[240,43779,4353],{"emptyLinePlaceholder":2051},[240,43781,43782,43784,43786],{"class":242,"line":3681},[240,43783,32747],{"class":288},[240,43785,33039],{"class":436},[240,43787,33042],{"class":257},[240,43789,43790,43793,43795,43797,43799,43801],{"class":242,"line":3686},[240,43791,43792],{"class":257},"        p1",[240,43794,440],{"class":288},[240,43796,32769],{"class":264},[240,43798,37130],{"class":257},[240,43800,32769],{"class":264},[240,43802,43803],{"class":257},".p1_1(x))\n",[240,43805,43806,43808,43810,43812,43814,43816,43819,43821,43823,43825],{"class":242,"line":3703},[240,43807,9036],{"class":257},[240,43809,440],{"class":288},[240,43811,32769],{"class":264},[240,43813,37130],{"class":257},[240,43815,32769],{"class":264},[240,43817,43818],{"class":257},".p2_2(",[240,43820,32769],{"class":264},[240,43822,37130],{"class":257},[240,43824,32769],{"class":264},[240,43826,43827],{"class":257},".p2_1(x))))\n",[240,43829,43830,43833,43835,43837,43839,43841,43844,43846,43848,43850],{"class":242,"line":3708},[240,43831,43832],{"class":257},"        p3",[240,43834,440],{"class":288},[240,43836,32769],{"class":264},[240,43838,37130],{"class":257},[240,43840,32769],{"class":264},[240,43842,43843],{"class":257},".p3_2(",[240,43845,32769],{"class":264},[240,43847,37130],{"class":257},[240,43849,32769],{"class":264},[240,43851,43852],{"class":257},".p3_1(x))))\n",[240,43854,43855,43858,43860,43862,43864,43866,43869,43871],{"class":242,"line":3713},[240,43856,43857],{"class":257},"        p4",[240,43859,440],{"class":288},[240,43861,32769],{"class":264},[240,43863,37130],{"class":257},[240,43865,32769],{"class":264},[240,43867,43868],{"class":257},".p4_2(",[240,43870,32769],{"class":264},[240,43872,43873],{"class":257},".p4_1(x)))\n",[240,43875,43876],{"class":242,"line":3718},[240,43877,43878],{"class":246},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[240,43880,43881,43883,43886,43888,43890,43892],{"class":242,"line":3732},[240,43882,16701],{"class":288},[240,43884,43885],{"class":257}," torch.cat((p1,p2,p3,p4),",[240,43887,34631],{"class":792},[240,43889,440],{"class":288},[240,43891,1643],{"class":264},[240,43893,2129],{"class":257},[240,43895,43896],{"class":242,"line":3737},[240,43897,4353],{"emptyLinePlaceholder":2051},[240,43899,43900],{"class":242,"line":4530},[240,43901,4353],{"emptyLinePlaceholder":2051},[240,43903,43904],{"class":242,"line":4544},[240,43905,43906],{"class":246},"# 搭建GoogLeNet网络\n",[240,43908,43909,43911,43914,43916,43918,43920,43922],{"class":242,"line":4552},[240,43910,16643],{"class":288},[240,43912,43913],{"class":436}," GoogLeNet",[240,43915,789],{"class":257},[240,43917,32724],{"class":436},[240,43919,2657],{"class":257},[240,43921,32729],{"class":436},[240,43923,32732],{"class":257},[240,43925,43926],{"class":242,"line":4557},[240,43927,43928],{"class":246},"    # 必须把Inception导入到里边\n",[240,43930,43931,43933,43935],{"class":242,"line":4563},[240,43932,32747],{"class":288},[240,43934,32750],{"class":264},[240,43936,43937],{"class":257},"(self,Inception):\n",[240,43939,43940,43942,43945,43947,43949,43951],{"class":242,"line":4569},[240,43941,32763],{"class":264},[240,43943,43944],{"class":257},"(GoogLeNet,",[240,43946,32769],{"class":264},[240,43948,32772],{"class":257},[240,43950,32775],{"class":264},[240,43952,3929],{"class":257},[240,43954,43955,43957,43960,43962],{"class":242,"line":4574},[240,43956,32791],{"class":264},[240,43958,43959],{"class":257},".b1",[240,43961,440],{"class":288},[240,43963,39955],{"class":257},[240,43965,43966,43968,43970,43972,43974,43976,43978,43980,43982,43984,43986,43988,43990,43992,43994,43996,43998,44000,44002,44004,44006],{"class":242,"line":9899},[240,43967,39960],{"class":257},[240,43969,32802],{"class":792},[240,43971,440],{"class":288},[240,43973,1643],{"class":264},[240,43975,2479],{"class":257},[240,43977,32811],{"class":792},[240,43979,440],{"class":288},[240,43981,2310],{"class":264},[240,43983,2479],{"class":257},[240,43985,32820],{"class":792},[240,43987,440],{"class":288},[240,43989,2470],{"class":264},[240,43991,2479],{"class":257},[240,43993,32875],{"class":792},[240,43995,440],{"class":288},[240,43997,1668],{"class":264},[240,43999,2479],{"class":257},[240,44001,32829],{"class":792},[240,44003,440],{"class":288},[240,44005,1692],{"class":264},[240,44007,39993],{"class":257},[240,44009,44010],{"class":242,"line":9923},[240,44011,39998],{"class":257},[240,44013,44014,44016,44018,44020,44022,44024,44026,44028,44030,44032,44034,44036,44038],{"class":242,"line":9928},[240,44015,40043],{"class":257},[240,44017,32820],{"class":792},[240,44019,440],{"class":288},[240,44021,1692],{"class":264},[240,44023,2479],{"class":257},[240,44025,32875],{"class":792},[240,44027,440],{"class":288},[240,44029,1668],{"class":264},[240,44031,2479],{"class":257},[240,44033,32829],{"class":792},[240,44035,440],{"class":288},[240,44037,1643],{"class":264},[240,44039,2129],{"class":257},[240,44041,44042],{"class":242,"line":9934},[240,44043,40072],{"class":257},[240,44045,44046,44048,44051,44053],{"class":242,"line":9961},[240,44047,32791],{"class":264},[240,44049,44050],{"class":257},".b2",[240,44052,440],{"class":288},[240,44054,39955],{"class":257},[240,44056,44057,44059,44061,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081],{"class":242,"line":9966},[240,44058,39960],{"class":257},[240,44060,32802],{"class":792},[240,44062,440],{"class":288},[240,44064,2310],{"class":264},[240,44066,2479],{"class":257},[240,44068,32811],{"class":792},[240,44070,440],{"class":288},[240,44072,2310],{"class":264},[240,44074,2479],{"class":257},[240,44076,32820],{"class":792},[240,44078,440],{"class":288},[240,44080,1643],{"class":264},[240,44082,39993],{"class":257},[240,44084,44085],{"class":242,"line":9972},[240,44086,39998],{"class":257},[240,44088,44089,44091,44093,44095,44097,44099,44101,44103,44106,44108,44110,44112,44114,44116,44118,44120,44122],{"class":242,"line":9984},[240,44090,39960],{"class":257},[240,44092,32802],{"class":792},[240,44094,440],{"class":288},[240,44096,2310],{"class":264},[240,44098,2479],{"class":257},[240,44100,32811],{"class":792},[240,44102,440],{"class":288},[240,44104,44105],{"class":264},"192",[240,44107,2479],{"class":257},[240,44109,32820],{"class":792},[240,44111,440],{"class":288},[240,44113,1692],{"class":264},[240,44115,2479],{"class":257},[240,44117,32829],{"class":792},[240,44119,440],{"class":288},[240,44121,1643],{"class":264},[240,44123,39993],{"class":257},[240,44125,44126],{"class":242,"line":9996},[240,44127,39998],{"class":257},[240,44129,44130,44132,44134,44136,44138,44140,44142,44144,44146,44148,44150,44152,44154],{"class":242,"line":10008},[240,44131,40043],{"class":257},[240,44133,32820],{"class":792},[240,44135,440],{"class":288},[240,44137,1692],{"class":264},[240,44139,2479],{"class":257},[240,44141,32875],{"class":792},[240,44143,440],{"class":288},[240,44145,1668],{"class":264},[240,44147,2479],{"class":257},[240,44149,32829],{"class":792},[240,44151,440],{"class":288},[240,44153,1643],{"class":264},[240,44155,2129],{"class":257},[240,44157,44158],{"class":242,"line":11667},[240,44159,40072],{"class":257},[240,44161,44162,44164,44167,44169],{"class":242,"line":11692},[240,44163,32791],{"class":264},[240,44165,44166],{"class":257},".b3",[240,44168,440],{"class":288},[240,44170,39955],{"class":257},[240,44172,44173,44176,44178,44180,44182,44185,44187,44189,44191,44194,44196,44198,44200,44203,44205],{"class":242,"line":11715},[240,44174,44175],{"class":257},"            Inception(",[240,44177,44105],{"class":264},[240,44179,2479],{"class":257},[240,44181,2310],{"class":264},[240,44183,44184],{"class":257},",(",[240,44186,2316],{"class":264},[240,44188,2479],{"class":257},[240,44190,34016],{"class":264},[240,44192,44193],{"class":257},"),(",[240,44195,2700],{"class":264},[240,44197,2479],{"class":257},[240,44199,2304],{"class":264},[240,44201,44202],{"class":257},"),",[240,44204,2304],{"class":264},[240,44206,39993],{"class":257},[240,44208,44209,44211,44213,44215,44217,44219,44221,44223,44225,44227,44229,44231,44233,44235,44237],{"class":242,"line":11739},[240,44210,44175],{"class":257},[240,44212,36816],{"class":264},[240,44214,2479],{"class":257},[240,44216,34016],{"class":264},[240,44218,44184],{"class":257},[240,44220,34016],{"class":264},[240,44222,2479],{"class":257},[240,44224,44105],{"class":264},[240,44226,44193],{"class":257},[240,44228,2304],{"class":264},[240,44230,2479],{"class":257},[240,44232,2316],{"class":264},[240,44234,44202],{"class":257},[240,44236,2310],{"class":264},[240,44238,39993],{"class":257},[240,44240,44241,44243,44245,44247,44249,44251,44253,44255,44257,44259,44261,44263,44265],{"class":242,"line":11744},[240,44242,40043],{"class":257},[240,44244,32820],{"class":792},[240,44246,440],{"class":288},[240,44248,1692],{"class":264},[240,44250,2479],{"class":257},[240,44252,32875],{"class":792},[240,44254,440],{"class":288},[240,44256,1668],{"class":264},[240,44258,2479],{"class":257},[240,44260,32829],{"class":792},[240,44262,440],{"class":288},[240,44264,1643],{"class":264},[240,44266,2129],{"class":257},[240,44268,44269],{"class":242,"line":11749},[240,44270,40072],{"class":257},[240,44272,44273,44275,44278,44280],{"class":242,"line":11754},[240,44274,32791],{"class":264},[240,44276,44277],{"class":257},".b4",[240,44279,440],{"class":288},[240,44281,39955],{"class":257},[240,44283,44284,44286,44289,44291,44293,44295,44297,44299,44302,44304,44306,44308,44310,44312,44314],{"class":242,"line":11763},[240,44285,44175],{"class":257},[240,44287,44288],{"class":264},"480",[240,44290,2479],{"class":257},[240,44292,44105],{"class":264},[240,44294,44184],{"class":257},[240,44296,2316],{"class":264},[240,44298,2479],{"class":257},[240,44300,44301],{"class":264},"208",[240,44303,44193],{"class":257},[240,44305,2700],{"class":264},[240,44307,2479],{"class":257},[240,44309,2706],{"class":264},[240,44311,44202],{"class":257},[240,44313,2310],{"class":264},[240,44315,39993],{"class":257},[240,44317,44318,44320,44322,44324,44326,44328,44330,44332,44334,44336,44338,44340,44342,44344,44346],{"class":242,"line":11768},[240,44319,44175],{"class":257},[240,44321,40403],{"class":264},[240,44323,2479],{"class":257},[240,44325,22995],{"class":264},[240,44327,44184],{"class":257},[240,44329,2716],{"class":264},[240,44331,2479],{"class":257},[240,44333,33447],{"class":264},[240,44335,44193],{"class":257},[240,44337,2897],{"class":264},[240,44339,2479],{"class":257},[240,44341,2310],{"class":264},[240,44343,44202],{"class":257},[240,44345,2310],{"class":264},[240,44347,39993],{"class":257},[240,44349,44350,44352,44354,44356,44358,44360,44362,44364,44366,44368,44370,44372,44374,44376,44378],{"class":242,"line":11774},[240,44351,44175],{"class":257},[240,44353,40403],{"class":264},[240,44355,2479],{"class":257},[240,44357,34016],{"class":264},[240,44359,44184],{"class":257},[240,44361,34016],{"class":264},[240,44363,2479],{"class":257},[240,44365,36816],{"class":264},[240,44367,44193],{"class":257},[240,44369,2897],{"class":264},[240,44371,2479],{"class":257},[240,44373,2310],{"class":264},[240,44375,44202],{"class":257},[240,44377,2310],{"class":264},[240,44379,39993],{"class":257},[240,44381,44382,44384,44386,44388,44390,44392,44394,44396,44399,44401,44403,44405,44407,44409,44411],{"class":242,"line":11795},[240,44383,44175],{"class":257},[240,44385,40403],{"class":264},[240,44387,2479],{"class":257},[240,44389,2716],{"class":264},[240,44391,44184],{"class":257},[240,44393,34016],{"class":264},[240,44395,2479],{"class":257},[240,44397,44398],{"class":264},"288",[240,44400,44193],{"class":257},[240,44402,2304],{"class":264},[240,44404,2479],{"class":257},[240,44406,2310],{"class":264},[240,44408,44202],{"class":257},[240,44410,2310],{"class":264},[240,44412,39993],{"class":257},[240,44414,44415,44417,44420,44422,44424,44426,44428,44430,44433,44435,44437,44439,44441,44443,44445],{"class":242,"line":11801},[240,44416,44175],{"class":257},[240,44418,44419],{"class":264},"528",[240,44421,2479],{"class":257},[240,44423,36816],{"class":264},[240,44425,44184],{"class":257},[240,44427,22995],{"class":264},[240,44429,2479],{"class":257},[240,44431,44432],{"class":264},"320",[240,44434,44193],{"class":257},[240,44436,2304],{"class":264},[240,44438,2479],{"class":257},[240,44440,34016],{"class":264},[240,44442,44202],{"class":257},[240,44444,34016],{"class":264},[240,44446,39993],{"class":257},[240,44448,44449,44451,44453,44455,44457,44459,44461,44463,44465,44467,44469,44471,44473],{"class":242,"line":11815},[240,44450,40043],{"class":257},[240,44452,32820],{"class":792},[240,44454,440],{"class":288},[240,44456,1692],{"class":264},[240,44458,2479],{"class":257},[240,44460,32875],{"class":792},[240,44462,440],{"class":288},[240,44464,1668],{"class":264},[240,44466,2479],{"class":257},[240,44468,32829],{"class":792},[240,44470,440],{"class":288},[240,44472,1643],{"class":264},[240,44474,2129],{"class":257},[240,44476,44477],{"class":242,"line":11821},[240,44478,40072],{"class":257},[240,44480,44481,44483,44486,44488],{"class":242,"line":11848},[240,44482,32791],{"class":264},[240,44484,44485],{"class":257},".b5",[240,44487,440],{"class":288},[240,44489,39955],{"class":257},[240,44491,44492,44494,44497,44499,44501,44503,44505,44507,44509,44511,44513,44515,44517,44519,44521],{"class":242,"line":11857},[240,44493,44175],{"class":257},[240,44495,44496],{"class":264},"832",[240,44498,2479],{"class":257},[240,44500,36816],{"class":264},[240,44502,44184],{"class":257},[240,44504,22995],{"class":264},[240,44506,2479],{"class":257},[240,44508,44432],{"class":264},[240,44510,44193],{"class":257},[240,44512,2304],{"class":264},[240,44514,2479],{"class":257},[240,44516,34016],{"class":264},[240,44518,44202],{"class":257},[240,44520,34016],{"class":264},[240,44522,39993],{"class":257},[240,44524,44525,44527,44529,44531,44533,44535,44537,44539,44541,44543,44545,44547,44549,44551,44553],{"class":242,"line":11863},[240,44526,44175],{"class":257},[240,44528,44496],{"class":264},[240,44530,2479],{"class":257},[240,44532,36886],{"class":264},[240,44534,44184],{"class":257},[240,44536,44105],{"class":264},[240,44538,2479],{"class":257},[240,44540,36886],{"class":264},[240,44542,44193],{"class":257},[240,44544,2706],{"class":264},[240,44546,2479],{"class":257},[240,44548,34016],{"class":264},[240,44550,44202],{"class":257},[240,44552,34016],{"class":264},[240,44554,39993],{"class":257},[240,44556,44557,44560,44562,44564,44566],{"class":242,"line":11871},[240,44558,44559],{"class":257},"            nn.AdaptiveAvgPool2d((",[240,44561,1643],{"class":264},[240,44563,2479],{"class":257},[240,44565,1643],{"class":264},[240,44567,44568],{"class":257},")),\n",[240,44570,44571],{"class":242,"line":11876},[240,44572,40736],{"class":257},[240,44574,44575,44577,44580,44582,44584],{"class":242,"line":18552},[240,44576,40741],{"class":257},[240,44578,44579],{"class":264},"1024",[240,44581,2479],{"class":257},[240,44583,2546],{"class":264},[240,44585,2129],{"class":257},[240,44587,44588],{"class":242,"line":18558},[240,44589,40072],{"class":257},[240,44591,44592],{"class":242,"line":18581},[240,44593,44594],{"class":246},"        # 对模型参数初始化\n",[240,44596,44597,44599,44601,44603,44605],{"class":242,"line":18587},[240,44598,5355],{"class":288},[240,44600,40814],{"class":257},[240,44602,27989],{"class":288},[240,44604,40819],{"class":264},[240,44606,40822],{"class":257},[240,44608,44609,44611,44613],{"class":242,"line":18610},[240,44610,6594],{"class":288},[240,44612,40834],{"class":264},[240,44614,40837],{"class":257},[240,44616,44617,44619,44622,44624,44627,44629,44631,44633,44635],{"class":242,"line":18624},[240,44618,40847],{"class":257},[240,44620,44621],{"class":792},"mode",[240,44623,440],{"class":288},[240,44625,44626],{"class":443},"'fan_out'",[240,44628,2479],{"class":257},[240,44630,40850],{"class":792},[240,44632,440],{"class":288},[240,44634,40855],{"class":443},[240,44636,2129],{"class":257},[240,44638,44639],{"class":242,"line":18644},[240,44640,44641],{"class":246},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[240,44643,44644],{"class":242,"line":18650},[240,44645,44646],{"class":246},"                # ② mode = 'fan_out'决定使用的fan值：\n",[240,44648,44649],{"class":242,"line":18661},[240,44650,44651],{"class":246},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[240,44653,44654],{"class":242,"line":18684},[240,44655,44656],{"class":246},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[240,44658,44659],{"class":242,"line":18706},[240,44660,44661],{"class":246},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[240,44663,44664],{"class":242,"line":18711},[240,44665,44666],{"class":246},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[240,44668,44669,44671,44673,44675,44677,44679],{"class":242,"line":18717},[240,44670,40867],{"class":288},[240,44672,40870],{"class":257},[240,44674,40873],{"class":288},[240,44676,40876],{"class":288},[240,44678,40879],{"class":264},[240,44680,5691],{"class":257},[240,44682,44683,44685,44687],{"class":242,"line":18731},[240,44684,40891],{"class":257},[240,44686,1274],{"class":264},[240,44688,2129],{"class":257},[240,44690,44691,44694,44696],{"class":242,"line":18744},[240,44692,44693],{"class":288},"                elif",[240,44695,40834],{"class":264},[240,44697,40910],{"class":257},[240,44699,44700,44703,44705,44707,44709],{"class":242,"line":18749},[240,44701,44702],{"class":257},"                    nn.init.normal_(m.weight,",[240,44704,1274],{"class":264},[240,44706,2479],{"class":257},[240,44708,40932],{"class":264},[240,44710,2129],{"class":257},[240,44712,44713,44716,44718,44720,44722,44724],{"class":242,"line":18763},[240,44714,44715],{"class":288},"                    if",[240,44717,40870],{"class":257},[240,44719,40873],{"class":288},[240,44721,40876],{"class":288},[240,44723,40879],{"class":264},[240,44725,5691],{"class":257},[240,44727,44728,44731,44733],{"class":242,"line":18768},[240,44729,44730],{"class":257},"                        nn.init.constant_(m.bias,",[240,44732,1274],{"class":264},[240,44734,2129],{"class":257},[240,44736,44737],{"class":242,"line":18774},[240,44738,37111],{"class":246},[240,44740,44741,44743,44745],{"class":242,"line":18779},[240,44742,32747],{"class":288},[240,44744,33039],{"class":436},[240,44746,33042],{"class":257},[240,44748,44749,44751,44753,44755],{"class":242,"line":18793},[240,44750,33047],{"class":257},[240,44752,440],{"class":288},[240,44754,32769],{"class":264},[240,44756,44757],{"class":257},".b1(x)\n",[240,44759,44760,44762,44764,44766],{"class":242,"line":18798},[240,44761,33047],{"class":257},[240,44763,440],{"class":288},[240,44765,32769],{"class":264},[240,44767,44768],{"class":257},".b2(x)\n",[240,44770,44771,44773,44775,44777],{"class":242,"line":18803},[240,44772,33047],{"class":257},[240,44774,440],{"class":288},[240,44776,32769],{"class":264},[240,44778,44779],{"class":257},".b3(x)\n",[240,44781,44782,44784,44786,44788],{"class":242,"line":18817},[240,44783,33047],{"class":257},[240,44785,440],{"class":288},[240,44787,32769],{"class":264},[240,44789,44790],{"class":257},".b4(x)\n",[240,44792,44793,44795,44797,44799],{"class":242,"line":18829},[240,44794,33047],{"class":257},[240,44796,440],{"class":288},[240,44798,32769],{"class":264},[240,44800,44801],{"class":257},".b5(x)\n",[240,44803,44804,44806],{"class":242,"line":18834},[240,44805,16701],{"class":288},[240,44807,33155],{"class":257},[240,44809,44810],{"class":242,"line":18847},[240,44811,4353],{"emptyLinePlaceholder":2051},[240,44813,44814],{"class":242,"line":18852},[240,44815,44816],{"class":246},"# 模型展示\n",[240,44818,44819,44821,44823,44825,44827],{"class":242,"line":18857},[240,44820,3489],{"class":288},[240,44822,33166],{"class":264},[240,44824,4901],{"class":288},[240,44826,33171],{"class":443},[240,44828,5691],{"class":257},[240,44830,44831,44833,44835,44837,44839,44841,44843,44845,44847],{"class":242,"line":18862},[240,44832,33183],{"class":257},[240,44834,440],{"class":288},[240,44836,32397],{"class":257},[240,44838,33190],{"class":443},[240,44840,3658],{"class":288},[240,44842,33195],{"class":257},[240,44844,3655],{"class":288},[240,44846,32422],{"class":443},[240,44848,2129],{"class":257},[240,44850,44851,44853,44855],{"class":242,"line":18875},[240,44852,33235],{"class":257},[240,44854,440],{"class":288},[240,44856,44857],{"class":257},"GoogLeNet(Inception).to(device)\n",[240,44859,44860,44862,44864,44866,44868,44870,44872,44874],{"class":242,"line":18880},[240,44861,33245],{"class":264},[240,44863,33248],{"class":257},[240,44865,1643],{"class":264},[240,44867,2479],{"class":257},[240,44869,33447],{"class":264},[240,44871,2479],{"class":257},[240,44873,33447],{"class":264},[240,44875,33261],{"class":257},[1826,44877,44878],{"start":250},[1829,44879,41129],{},[231,44881,44883],{"className":32324,"code":44882,"language":32326,"meta":236,"style":236},"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",[23,44884,44885,44891,44897,44907,44913,44923,44933,44943,44953,44963,44967,44978,44988,44992,44996,45000,45008,45020,45030,45046,45056,45088,45102,45112,45122,45126,45136,45150,45160,45170,45180,45186,45190,45194,45198,45202,45206,45214,45234,45238,45242,45246,45250,45254,45270,45274,45278,45286,45290,45294,45302,45306,45310,45314,45322,45326,45330,45334,45338,45346,45350,45358,45362,45370,45374,45382,45386,45394,45398,45402,45410,45414,45418,45422,45434,45458,45472,45476,45480,45484,45492,45496,45504,45508,45516,45520,45528,45532,45540,45544,45552,45556,45568,45572,45580,45584,45592,45596,45600,45604,45608,45616,45620,45636,45640,45648,45652,45656,45660,45664,45668,45672,45676,45692,45696,45708,45712,45724,45728,45740,45744,45752,45756,45764,45768,45772,45776,45782,45786,45794,45798,45814,45818,45826,45830,45846,45858,45862,45874,45878,45882,45890,45894,45898,45906,45910,45918,45922,45930,45934,45938,45980,46022,46026,46030,46046,46050,46066,46070,46074,46082,46086,46090,46102,46140,46144,46148,46156,46160,46174,46184,46190,46196,46202,46208,46212,46216,46222,46226,46230,46238,46242,46260,46264,46268,46272,46288,46292,46296,46300,46304,46308,46328,46348,46352,46356,46360,46368,46376,46380,46396,46416,46436,46440,46444,46452,46460,46464,46468,46472,46484,46488,46498,46506,46523],{"__ignoreMap":236},[240,44886,44887,44889],{"class":242,"line":243},[240,44888,32338],{"class":288},[240,44890,33768],{"class":257},[240,44892,44893,44895],{"class":242,"line":250},[240,44894,32338],{"class":288},[240,44896,33775],{"class":257},[240,44898,44899,44901,44903,44905],{"class":242,"line":261},[240,44900,32338],{"class":288},[240,44902,33786],{"class":257},[240,44904,33329],{"class":288},[240,44906,33791],{"class":257},[240,44908,44909,44911],{"class":242,"line":277},[240,44910,32338],{"class":288},[240,44912,32341],{"class":257},[240,44914,44915,44917,44919,44921],{"class":242,"line":294},[240,44916,32683],{"class":288},[240,44918,33361],{"class":257},[240,44920,32338],{"class":288},[240,44922,33808],{"class":257},[240,44924,44925,44927,44929,44931],{"class":242,"line":309},[240,44926,32683],{"class":288},[240,44928,33314],{"class":257},[240,44930,32338],{"class":288},[240,44932,33319],{"class":257},[240,44934,44935,44937,44939,44941],{"class":242,"line":529},[240,44936,32683],{"class":288},[240,44938,33344],{"class":257},[240,44940,32338],{"class":288},[240,44942,33349],{"class":257},[240,44944,44945,44947,44949,44951],{"class":242,"line":549},[240,44946,32338],{"class":288},[240,44948,33361],{"class":257},[240,44950,33329],{"class":288},[240,44952,33366],{"class":257},[240,44954,44955,44957,44959,44961],{"class":242,"line":569},[240,44956,32338],{"class":288},[240,44958,33378],{"class":257},[240,44960,33329],{"class":288},[240,44962,33383],{"class":257},[240,44964,44965],{"class":242,"line":589},[240,44966,33853],{"class":246},[240,44968,44969,44971,44973,44975],{"class":242,"line":715},[240,44970,32683],{"class":288},[240,44972,33860],{"class":257},[240,44974,32338],{"class":288},[240,44976,44977],{"class":257}," GoogLeNet, Inception\n",[240,44979,44980,44982,44984,44986],{"class":242,"line":727},[240,44981,32683],{"class":288},[240,44983,32686],{"class":257},[240,44985,32338],{"class":288},[240,44987,32691],{"class":257},[240,44989,44990],{"class":242,"line":1730},[240,44991,4353],{"emptyLinePlaceholder":2051},[240,44993,44994],{"class":242,"line":3582},[240,44995,4353],{"emptyLinePlaceholder":2051},[240,44997,44998],{"class":242,"line":3596},[240,44999,33888],{"class":246},[240,45001,45002,45004,45006],{"class":242,"line":3601},[240,45003,33893],{"class":288},[240,45005,33896],{"class":436},[240,45007,33899],{"class":257},[240,45009,45010,45012,45014,45016,45018],{"class":242,"line":3607},[240,45011,33904],{"class":257},[240,45013,440],{"class":288},[240,45015,33401],{"class":257},[240,45017,33409],{"class":443},[240,45019,33412],{"class":257},[240,45021,45022,45024,45026,45028],{"class":242,"line":3628},[240,45023,33917],{"class":792},[240,45025,440],{"class":288},[240,45027,33422],{"class":264},[240,45029,33412],{"class":257},[240,45031,45032,45034,45036,45038,45040,45042,45044],{"class":242,"line":3633},[240,45033,33928],{"class":792},[240,45035,440],{"class":288},[240,45037,33439],{"class":257},[240,45039,33442],{"class":792},[240,45041,440],{"class":288},[240,45043,37395],{"class":264},[240,45045,33450],{"class":257},[240,45047,45048,45050,45052,45054],{"class":242,"line":3647},[240,45049,33945],{"class":792},[240,45051,440],{"class":288},[240,45053,33422],{"class":264},[240,45055,2129],{"class":257},[240,45057,45058,45060,45062,45064,45066,45068,45070,45072,45074,45076,45078,45080,45082,45084,45086],{"class":242,"line":3652},[240,45059,33956],{"class":257},[240,45061,440],{"class":288},[240,45063,33961],{"class":257},[240,45065,33964],{"class":264},[240,45067,789],{"class":257},[240,45069,33969],{"class":264},[240,45071,2554],{"class":288},[240,45073,9309],{"class":264},[240,45075,33976],{"class":257},[240,45077,33964],{"class":264},[240,45079,789],{"class":257},[240,45081,33983],{"class":264},[240,45083,2554],{"class":288},[240,45085,9309],{"class":264},[240,45087,33990],{"class":257},[240,45089,45090,45092,45094,45096,45098,45100],{"class":242,"line":3681},[240,45091,33995],{"class":257},[240,45093,440],{"class":288},[240,45095,34000],{"class":257},[240,45097,33483],{"class":792},[240,45099,440],{"class":288},[240,45101,33488],{"class":257},[240,45103,45104,45106,45108,45110],{"class":242,"line":3686},[240,45105,34011],{"class":792},[240,45107,440],{"class":288},[240,45109,2304],{"class":264},[240,45111,33412],{"class":257},[240,45113,45114,45116,45118,45120],{"class":242,"line":3703},[240,45115,34023],{"class":792},[240,45117,440],{"class":288},[240,45119,33422],{"class":264},[240,45121,33412],{"class":257},[240,45123,45124],{"class":242,"line":3708},[240,45125,34034],{"class":246},[240,45127,45128,45130,45132,45134],{"class":242,"line":3713},[240,45129,34039],{"class":792},[240,45131,440],{"class":288},[240,45133,2496],{"class":264},[240,45135,2129],{"class":257},[240,45137,45138,45140,45142,45144,45146,45148],{"class":242,"line":3718},[240,45139,34050],{"class":257},[240,45141,440],{"class":288},[240,45143,33480],{"class":257},[240,45145,33483],{"class":792},[240,45147,440],{"class":288},[240,45149,34061],{"class":257},[240,45151,45152,45154,45156,45158],{"class":242,"line":3732},[240,45153,34066],{"class":792},[240,45155,440],{"class":288},[240,45157,2304],{"class":264},[240,45159,33412],{"class":257},[240,45161,45162,45164,45166,45168],{"class":242,"line":3737},[240,45163,34077],{"class":792},[240,45165,440],{"class":288},[240,45167,33422],{"class":264},[240,45169,33412],{"class":257},[240,45171,45172,45174,45176,45178],{"class":242,"line":4530},[240,45173,34088],{"class":792},[240,45175,440],{"class":288},[240,45177,2496],{"class":264},[240,45179,2129],{"class":257},[240,45181,45182,45184],{"class":242,"line":4544},[240,45183,6042],{"class":288},[240,45185,34101],{"class":257},[240,45187,45188],{"class":242,"line":4552},[240,45189,4353],{"emptyLinePlaceholder":2051},[240,45191,45192],{"class":242,"line":4557},[240,45193,34110],{"class":246},[240,45195,45196],{"class":242,"line":4563},[240,45197,34115],{"class":246},[240,45199,45200],{"class":242,"line":4569},[240,45201,4353],{"emptyLinePlaceholder":2051},[240,45203,45204],{"class":242,"line":4574},[240,45205,34124],{"class":246},[240,45207,45208,45210,45212],{"class":242,"line":9899},[240,45209,33893],{"class":288},[240,45211,34131],{"class":436},[240,45213,34134],{"class":257},[240,45215,45216,45218,45220,45222,45224,45226,45228,45230,45232],{"class":242,"line":9923},[240,45217,33183],{"class":257},[240,45219,440],{"class":288},[240,45221,32397],{"class":257},[240,45223,33190],{"class":443},[240,45225,3658],{"class":288},[240,45227,33195],{"class":257},[240,45229,3655],{"class":288},[240,45231,34153],{"class":443},[240,45233,2129],{"class":257},[240,45235,45236],{"class":242,"line":9928},[240,45237,4353],{"emptyLinePlaceholder":2051},[240,45239,45240],{"class":242,"line":9934},[240,45241,4353],{"emptyLinePlaceholder":2051},[240,45243,45244],{"class":242,"line":9961},[240,45245,34168],{"class":246},[240,45247,45248],{"class":242,"line":9966},[240,45249,34173],{"class":246},[240,45251,45252],{"class":242,"line":9972},[240,45253,34178],{"class":246},[240,45255,45256,45258,45260,45262,45264,45266,45268],{"class":242,"line":9984},[240,45257,34183],{"class":257},[240,45259,440],{"class":288},[240,45261,34188],{"class":257},[240,45263,34191],{"class":792},[240,45265,440],{"class":288},[240,45267,34196],{"class":264},[240,45269,2129],{"class":257},[240,45271,45272],{"class":242,"line":9996},[240,45273,4353],{"emptyLinePlaceholder":2051},[240,45275,45276],{"class":242,"line":10008},[240,45277,34207],{"class":246},[240,45279,45280,45282,45284],{"class":242,"line":11667},[240,45281,34212],{"class":257},[240,45283,440],{"class":288},[240,45285,34217],{"class":257},[240,45287,45288],{"class":242,"line":11692},[240,45289,4353],{"emptyLinePlaceholder":2051},[240,45291,45292],{"class":242,"line":11715},[240,45293,34226],{"class":246},[240,45295,45296,45298,45300],{"class":242,"line":11739},[240,45297,33235],{"class":257},[240,45299,440],{"class":288},[240,45301,34235],{"class":257},[240,45303,45304],{"class":242,"line":11744},[240,45305,34240],{"class":246},[240,45307,45308],{"class":242,"line":11749},[240,45309,34245],{"class":246},[240,45311,45312],{"class":242,"line":11754},[240,45313,34250],{"class":246},[240,45315,45316,45318,45320],{"class":242,"line":11763},[240,45317,34255],{"class":257},[240,45319,440],{"class":288},[240,45321,34260],{"class":257},[240,45323,45324],{"class":242,"line":11768},[240,45325,4353],{"emptyLinePlaceholder":2051},[240,45327,45328],{"class":242,"line":11774},[240,45329,4353],{"emptyLinePlaceholder":2051},[240,45331,45332],{"class":242,"line":11795},[240,45333,34273],{"class":246},[240,45335,45336],{"class":242,"line":11801},[240,45337,34278],{"class":246},[240,45339,45340,45342,45344],{"class":242,"line":11815},[240,45341,34283],{"class":257},[240,45343,440],{"class":288},[240,45345,34288],{"class":264},[240,45347,45348],{"class":242,"line":11821},[240,45349,34293],{"class":246},[240,45351,45352,45354,45356],{"class":242,"line":11848},[240,45353,34298],{"class":257},[240,45355,440],{"class":288},[240,45357,34303],{"class":257},[240,45359,45360],{"class":242,"line":11857},[240,45361,34308],{"class":246},[240,45363,45364,45366,45368],{"class":242,"line":11863},[240,45365,34313],{"class":257},[240,45367,440],{"class":288},[240,45369,34303],{"class":257},[240,45371,45372],{"class":242,"line":11871},[240,45373,34322],{"class":246},[240,45375,45376,45378,45380],{"class":242,"line":11876},[240,45377,34327],{"class":257},[240,45379,440],{"class":288},[240,45381,34303],{"class":257},[240,45383,45384],{"class":242,"line":18552},[240,45385,34336],{"class":246},[240,45387,45388,45390,45392],{"class":242,"line":18558},[240,45389,34341],{"class":257},[240,45391,440],{"class":288},[240,45393,34303],{"class":257},[240,45395,45396],{"class":242,"line":18581},[240,45397,4353],{"emptyLinePlaceholder":2051},[240,45399,45400],{"class":242,"line":18587},[240,45401,34354],{"class":246},[240,45403,45404,45406,45408],{"class":242,"line":18610},[240,45405,34359],{"class":257},[240,45407,440],{"class":288},[240,45409,34364],{"class":257},[240,45411,45412],{"class":242,"line":18624},[240,45413,4353],{"emptyLinePlaceholder":2051},[240,45415,45416],{"class":242,"line":18644},[240,45417,4353],{"emptyLinePlaceholder":2051},[240,45419,45420],{"class":242,"line":18650},[240,45421,34377],{"class":246},[240,45423,45424,45426,45428,45430,45432],{"class":242,"line":18661},[240,45425,5153],{"class":288},[240,45427,34384],{"class":257},[240,45429,27989],{"class":288},[240,45431,34389],{"class":264},[240,45433,34392],{"class":257},[240,45435,45436,45438,45440,45442,45444,45446,45448,45450,45452,45454,45456],{"class":242,"line":18684},[240,45437,34397],{"class":264},[240,45439,789],{"class":257},[240,45441,34402],{"class":443},[240,45443,34405],{"class":264},[240,45445,2683],{"class":443},[240,45447,34405],{"class":264},[240,45449,2355],{"class":443},[240,45451,34414],{"class":257},[240,45453,2631],{"class":288},[240,45455,1643],{"class":264},[240,45457,32443],{"class":257},[240,45459,45460,45462,45464,45466,45468,45470],{"class":242,"line":18706},[240,45461,34397],{"class":264},[240,45463,789],{"class":257},[240,45465,34429],{"class":443},[240,45467,2554],{"class":288},[240,45469,2546],{"class":264},[240,45471,2129],{"class":257},[240,45473,45474],{"class":242,"line":18711},[240,45475,4353],{"emptyLinePlaceholder":2051},[240,45477,45478],{"class":242,"line":18717},[240,45479,34444],{"class":246},[240,45481,45482],{"class":242,"line":18731},[240,45483,34449],{"class":246},[240,45485,45486,45488,45490],{"class":242,"line":18744},[240,45487,34454],{"class":257},[240,45489,440],{"class":288},[240,45491,34288],{"class":264},[240,45493,45494],{"class":242,"line":18749},[240,45495,34463],{"class":246},[240,45497,45498,45500,45502],{"class":242,"line":18763},[240,45499,34468],{"class":257},[240,45501,440],{"class":288},[240,45503,5037],{"class":264},[240,45505,45506],{"class":242,"line":18768},[240,45507,34477],{"class":246},[240,45509,45510,45512,45514],{"class":242,"line":18774},[240,45511,34482],{"class":257},[240,45513,440],{"class":288},[240,45515,34288],{"class":264},[240,45517,45518],{"class":242,"line":18779},[240,45519,34491],{"class":246},[240,45521,45522,45524,45526],{"class":242,"line":18793},[240,45523,34496],{"class":257},[240,45525,440],{"class":288},[240,45527,5037],{"class":264},[240,45529,45530],{"class":242,"line":18798},[240,45531,34505],{"class":246},[240,45533,45534,45536,45538],{"class":242,"line":18803},[240,45535,34510],{"class":257},[240,45537,440],{"class":288},[240,45539,5037],{"class":264},[240,45541,45542],{"class":242,"line":18817},[240,45543,34519],{"class":246},[240,45545,45546,45548,45550],{"class":242,"line":18829},[240,45547,34524],{"class":257},[240,45549,440],{"class":288},[240,45551,5037],{"class":264},[240,45553,45554],{"class":242,"line":18834},[240,45555,34533],{"class":246},[240,45557,45558,45560,45562,45564,45566],{"class":242,"line":18847},[240,45559,5355],{"class":288},[240,45561,33547],{"class":257},[240,45563,27989],{"class":288},[240,45565,33552],{"class":264},[240,45567,34546],{"class":257},[240,45569,45570],{"class":242,"line":18852},[240,45571,34551],{"class":246},[240,45573,45574,45576,45578],{"class":242,"line":18857},[240,45575,34556],{"class":257},[240,45577,440],{"class":288},[240,45579,34561],{"class":257},[240,45581,45582],{"class":242,"line":18862},[240,45583,34566],{"class":246},[240,45585,45586,45588,45590],{"class":242,"line":18875},[240,45587,34571],{"class":257},[240,45589,440],{"class":288},[240,45591,34576],{"class":257},[240,45593,45594],{"class":242,"line":18880},[240,45595,34582],{"class":246},[240,45597,45598],{"class":242,"line":34579},[240,45599,34588],{"class":257},[240,45601,45602],{"class":242,"line":34585},[240,45603,34594],{"class":246},[240,45605,45606],{"class":242,"line":34591},[240,45607,34600],{"class":246},[240,45609,45610,45612,45614],{"class":242,"line":34597},[240,45611,34606],{"class":257},[240,45613,440],{"class":288},[240,45615,34611],{"class":257},[240,45617,45618],{"class":242,"line":34603},[240,45619,34617],{"class":246},[240,45621,45622,45624,45626,45628,45630,45632,45634],{"class":242,"line":34614},[240,45623,34623],{"class":257},[240,45625,440],{"class":288},[240,45627,34628],{"class":257},[240,45629,34631],{"class":792},[240,45631,440],{"class":288},[240,45633,1643],{"class":264},[240,45635,2129],{"class":257},[240,45637,45638],{"class":242,"line":34620},[240,45639,34643],{"class":246},[240,45641,45642,45644,45646],{"class":242,"line":34640},[240,45643,34649],{"class":257},[240,45645,440],{"class":288},[240,45647,34654],{"class":257},[240,45649,45650],{"class":242,"line":34646},[240,45651,34660],{"class":246},[240,45653,45654],{"class":242,"line":34657},[240,45655,34666],{"class":257},[240,45657,45658],{"class":242,"line":34663},[240,45659,34672],{"class":246},[240,45661,45662],{"class":242,"line":34669},[240,45663,34678],{"class":257},[240,45665,45666],{"class":242,"line":34675},[240,45667,34684],{"class":246},[240,45669,45670],{"class":242,"line":34681},[240,45671,34690],{"class":257},[240,45673,45674],{"class":242,"line":34687},[240,45675,34696],{"class":246},[240,45677,45678,45680,45682,45684,45686,45688,45690],{"class":242,"line":34693},[240,45679,34702],{"class":257},[240,45681,11428],{"class":288},[240,45683,34707],{"class":257},[240,45685,2554],{"class":288},[240,45687,34712],{"class":257},[240,45689,1274],{"class":264},[240,45691,2129],{"class":257},[240,45693,45694],{"class":242,"line":34699},[240,45695,34722],{"class":246},[240,45697,45698,45700,45702,45704,45706],{"class":242,"line":34719},[240,45699,34728],{"class":257},[240,45701,11428],{"class":288},[240,45703,34733],{"class":257},[240,45705,4901],{"class":288},[240,45707,34738],{"class":257},[240,45709,45710],{"class":242,"line":34725},[240,45711,34744],{"class":246},[240,45713,45714,45716,45718,45720,45722],{"class":242,"line":34741},[240,45715,34750],{"class":257},[240,45717,11428],{"class":288},[240,45719,34712],{"class":257},[240,45721,1274],{"class":264},[240,45723,2129],{"class":257},[240,45725,45726],{"class":242,"line":34747},[240,45727,34764],{"class":246},[240,45729,45730,45732,45734,45736,45738],{"class":242,"line":34761},[240,45731,5355],{"class":288},[240,45733,34772],{"class":257},[240,45735,27989],{"class":288},[240,45737,33552],{"class":264},[240,45739,34779],{"class":257},[240,45741,45742],{"class":242,"line":34767},[240,45743,34785],{"class":246},[240,45745,45746,45748,45750],{"class":242,"line":34782},[240,45747,34556],{"class":257},[240,45749,440],{"class":288},[240,45751,34561],{"class":257},[240,45753,45754],{"class":242,"line":34788},[240,45755,34800],{"class":246},[240,45757,45758,45760,45762],{"class":242,"line":34797},[240,45759,34571],{"class":257},[240,45761,440],{"class":288},[240,45763,34576],{"class":257},[240,45765,45766],{"class":242,"line":34803},[240,45767,34815],{"class":246},[240,45769,45770],{"class":242,"line":34812},[240,45771,34821],{"class":257},[240,45773,45774],{"class":242,"line":34818},[240,45775,38302],{"class":246},[240,45777,45778,45780],{"class":242,"line":34824},[240,45779,34827],{"class":288},[240,45781,34830],{"class":257},[240,45783,45784],{"class":242,"line":34833},[240,45785,34836],{"class":246},[240,45787,45788,45790,45792],{"class":242,"line":34839},[240,45789,38317],{"class":257},[240,45791,440],{"class":288},[240,45793,34611],{"class":257},[240,45795,45796],{"class":242,"line":34850},[240,45797,34853],{"class":246},[240,45799,45800,45802,45804,45806,45808,45810,45812],{"class":242,"line":34856},[240,45801,38330],{"class":257},[240,45803,440],{"class":288},[240,45805,34628],{"class":257},[240,45807,34631],{"class":792},[240,45809,440],{"class":288},[240,45811,1643],{"class":264},[240,45813,2129],{"class":257},[240,45815,45816],{"class":242,"line":34875},[240,45817,34878],{"class":246},[240,45819,45820,45822,45824],{"class":242,"line":34881},[240,45821,38351],{"class":257},[240,45823,440],{"class":288},[240,45825,34654],{"class":257},[240,45827,45828],{"class":242,"line":34892},[240,45829,34895],{"class":246},[240,45831,45832,45834,45836,45838,45840,45842,45844],{"class":242,"line":34898},[240,45833,38364],{"class":257},[240,45835,11428],{"class":288},[240,45837,38369],{"class":257},[240,45839,2554],{"class":288},[240,45841,34712],{"class":257},[240,45843,1274],{"class":264},[240,45845,2129],{"class":257},[240,45847,45848,45850,45852,45854,45856],{"class":242,"line":34918},[240,45849,38382],{"class":257},[240,45851,11428],{"class":288},[240,45853,34733],{"class":257},[240,45855,4901],{"class":288},[240,45857,34738],{"class":257},[240,45859,45860],{"class":242,"line":34934},[240,45861,38395],{"class":246},[240,45863,45864,45866,45868,45870,45872],{"class":242,"line":34940},[240,45865,38400],{"class":257},[240,45867,11428],{"class":288},[240,45869,34712],{"class":257},[240,45871,1274],{"class":264},[240,45873,2129],{"class":257},[240,45875,45876],{"class":242,"line":34954},[240,45877,34957],{"class":246},[240,45879,45880],{"class":242,"line":34960},[240,45881,34963],{"class":246},[240,45883,45884,45886,45888],{"class":242,"line":34966},[240,45885,34969],{"class":257},[240,45887,2683],{"class":288},[240,45889,34974],{"class":257},[240,45891,45892],{"class":242,"line":34977},[240,45893,34980],{"class":246},[240,45895,45896],{"class":242,"line":34983},[240,45897,34986],{"class":246},[240,45899,45900,45902,45904],{"class":242,"line":34989},[240,45901,34992],{"class":257},[240,45903,2683],{"class":288},[240,45905,34974],{"class":257},[240,45907,45908],{"class":242,"line":34999},[240,45909,35002],{"class":246},[240,45911,45912,45914,45916],{"class":242,"line":35005},[240,45913,35008],{"class":257},[240,45915,2683],{"class":288},[240,45917,35013],{"class":257},[240,45919,45920],{"class":242,"line":35016},[240,45921,35019],{"class":246},[240,45923,45924,45926,45928],{"class":242,"line":35022},[240,45925,35025],{"class":257},[240,45927,2683],{"class":288},[240,45929,35013],{"class":257},[240,45931,45932],{"class":242,"line":35032},[240,45933,4353],{"emptyLinePlaceholder":2051},[240,45935,45936],{"class":242,"line":35037},[240,45937,35040],{"class":246},[240,45939,45940,45942,45944,45946,45948,45950,45952,45954,45956,45958,45960,45962,45964,45966,45968,45970,45972,45974,45976,45978],{"class":242,"line":35043},[240,45941,34397],{"class":264},[240,45943,789],{"class":257},[240,45945,5544],{"class":443},[240,45947,34405],{"class":264},[240,45949,35054],{"class":443},[240,45951,2991],{"class":264},[240,45953,35059],{"class":288},[240,45955,3040],{"class":264},[240,45957,35064],{"class":443},[240,45959,2991],{"class":264},[240,45961,35059],{"class":288},[240,45963,3040],{"class":264},[240,45965,5544],{"class":443},[240,45967,35075],{"class":257},[240,45969,2631],{"class":288},[240,45971,1643],{"class":264},[240,45973,35082],{"class":257},[240,45975,2631],{"class":288},[240,45977,1643],{"class":264},[240,45979,35089],{"class":257},[240,45981,45982,45984,45986,45988,45990,45992,45994,45996,45998,46000,46002,46004,46006,46008,46010,46012,46014,46016,46018,46020],{"class":242,"line":35092},[240,45983,34397],{"class":264},[240,45985,789],{"class":257},[240,45987,5544],{"class":443},[240,45989,34405],{"class":264},[240,45991,35103],{"class":443},[240,45993,2991],{"class":264},[240,45995,35059],{"class":288},[240,45997,3040],{"class":264},[240,45999,35112],{"class":443},[240,46001,2991],{"class":264},[240,46003,35059],{"class":288},[240,46005,3040],{"class":264},[240,46007,5544],{"class":443},[240,46009,35123],{"class":257},[240,46011,2631],{"class":288},[240,46013,1643],{"class":264},[240,46015,35130],{"class":257},[240,46017,2631],{"class":288},[240,46019,1643],{"class":264},[240,46021,35089],{"class":257},[240,46023,46024],{"class":242,"line":35139},[240,46025,4353],{"emptyLinePlaceholder":2051},[240,46027,46028],{"class":242,"line":35144},[240,46029,35147],{"class":246},[240,46031,46032,46034,46036,46038,46040,46042,46044],{"class":242,"line":35150},[240,46033,4450],{"class":288},[240,46035,35155],{"class":257},[240,46037,2631],{"class":288},[240,46039,1643],{"class":264},[240,46041,3034],{"class":257},[240,46043,3053],{"class":288},[240,46045,35166],{"class":257},[240,46047,46048],{"class":242,"line":35169},[240,46049,35172],{"class":246},[240,46051,46052,46054,46056,46058,46060,46062,46064],{"class":242,"line":35175},[240,46053,35178],{"class":257},[240,46055,2161],{"class":264},[240,46057,440],{"class":288},[240,46059,35185],{"class":257},[240,46061,2631],{"class":288},[240,46063,1643],{"class":264},[240,46065,35192],{"class":257},[240,46067,46068],{"class":242,"line":35195},[240,46069,35198],{"class":246},[240,46071,46072],{"class":242,"line":35201},[240,46073,35204],{"class":246},[240,46075,46076,46078,46080],{"class":242,"line":35207},[240,46077,35210],{"class":257},[240,46079,440],{"class":288},[240,46081,34260],{"class":257},[240,46083,46084],{"class":242,"line":35217},[240,46085,4353],{"emptyLinePlaceholder":2051},[240,46087,46088],{"class":242,"line":35222},[240,46089,35225],{"class":246},[240,46091,46092,46094,46096,46098,46100],{"class":242,"line":35228},[240,46093,35231],{"class":257},[240,46095,440],{"class":288},[240,46097,35236],{"class":257},[240,46099,2631],{"class":288},[240,46101,35241],{"class":257},[240,46103,46104,46106,46108,46110,46112,46114,46116,46118,46120,46122,46124,46126,46128,46130,46132,46134,46136,46138],{"class":242,"line":35244},[240,46105,34397],{"class":264},[240,46107,789],{"class":257},[240,46109,35251],{"class":443},[240,46111,2991],{"class":264},[240,46113,35256],{"class":288},[240,46115,3040],{"class":264},[240,46117,2643],{"class":443},[240,46119,2991],{"class":264},[240,46121,35256],{"class":288},[240,46123,3040],{"class":264},[240,46125,35269],{"class":443},[240,46127,35272],{"class":257},[240,46129,35275],{"class":288},[240,46131,3002],{"class":264},[240,46133,35280],{"class":257},[240,46135,2429],{"class":288},[240,46137,3002],{"class":264},[240,46139,32443],{"class":257},[240,46141,46142],{"class":242,"line":35289},[240,46143,38679],{"class":246},[240,46145,46146],{"class":242,"line":35295},[240,46147,38684],{"class":246},[240,46149,46150,46152,46154],{"class":242,"line":35301},[240,46151,38689],{"class":257},[240,46153,35313],{"class":443},[240,46155,2129],{"class":257},[240,46157,46158],{"class":242,"line":35307},[240,46159,35333],{"class":246},[240,46161,46162,46164,46166,46168,46170,46172],{"class":242,"line":35318},[240,46163,35339],{"class":257},[240,46165,440],{"class":288},[240,46167,35344],{"class":257},[240,46169,35347],{"class":792},[240,46171,440],{"class":288},[240,46173,3504],{"class":257},[240,46175,46176,46178,46180,46182],{"class":242,"line":35324},[240,46177,35357],{"class":443},[240,46179,2954],{"class":257},[240,46181,35362],{"class":264},[240,46183,35365],{"class":257},[240,46185,46186,46188],{"class":242,"line":35330},[240,46187,35371],{"class":443},[240,46189,35374],{"class":257},[240,46191,46192,46194],{"class":242,"line":35336},[240,46193,35380],{"class":443},[240,46195,35383],{"class":257},[240,46197,46198,46200],{"class":242,"line":35354},[240,46199,35389],{"class":443},[240,46201,35392],{"class":257},[240,46203,46204,46206],{"class":242,"line":35368},[240,46205,35398],{"class":443},[240,46207,35401],{"class":257},[240,46209,46210],{"class":242,"line":35377},[240,46211,35407],{"class":257},[240,46213,46214],{"class":242,"line":35386},[240,46215,35413],{"class":246},[240,46217,46218,46220],{"class":242,"line":35395},[240,46219,6042],{"class":288},[240,46221,35421],{"class":257},[240,46223,46224],{"class":242,"line":35404},[240,46225,4353],{"emptyLinePlaceholder":2051},[240,46227,46228],{"class":242,"line":35410},[240,46229,35432],{"class":246},[240,46231,46232,46234,46236],{"class":242,"line":35416},[240,46233,33893],{"class":288},[240,46235,35440],{"class":436},[240,46237,35443],{"class":257},[240,46239,46240],{"class":242,"line":35424},[240,46241,35449],{"class":246},[240,46243,46244,46246,46248,46250,46252,46254,46256,46258],{"class":242,"line":35429},[240,46245,35455],{"class":257},[240,46247,33639],{"class":792},[240,46249,440],{"class":288},[240,46251,789],{"class":257},[240,46253,2597],{"class":264},[240,46255,2479],{"class":257},[240,46257,1716],{"class":264},[240,46259,32443],{"class":257},[240,46261,46262],{"class":242,"line":35435},[240,46263,35475],{"class":246},[240,46265,46266],{"class":242,"line":35446},[240,46267,35481],{"class":246},[240,46269,46270],{"class":242,"line":35452},[240,46271,35487],{"class":246},[240,46273,46274,46276,46278,46280,46282,46284,46286],{"class":242,"line":35472},[240,46275,33673],{"class":257},[240,46277,1643],{"class":264},[240,46279,2479],{"class":257},[240,46281,1668],{"class":264},[240,46283,2479],{"class":257},[240,46285,1643],{"class":264},[240,46287,2129],{"class":257},[240,46289,46290],{"class":242,"line":35478},[240,46291,35510],{"class":246},[240,46293,46294],{"class":242,"line":35484},[240,46295,35516],{"class":246},[240,46297,46298],{"class":242,"line":35490},[240,46299,35522],{"class":246},[240,46301,46302],{"class":242,"line":35507},[240,46303,35528],{"class":246},[240,46305,46306],{"class":242,"line":35513},[240,46307,35534],{"class":246},[240,46309,46310,46312,46314,46316,46318,46320,46322,46324,46326],{"class":242,"line":35519},[240,46311,35540],{"class":257},[240,46313,35543],{"class":443},[240,46315,35546],{"class":257},[240,46317,35549],{"class":443},[240,46319,2479],{"class":257},[240,46321,35554],{"class":792},[240,46323,440],{"class":288},[240,46325,35559],{"class":443},[240,46327,2129],{"class":257},[240,46329,46330,46332,46334,46336,46338,46340,46342,46344,46346],{"class":242,"line":35525},[240,46331,35540],{"class":257},[240,46333,35543],{"class":443},[240,46335,35571],{"class":257},[240,46337,35574],{"class":443},[240,46339,2479],{"class":257},[240,46341,35554],{"class":792},[240,46343,440],{"class":288},[240,46345,35583],{"class":443},[240,46347,2129],{"class":257},[240,46349,46350],{"class":242,"line":35531},[240,46351,35591],{"class":246},[240,46353,46354],{"class":242,"line":35537},[240,46355,35597],{"class":257},[240,46357,46358],{"class":242,"line":35564},[240,46359,35603],{"class":246},[240,46361,46362,46364,46366],{"class":242,"line":35588},[240,46363,35609],{"class":257},[240,46365,35612],{"class":443},[240,46367,2129],{"class":257},[240,46369,46370,46372,46374],{"class":242,"line":35594},[240,46371,35620],{"class":257},[240,46373,35623],{"class":443},[240,46375,2129],{"class":257},[240,46377,46378],{"class":242,"line":35600},[240,46379,35631],{"class":246},[240,46381,46382,46384,46386,46388,46390,46392,46394],{"class":242,"line":35606},[240,46383,33673],{"class":257},[240,46385,1643],{"class":264},[240,46387,2479],{"class":257},[240,46389,1668],{"class":264},[240,46391,2479],{"class":257},[240,46393,1668],{"class":264},[240,46395,2129],{"class":257},[240,46397,46398,46400,46402,46404,46406,46408,46410,46412,46414],{"class":242,"line":35617},[240,46399,35540],{"class":257},[240,46401,35543],{"class":443},[240,46403,35658],{"class":257},[240,46405,35549],{"class":443},[240,46407,2479],{"class":257},[240,46409,35554],{"class":792},[240,46411,440],{"class":288},[240,46413,35669],{"class":443},[240,46415,2129],{"class":257},[240,46417,46418,46420,46422,46424,46426,46428,46430,46432,46434],{"class":242,"line":35628},[240,46419,35540],{"class":257},[240,46421,35543],{"class":443},[240,46423,35681],{"class":257},[240,46425,35574],{"class":443},[240,46427,2479],{"class":257},[240,46429,35554],{"class":792},[240,46431,440],{"class":288},[240,46433,35692],{"class":443},[240,46435,2129],{"class":257},[240,46437,46438],{"class":242,"line":35634},[240,46439,35700],{"class":246},[240,46441,46442],{"class":242,"line":35651},[240,46443,35597],{"class":257},[240,46445,46446,46448,46450],{"class":242,"line":35674},[240,46447,35609],{"class":257},[240,46449,35543],{"class":443},[240,46451,2129],{"class":257},[240,46453,46454,46456,46458],{"class":242,"line":35697},[240,46455,35620],{"class":257},[240,46457,35722],{"class":443},[240,46459,2129],{"class":257},[240,46461,46462],{"class":242,"line":35703},[240,46463,35730],{"class":257},[240,46465,46466],{"class":242,"line":35708},[240,46467,4353],{"emptyLinePlaceholder":2051},[240,46469,46470],{"class":242,"line":35717},[240,46471,35741],{"class":246},[240,46473,46474,46476,46478,46480,46482],{"class":242,"line":35727},[240,46475,3489],{"class":288},[240,46477,33166],{"class":264},[240,46479,4901],{"class":288},[240,46481,33171],{"class":443},[240,46483,5691],{"class":257},[240,46485,46486],{"class":242,"line":35733},[240,46487,35760],{"class":246},[240,46489,46490,46493,46495],{"class":242,"line":35738},[240,46491,46492],{"class":257},"    GoogLeNet",[240,46494,440],{"class":288},[240,46496,46497],{"class":257},"GoogLeNet(Inception)\n",[240,46499,46500,46502,46504],{"class":242,"line":35744},[240,46501,35777],{"class":257},[240,46503,440],{"class":288},[240,46505,35782],{"class":257},[240,46507,46508,46510,46512,46515,46517,46519,46521],{"class":242,"line":35757},[240,46509,35339],{"class":257},[240,46511,440],{"class":288},[240,46513,46514],{"class":257},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[240,46516,35795],{"class":792},[240,46518,440],{"class":288},[240,46520,399],{"class":264},[240,46522,2129],{"class":257},[240,46524,46525],{"class":242,"line":35763},[240,46526,35807],{"class":257},[1826,46528,46529],{"start":261},[1829,46530,42520],{},[231,46532,46534],{"className":32324,"code":46533,"language":32326,"meta":236,"style":236},"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",[23,46535,46536,46542,46552,46562,46566,46576,46587,46591,46595,46599,46607,46623,46633,46649,46659,46673,46677,46687,46697,46707,46713,46717,46721,46729,46733,46749,46757,46761,46765,46773,46781,46785,46789,46793,46797,46803,46807,46817,46825,46833,46837,46841,46845,46853,46857,46873,46877,46881,46885,46897,46901,46913,46917,46921,46933,46937,46947,46951,46955,46967,46971,46979,46983,46987,46995,46999,47007,47011,47015,47019,47023,47027,47043,47051,47055,47059,47107,47113,47117,47127,47135,47143,47147,47151,47155,47159,47167,47171,47187,47191,47199,47207],{"__ignoreMap":236},[240,46537,46538,46540],{"class":242,"line":243},[240,46539,32338],{"class":288},[240,46541,32341],{"class":257},[240,46543,46544,46546,46548,46550],{"class":242,"line":250},[240,46545,32338],{"class":288},[240,46547,33361],{"class":257},[240,46549,33329],{"class":288},[240,46551,33366],{"class":257},[240,46553,46554,46556,46558,46560],{"class":242,"line":261},[240,46555,32683],{"class":288},[240,46557,33344],{"class":257},[240,46559,32338],{"class":288},[240,46561,33349],{"class":257},[240,46563,46564],{"class":242,"line":277},[240,46565,35868],{"class":246},[240,46567,46568,46570,46572,46574],{"class":242,"line":294},[240,46569,32683],{"class":288},[240,46571,33314],{"class":257},[240,46573,32338],{"class":288},[240,46575,33319],{"class":257},[240,46577,46578,46580,46582,46584],{"class":242,"line":309},[240,46579,32683],{"class":288},[240,46581,33860],{"class":257},[240,46583,32338],{"class":288},[240,46585,46586],{"class":257}," GoogLeNet,Inception\n",[240,46588,46589],{"class":242,"line":529},[240,46590,4353],{"emptyLinePlaceholder":2051},[240,46592,46593],{"class":242,"line":549},[240,46594,4353],{"emptyLinePlaceholder":2051},[240,46596,46597],{"class":242,"line":569},[240,46598,35897],{"class":246},[240,46600,46601,46603,46605],{"class":242,"line":589},[240,46602,33893],{"class":288},[240,46604,35904],{"class":436},[240,46606,33899],{"class":257},[240,46608,46609,46611,46613,46615,46617,46619,46621],{"class":242,"line":715},[240,46610,35911],{"class":257},[240,46612,440],{"class":288},[240,46614,33401],{"class":257},[240,46616,33404],{"class":792},[240,46618,440],{"class":288},[240,46620,33409],{"class":443},[240,46622,33412],{"class":257},[240,46624,46625,46627,46629,46631],{"class":242,"line":727},[240,46626,35928],{"class":792},[240,46628,440],{"class":288},[240,46630,35933],{"class":264},[240,46632,33412],{"class":257},[240,46634,46635,46637,46639,46641,46643,46645,46647],{"class":242,"line":1730},[240,46636,35940],{"class":792},[240,46638,440],{"class":288},[240,46640,33439],{"class":257},[240,46642,33442],{"class":792},[240,46644,440],{"class":288},[240,46646,37395],{"class":264},[240,46648,33450],{"class":257},[240,46650,46651,46653,46655,46657],{"class":242,"line":3582},[240,46652,35957],{"class":792},[240,46654,440],{"class":288},[240,46656,33422],{"class":264},[240,46658,2129],{"class":257},[240,46660,46661,46663,46665,46667,46669,46671],{"class":242,"line":3596},[240,46662,35968],{"class":257},[240,46664,440],{"class":288},[240,46666,33480],{"class":257},[240,46668,33483],{"class":792},[240,46670,440],{"class":288},[240,46672,35979],{"class":257},[240,46674,46675],{"class":242,"line":3601},[240,46676,35984],{"class":246},[240,46678,46679,46681,46683,46685],{"class":242,"line":3607},[240,46680,35989],{"class":792},[240,46682,440],{"class":288},[240,46684,1643],{"class":264},[240,46686,33412],{"class":257},[240,46688,46689,46691,46693,46695],{"class":242,"line":3628},[240,46690,36000],{"class":792},[240,46692,440],{"class":288},[240,46694,33422],{"class":264},[240,46696,33412],{"class":257},[240,46698,46699,46701,46703,46705],{"class":242,"line":3633},[240,46700,36011],{"class":792},[240,46702,440],{"class":288},[240,46704,1274],{"class":264},[240,46706,2129],{"class":257},[240,46708,46709,46711],{"class":242,"line":3647},[240,46710,6042],{"class":288},[240,46712,36024],{"class":257},[240,46714,46715],{"class":242,"line":3652},[240,46716,4353],{"emptyLinePlaceholder":2051},[240,46718,46719],{"class":242,"line":3681},[240,46720,36033],{"class":246},[240,46722,46723,46725,46727],{"class":242,"line":3686},[240,46724,33893],{"class":288},[240,46726,36040],{"class":436},[240,46728,36043],{"class":257},[240,46730,46731],{"class":242,"line":3703},[240,46732,36048],{"class":246},[240,46734,46735,46737,46739,46741,46743,46745,46747],{"class":242,"line":3708},[240,46736,33183],{"class":257},[240,46738,440],{"class":288},[240,46740,33190],{"class":443},[240,46742,3658],{"class":288},[240,46744,33195],{"class":257},[240,46746,3655],{"class":288},[240,46748,36065],{"class":443},[240,46750,46751,46753,46755],{"class":242,"line":3713},[240,46752,33235],{"class":257},[240,46754,440],{"class":288},[240,46756,34235],{"class":257},[240,46758,46759],{"class":242,"line":3718},[240,46760,4353],{"emptyLinePlaceholder":2051},[240,46762,46763],{"class":242,"line":3732},[240,46764,36082],{"class":246},[240,46766,46767,46769,46771],{"class":242,"line":3737},[240,46768,36087],{"class":257},[240,46770,440],{"class":288},[240,46772,34288],{"class":264},[240,46774,46775,46777,46779],{"class":242,"line":4530},[240,46776,36096],{"class":257},[240,46778,440],{"class":288},[240,46780,5037],{"class":264},[240,46782,46783],{"class":242,"line":4544},[240,46784,4353],{"emptyLinePlaceholder":2051},[240,46786,46787],{"class":242,"line":4552},[240,46788,36109],{"class":246},[240,46790,46791],{"class":242,"line":4557},[240,46792,36114],{"class":246},[240,46794,46795],{"class":242,"line":4563},[240,46796,36119],{"class":246},[240,46798,46799,46801],{"class":242,"line":4569},[240,46800,36124],{"class":288},[240,46802,34830],{"class":257},[240,46804,46805],{"class":242,"line":4574},[240,46806,36131],{"class":246},[240,46808,46809,46811,46813,46815],{"class":242,"line":9899},[240,46810,5355],{"class":288},[240,46812,36138],{"class":257},[240,46814,27989],{"class":288},[240,46816,36143],{"class":257},[240,46818,46819,46821,46823],{"class":242,"line":9923},[240,46820,36148],{"class":257},[240,46822,440],{"class":288},[240,46824,36153],{"class":257},[240,46826,46827,46829,46831],{"class":242,"line":9928},[240,46828,36158],{"class":257},[240,46830,440],{"class":288},[240,46832,36163],{"class":257},[240,46834,46835],{"class":242,"line":9934},[240,46836,36168],{"class":246},[240,46838,46839],{"class":242,"line":9961},[240,46840,34821],{"class":257},[240,46842,46843],{"class":242,"line":9966},[240,46844,36177],{"class":246},[240,46846,46847,46849,46851],{"class":242,"line":9972},[240,46848,34606],{"class":257},[240,46850,440],{"class":288},[240,46852,36186],{"class":257},[240,46854,46855],{"class":242,"line":9984},[240,46856,36191],{"class":246},[240,46858,46859,46861,46863,46865,46867,46869,46871],{"class":242,"line":9996},[240,46860,34623],{"class":257},[240,46862,440],{"class":288},[240,46864,34628],{"class":257},[240,46866,34631],{"class":792},[240,46868,440],{"class":288},[240,46870,1643],{"class":264},[240,46872,2129],{"class":257},[240,46874,46875],{"class":242,"line":10008},[240,46876,36212],{"class":246},[240,46878,46879],{"class":242,"line":11667},[240,46880,36217],{"class":246},[240,46882,46883],{"class":242,"line":11692},[240,46884,36222],{"class":246},[240,46886,46887,46889,46891,46893,46895],{"class":242,"line":11715},[240,46888,36227],{"class":257},[240,46890,11428],{"class":288},[240,46892,34733],{"class":257},[240,46894,4901],{"class":288},[240,46896,36236],{"class":257},[240,46898,46899],{"class":242,"line":11739},[240,46900,36241],{"class":246},[240,46902,46903,46905,46907,46909,46911],{"class":242,"line":11744},[240,46904,36246],{"class":257},[240,46906,11428],{"class":288},[240,46908,36251],{"class":257},[240,46910,1274],{"class":264},[240,46912,2129],{"class":257},[240,46914,46915],{"class":242,"line":11749},[240,46916,4353],{"emptyLinePlaceholder":2051},[240,46918,46919],{"class":242,"line":11754},[240,46920,36264],{"class":246},[240,46922,46923,46925,46927,46929,46931],{"class":242,"line":11763},[240,46924,36269],{"class":257},[240,46926,440],{"class":288},[240,46928,36274],{"class":257},[240,46930,2683],{"class":288},[240,46932,36279],{"class":257},[240,46934,46935],{"class":242,"line":11768},[240,46936,36284],{"class":246},[240,46938,46939,46941,46943,46945],{"class":242,"line":11774},[240,46940,34397],{"class":264},[240,46942,789],{"class":257},[240,46944,36293],{"class":443},[240,46946,36296],{"class":257},[240,46948,46949],{"class":242,"line":11795},[240,46950,4353],{"emptyLinePlaceholder":2051},[240,46952,46953],{"class":242,"line":11801},[240,46954,36305],{"class":246},[240,46956,46957,46959,46961,46963,46965],{"class":242,"line":11815},[240,46958,3489],{"class":288},[240,46960,33166],{"class":264},[240,46962,4901],{"class":288},[240,46964,33171],{"class":443},[240,46966,5691],{"class":257},[240,46968,46969],{"class":242,"line":11821},[240,46970,36322],{"class":246},[240,46972,46973,46975,46977],{"class":242,"line":11848},[240,46974,33235],{"class":257},[240,46976,440],{"class":288},[240,46978,46497],{"class":257},[240,46980,46981],{"class":242,"line":11857},[240,46982,36335],{"class":246},[240,46984,46985],{"class":242,"line":11863},[240,46986,36340],{"class":246},[240,46988,46989,46991,46993],{"class":242,"line":11871},[240,46990,36345],{"class":257},[240,46992,36348],{"class":443},[240,46994,32443],{"class":257},[240,46996,46997],{"class":242,"line":11876},[240,46998,36355],{"class":246},[240,47000,47001,47003,47005],{"class":242,"line":18552},[240,47002,35968],{"class":257},[240,47004,440],{"class":288},[240,47006,36364],{"class":257},[240,47008,47009],{"class":242,"line":18558},[240,47010,36369],{"class":246},[240,47012,47013],{"class":242,"line":18581},[240,47014,36374],{"class":257},[240,47016,47017],{"class":242,"line":18587},[240,47018,4353],{"emptyLinePlaceholder":2051},[240,47020,47021],{"class":242,"line":18610},[240,47022,36383],{"class":246},[240,47024,47025],{"class":242,"line":18624},[240,47026,36388],{"class":246},[240,47028,47029,47031,47033,47035,47037,47039,47041],{"class":242,"line":18644},[240,47030,33183],{"class":257},[240,47032,440],{"class":288},[240,47034,33190],{"class":443},[240,47036,3658],{"class":288},[240,47038,33195],{"class":257},[240,47040,3655],{"class":288},[240,47042,36065],{"class":443},[240,47044,47045,47047,47049],{"class":242,"line":18650},[240,47046,33235],{"class":257},[240,47048,440],{"class":288},[240,47050,34235],{"class":257},[240,47052,47053],{"class":242,"line":18661},[240,47054,36417],{"class":246},[240,47056,47057],{"class":242,"line":18684},[240,47058,36422],{"class":246},[240,47060,47061,47063,47065,47067,47069,47071,47073,47075,47077,47079,47081,47083,47085,47087,47089,47091,47093,47095,47097,47099,47101,47103,47105],{"class":242,"line":18706},[240,47062,36427],{"class":257},[240,47064,440],{"class":288},[240,47066,2985],{"class":257},[240,47068,36434],{"class":443},[240,47070,2479],{"class":257},[240,47072,36439],{"class":443},[240,47074,2479],{"class":257},[240,47076,36444],{"class":443},[240,47078,2479],{"class":257},[240,47080,36449],{"class":443},[240,47082,2479],{"class":257},[240,47084,36454],{"class":443},[240,47086,2479],{"class":257},[240,47088,36459],{"class":443},[240,47090,2479],{"class":257},[240,47092,36464],{"class":443},[240,47094,2479],{"class":257},[240,47096,36469],{"class":443},[240,47098,2479],{"class":257},[240,47100,36474],{"class":443},[240,47102,2479],{"class":257},[240,47104,36479],{"class":443},[240,47106,35192],{"class":257},[240,47108,47109,47111],{"class":242,"line":18711},[240,47110,36124],{"class":288},[240,47112,34830],{"class":257},[240,47114,47115],{"class":242,"line":18717},[240,47116,36492],{"class":246},[240,47118,47119,47121,47123,47125],{"class":242,"line":18731},[240,47120,5355],{"class":288},[240,47122,36499],{"class":257},[240,47124,27989],{"class":288},[240,47126,36143],{"class":257},[240,47128,47129,47131,47133],{"class":242,"line":18744},[240,47130,34556],{"class":257},[240,47132,440],{"class":288},[240,47134,34561],{"class":257},[240,47136,47137,47139,47141],{"class":242,"line":18749},[240,47138,34571],{"class":257},[240,47140,440],{"class":288},[240,47142,34576],{"class":257},[240,47144,47145],{"class":242,"line":18763},[240,47146,4353],{"emptyLinePlaceholder":2051},[240,47148,47149],{"class":242,"line":18768},[240,47150,36528],{"class":246},[240,47152,47153],{"class":242,"line":18774},[240,47154,34821],{"class":257},[240,47156,47157],{"class":242,"line":18779},[240,47158,36537],{"class":246},[240,47160,47161,47163,47165],{"class":242,"line":18793},[240,47162,34606],{"class":257},[240,47164,440],{"class":288},[240,47166,34611],{"class":257},[240,47168,47169],{"class":242,"line":18798},[240,47170,36550],{"class":246},[240,47172,47173,47175,47177,47179,47181,47183,47185],{"class":242,"line":18803},[240,47174,34623],{"class":257},[240,47176,440],{"class":288},[240,47178,34628],{"class":257},[240,47180,34631],{"class":792},[240,47182,440],{"class":288},[240,47184,1643],{"class":264},[240,47186,2129],{"class":257},[240,47188,47189],{"class":242,"line":18817},[240,47190,36571],{"class":246},[240,47192,47193,47195,47197],{"class":242,"line":18829},[240,47194,36576],{"class":257},[240,47196,440],{"class":288},[240,47198,36581],{"class":257},[240,47200,47201,47203,47205],{"class":242,"line":18834},[240,47202,36586],{"class":257},[240,47204,440],{"class":288},[240,47206,36591],{"class":257},[240,47208,47209,47211,47213,47215,47217,47219,47221,47223],{"class":242,"line":18847},[240,47210,36596],{"class":264},[240,47212,789],{"class":257},[240,47214,36601],{"class":443},[240,47216,36604],{"class":257},[240,47218,36607],{"class":443},[240,47220,2479],{"class":257},[240,47222,36612],{"class":443},[240,47224,36615],{"class":257},[32,47226,47228],{"id":47227},"_24训练自己的数据集","2.4.训练自己的数据集",[19,47230,47231],{},"猫狗分类任务",[19,47233,47234],{},"划分数据集和验证集",[231,47236,47238],{"className":32324,"code":47237,"language":32326,"meta":236,"style":236},"# 创建脚本，用于划分数据集和验证集\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",[23,47239,47240,47245,47252,47257,47268,47275,47279,47289,47303,47312,47316,47321,47331,47351,47355,47360,47370,47381,47394,47398,47403,47412,47422,47433,47437,47442,47452,47456,47461,47466,47471,47476,47481,47485,47495,47522,47535,47547,47574,47579,47584,47598,47603,47615,47630,47645,47653,47657,47662,47668,47680,47693,47698,47703,47708,47758,47764,47768],{"__ignoreMap":236},[240,47241,47242],{"class":242,"line":243},[240,47243,47244],{"class":246},"# 创建脚本，用于划分数据集和验证集\n",[240,47246,47247,47249],{"class":242,"line":250},[240,47248,32338],{"class":288},[240,47250,47251],{"class":257}," os\n",[240,47253,47254],{"class":242,"line":261},[240,47255,47256],{"class":246},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[240,47258,47259,47261,47264,47266],{"class":242,"line":277},[240,47260,32683],{"class":288},[240,47262,47263],{"class":257}," shutil ",[240,47265,32338],{"class":288},[240,47267,33768],{"class":257},[240,47269,47270,47272],{"class":242,"line":294},[240,47271,32338],{"class":288},[240,47273,47274],{"class":257}," random\n",[240,47276,47277],{"class":242,"line":309},[240,47278,4353],{"emptyLinePlaceholder":2051},[240,47280,47281,47283,47286],{"class":242,"line":529},[240,47282,33893],{"class":288},[240,47284,47285],{"class":436}," mkfile",[240,47287,47288],{"class":257},"(file):\n",[240,47290,47291,47293,47295,47298,47301],{"class":242,"line":549},[240,47292,5053],{"class":288},[240,47294,40876],{"class":288},[240,47296,47297],{"class":257}," os.path.exists(",[240,47299,47300],{"class":792},"file",[240,47302,32732],{"class":257},[240,47304,47305,47308,47310],{"class":242,"line":569},[240,47306,47307],{"class":257},"        os.makedirs(",[240,47309,47300],{"class":792},[240,47311,2129],{"class":257},[240,47313,47314],{"class":242,"line":589},[240,47315,4353],{"emptyLinePlaceholder":2051},[240,47317,47318],{"class":242,"line":715},[240,47319,47320],{"class":246},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[240,47322,47323,47326,47328],{"class":242,"line":727},[240,47324,47325],{"class":257},"file_path",[240,47327,440],{"class":288},[240,47329,47330],{"class":443},"'data_cat_dog'\n",[240,47332,47333,47336,47338,47341,47343,47346,47348],{"class":242,"line":1730},[240,47334,47335],{"class":257},"flower_class",[240,47337,440],{"class":288},[240,47339,47340],{"class":257},"[cla ",[240,47342,4977],{"class":288},[240,47344,47345],{"class":257}," cla ",[240,47347,27989],{"class":288},[240,47349,47350],{"class":257}," os.listdir(file_path)]\n",[240,47352,47353],{"class":242,"line":3582},[240,47354,4353],{"emptyLinePlaceholder":2051},[240,47356,47357],{"class":242,"line":3596},[240,47358,47359],{"class":246},"# 创建训练集train文件夹\n",[240,47361,47362,47365,47368],{"class":242,"line":3601},[240,47363,47364],{"class":257},"mkfile(",[240,47366,47367],{"class":443},"'data\u002Ftrain'",[240,47369,2129],{"class":257},[240,47371,47372,47374,47376,47378],{"class":242,"line":3607},[240,47373,4977],{"class":288},[240,47375,47345],{"class":257},[240,47377,27989],{"class":288},[240,47379,47380],{"class":257}," flower_class:\n",[240,47382,47383,47386,47389,47391],{"class":242,"line":3628},[240,47384,47385],{"class":257},"    mkfile(",[240,47387,47388],{"class":443},"'data\u002Ftrain\u002F'",[240,47390,2580],{"class":288},[240,47392,47393],{"class":257},"cla)\n",[240,47395,47396],{"class":242,"line":3633},[240,47397,4353],{"emptyLinePlaceholder":2051},[240,47399,47400],{"class":242,"line":3647},[240,47401,47402],{"class":246},"# 创建验证集val文件夹\n",[240,47404,47405,47407,47410],{"class":242,"line":3652},[240,47406,47364],{"class":257},[240,47408,47409],{"class":443},"'data\u002Ftest'",[240,47411,2129],{"class":257},[240,47413,47414,47416,47418,47420],{"class":242,"line":3681},[240,47415,4977],{"class":288},[240,47417,47345],{"class":257},[240,47419,27989],{"class":288},[240,47421,47380],{"class":257},[240,47423,47424,47426,47429,47431],{"class":242,"line":3686},[240,47425,47385],{"class":257},[240,47427,47428],{"class":443},"'data\u002Ftest\u002F'",[240,47430,2580],{"class":288},[240,47432,47393],{"class":257},[240,47434,47435],{"class":242,"line":3703},[240,47436,4353],{"emptyLinePlaceholder":2051},[240,47438,47439],{"class":242,"line":3708},[240,47440,47441],{"class":246},"# 划分比例，训练集：测试集=9：1\n",[240,47443,47444,47447,47449],{"class":242,"line":3713},[240,47445,47446],{"class":257},"split_rate",[240,47448,440],{"class":288},[240,47450,47451],{"class":264},"0.1\n",[240,47453,47454],{"class":242,"line":3718},[240,47455,4353],{"emptyLinePlaceholder":2051},[240,47457,47458],{"class":242,"line":3732},[240,47459,47460],{"class":246},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[240,47462,47463],{"class":242,"line":3737},[240,47464,47465],{"class":246},"# cla_path：当前类别的原始图片路径\n",[240,47467,47468],{"class":242,"line":4530},[240,47469,47470],{"class":246},"# images：当前类别下所有图片的文件名列表\n",[240,47472,47473],{"class":242,"line":4544},[240,47474,47475],{"class":246},"# num：该类别图片总数\n",[240,47477,47478],{"class":242,"line":4552},[240,47479,47480],{"class":246},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[240,47482,47483],{"class":242,"line":4557},[240,47484,4353],{"emptyLinePlaceholder":2051},[240,47486,47487,47489,47491,47493],{"class":242,"line":4563},[240,47488,4977],{"class":288},[240,47490,47345],{"class":257},[240,47492,27989],{"class":288},[240,47494,47380],{"class":257},[240,47496,47497,47500,47502,47505,47507,47510,47513,47515,47517,47519],{"class":242,"line":4569},[240,47498,47499],{"class":257},"    cla_path ",[240,47501,440],{"class":288},[240,47503,47504],{"class":257}," file_path ",[240,47506,2580],{"class":288},[240,47508,47509],{"class":443}," '\u002F'",[240,47511,47512],{"class":288}," +",[240,47514,47345],{"class":257},[240,47516,2580],{"class":288},[240,47518,47509],{"class":443},[240,47520,47521],{"class":246},"  # 某一类别的子目录\n",[240,47523,47524,47527,47529,47532],{"class":242,"line":4574},[240,47525,47526],{"class":257},"    images ",[240,47528,440],{"class":288},[240,47530,47531],{"class":257}," os.listdir(cla_path)  ",[240,47533,47534],{"class":246},"# iamges 列表存储了该目录下所有图像的名称\n",[240,47536,47537,47540,47542,47544],{"class":242,"line":9899},[240,47538,47539],{"class":257},"    num ",[240,47541,440],{"class":288},[240,47543,9282],{"class":264},[240,47545,47546],{"class":257},"(images)\n",[240,47548,47549,47552,47554,47557,47559,47561,47563,47566,47568,47571],{"class":242,"line":9923},[240,47550,47551],{"class":257},"    eval_index ",[240,47553,440],{"class":288},[240,47555,47556],{"class":257}," random.sample(images, ",[240,47558,2592],{"class":792},[240,47560,440],{"class":288},[240,47562,2126],{"class":264},[240,47564,47565],{"class":257},"(num ",[240,47567,2554],{"class":288},[240,47569,47570],{"class":257}," split_rate))  ",[240,47572,47573],{"class":246},"# 从images列表中随机抽取 k 个图像名称\n",[240,47575,47576],{"class":242,"line":9928},[240,47577,47578],{"class":246},"    # 遍历该类别下的所有图片\n",[240,47580,47581],{"class":242,"line":9934},[240,47582,47583],{"class":246},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[240,47585,47586,47588,47591,47593,47595],{"class":242,"line":9961},[240,47587,5153],{"class":288},[240,47589,47590],{"class":257}," index, image ",[240,47592,27989],{"class":288},[240,47594,33552],{"class":264},[240,47596,47597],{"class":257},"(images):\n",[240,47599,47600],{"class":242,"line":9966},[240,47601,47602],{"class":246},"        # eval_index 中保存验证集val的图像名称\n",[240,47604,47605,47607,47610,47612],{"class":242,"line":9972},[240,47606,4450],{"class":288},[240,47608,47609],{"class":257}," image ",[240,47611,27989],{"class":288},[240,47613,47614],{"class":257}," eval_index:\n",[240,47616,47617,47620,47622,47625,47627],{"class":242,"line":9984},[240,47618,47619],{"class":257},"            image_path ",[240,47621,440],{"class":288},[240,47623,47624],{"class":257}," cla_path ",[240,47626,2580],{"class":288},[240,47628,47629],{"class":257}," image\n",[240,47631,47632,47635,47637,47640,47642],{"class":242,"line":9996},[240,47633,47634],{"class":257},"            new_path ",[240,47636,440],{"class":288},[240,47638,47639],{"class":443}," 'data\u002Ftest\u002F'",[240,47641,47512],{"class":288},[240,47643,47644],{"class":257}," cla\n",[240,47646,47647,47650],{"class":242,"line":10008},[240,47648,47649],{"class":257},"            copy(image_path, new_path)  ",[240,47651,47652],{"class":246},"# 将选中的图像复制到新路径\n",[240,47654,47655],{"class":242,"line":11667},[240,47656,4353],{"emptyLinePlaceholder":2051},[240,47658,47659],{"class":242,"line":11692},[240,47660,47661],{"class":246},"        # 其余的图像保存在训练集train中\n",[240,47663,47664,47666],{"class":242,"line":11715},[240,47665,4487],{"class":288},[240,47667,5691],{"class":257},[240,47669,47670,47672,47674,47676,47678],{"class":242,"line":11739},[240,47671,47619],{"class":257},[240,47673,440],{"class":288},[240,47675,47624],{"class":257},[240,47677,2580],{"class":288},[240,47679,47629],{"class":257},[240,47681,47682,47684,47686,47689,47691],{"class":242,"line":11744},[240,47683,47634],{"class":257},[240,47685,440],{"class":288},[240,47687,47688],{"class":443}," 'data\u002Ftrain\u002F'",[240,47690,47512],{"class":288},[240,47692,47644],{"class":257},[240,47694,47695],{"class":242,"line":11749},[240,47696,47697],{"class":257},"            copy(image_path, new_path)\n",[240,47699,47700],{"class":242,"line":11754},[240,47701,47702],{"class":246},"            # 打印进度条信息\n",[240,47704,47705],{"class":242,"line":11763},[240,47706,47707],{"class":246},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[240,47709,47710,47712,47714,47716,47719,47721,47723,47726,47728,47730,47732,47735,47738,47740,47742,47745,47748,47750,47752,47755],{"class":242,"line":11768},[240,47711,34397],{"class":264},[240,47713,789],{"class":257},[240,47715,2355],{"class":443},[240,47717,47718],{"class":264},"\\r",[240,47720,2985],{"class":443},[240,47722,34405],{"class":264},[240,47724,47725],{"class":443},"] processing [",[240,47727,34405],{"class":264},[240,47729,2683],{"class":443},[240,47731,34405],{"class":264},[240,47733,47734],{"class":443},"]\"",[240,47736,47737],{"class":257},".format(cla, index ",[240,47739,2580],{"class":288},[240,47741,27065],{"class":264},[240,47743,47744],{"class":257},", num), ",[240,47746,47747],{"class":792},"end",[240,47749,440],{"class":288},[240,47751,9603],{"class":443},[240,47753,47754],{"class":257},")  ",[240,47756,47757],{"class":246},"# processing bar\n",[240,47759,47760,47762],{"class":242,"line":11774},[240,47761,33245],{"class":264},[240,47763,3929],{"class":257},[240,47765,47766],{"class":242,"line":11795},[240,47767,4353],{"emptyLinePlaceholder":2051},[240,47769,47770,47772,47774,47777],{"class":242,"line":11801},[240,47771,32361],{"class":264},[240,47773,789],{"class":257},[240,47775,47776],{"class":443},"\"processing done!\"",[240,47778,2129],{"class":257},[19,47780,47781],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[23945,47783,47785],{"id":47784},"_242模型代码","2.4.2.模型代码",[19,47787,47788],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[231,47790,47792],{"className":32324,"code":47791,"language":32326,"meta":236,"style":236},"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",[23,47793,47794,47800,47810,47820,47824,47840,47848,47862,47872,47876,47906,47910,47944,47990,47994,48028,48074,48078,48082,48116,48146,48150,48158,48172,48194,48216,48234,48238,48252,48256,48260,48276,48280,48288,48302,48312,48356,48360,48388,48392,48402,48430,48434,48470,48474,48502,48506,48516,48548,48580,48608,48612,48622,48654,48686,48718,48750,48782,48810,48814,48824,48856,48888,48900,48904,48916,48920,48924,48936,48944,48964,48968,48972,48976,48980,48984,48988,49002,49010,49018,49030,49044,49052,49056,49064,49074,49084,49094,49104,49114,49120,49124,49128,49140,49160,49168],{"__ignoreMap":236},[240,47795,47796,47798],{"class":242,"line":243},[240,47797,32338],{"class":288},[240,47799,32341],{"class":257},[240,47801,47802,47804,47806,47808],{"class":242,"line":250},[240,47803,32683],{"class":288},[240,47805,32686],{"class":257},[240,47807,32338],{"class":288},[240,47809,32691],{"class":257},[240,47811,47812,47814,47816,47818],{"class":242,"line":261},[240,47813,32683],{"class":288},[240,47815,32703],{"class":257},[240,47817,32338],{"class":288},[240,47819,32708],{"class":257},[240,47821,47822],{"class":242,"line":277},[240,47823,4353],{"emptyLinePlaceholder":2051},[240,47825,47826,47828,47830,47832,47834,47836,47838],{"class":242,"line":294},[240,47827,16643],{"class":288},[240,47829,43439],{"class":436},[240,47831,789],{"class":257},[240,47833,32724],{"class":436},[240,47835,2657],{"class":257},[240,47837,32729],{"class":436},[240,47839,32732],{"class":257},[240,47841,47842,47844,47846],{"class":242,"line":309},[240,47843,32747],{"class":288},[240,47845,32750],{"class":264},[240,47847,43458],{"class":257},[240,47849,47850,47852,47854,47856,47858,47860],{"class":242,"line":529},[240,47851,32763],{"class":264},[240,47853,43465],{"class":257},[240,47855,32769],{"class":264},[240,47857,32772],{"class":257},[240,47859,32775],{"class":264},[240,47861,3929],{"class":257},[240,47863,47864,47866,47868,47870],{"class":242,"line":549},[240,47865,32791],{"class":264},[240,47867,36717],{"class":257},[240,47869,440],{"class":288},[240,47871,36722],{"class":257},[240,47873,47874],{"class":242,"line":569},[240,47875,43488],{"class":246},[240,47877,47878,47880,47882,47884,47886,47888,47890,47892,47894,47896,47898,47900,47902,47904],{"class":242,"line":589},[240,47879,32791],{"class":264},[240,47881,43495],{"class":257},[240,47883,440],{"class":288},[240,47885,32799],{"class":257},[240,47887,32802],{"class":792},[240,47889,440],{"class":288},[240,47891,43506],{"class":257},[240,47893,32811],{"class":792},[240,47895,440],{"class":288},[240,47897,43513],{"class":257},[240,47899,32820],{"class":792},[240,47901,440],{"class":288},[240,47903,1643],{"class":264},[240,47905,2129],{"class":257},[240,47907,47908],{"class":242,"line":715},[240,47909,43526],{"class":246},[240,47911,47912,47914,47916,47918,47920,47922,47924,47926,47928,47930,47932,47934,47936,47938,47940,47942],{"class":242,"line":727},[240,47913,32791],{"class":264},[240,47915,43533],{"class":257},[240,47917,440],{"class":288},[240,47919,32799],{"class":257},[240,47921,32802],{"class":792},[240,47923,440],{"class":288},[240,47925,43506],{"class":257},[240,47927,32811],{"class":792},[240,47929,440],{"class":288},[240,47931,43550],{"class":257},[240,47933,1274],{"class":264},[240,47935,43555],{"class":257},[240,47937,32820],{"class":792},[240,47939,440],{"class":288},[240,47941,1643],{"class":264},[240,47943,2129],{"class":257},[240,47945,47946,47948,47950,47952,47954,47956,47958,47960,47962,47964,47966,47968,47970,47972,47974,47976,47978,47980,47982,47984,47986,47988],{"class":242,"line":1730},[240,47947,32791],{"class":264},[240,47949,43570],{"class":257},[240,47951,440],{"class":288},[240,47953,32799],{"class":257},[240,47955,32802],{"class":792},[240,47957,440],{"class":288},[240,47959,43550],{"class":257},[240,47961,1274],{"class":264},[240,47963,43555],{"class":257},[240,47965,32811],{"class":792},[240,47967,440],{"class":288},[240,47969,43550],{"class":257},[240,47971,1643],{"class":264},[240,47973,43555],{"class":257},[240,47975,32820],{"class":792},[240,47977,440],{"class":288},[240,47979,1692],{"class":264},[240,47981,2479],{"class":257},[240,47983,32829],{"class":792},[240,47985,440],{"class":288},[240,47987,1643],{"class":264},[240,47989,2129],{"class":257},[240,47991,47992],{"class":242,"line":3582},[240,47993,43615],{"class":246},[240,47995,47996,47998,48000,48002,48004,48006,48008,48010,48012,48014,48016,48018,48020,48022,48024,48026],{"class":242,"line":3596},[240,47997,32791],{"class":264},[240,47999,43622],{"class":257},[240,48001,440],{"class":288},[240,48003,32799],{"class":257},[240,48005,32802],{"class":792},[240,48007,440],{"class":288},[240,48009,43506],{"class":257},[240,48011,32811],{"class":792},[240,48013,440],{"class":288},[240,48015,43639],{"class":257},[240,48017,1274],{"class":264},[240,48019,43555],{"class":257},[240,48021,32820],{"class":792},[240,48023,440],{"class":288},[240,48025,1643],{"class":264},[240,48027,2129],{"class":257},[240,48029,48030,48032,48034,48036,48038,48040,48042,48044,48046,48048,48050,48052,48054,48056,48058,48060,48062,48064,48066,48068,48070,48072],{"class":242,"line":3601},[240,48031,32791],{"class":264},[240,48033,43658],{"class":257},[240,48035,440],{"class":288},[240,48037,32799],{"class":257},[240,48039,32802],{"class":792},[240,48041,440],{"class":288},[240,48043,43639],{"class":257},[240,48045,1274],{"class":264},[240,48047,43555],{"class":257},[240,48049,32811],{"class":792},[240,48051,440],{"class":288},[240,48053,43639],{"class":257},[240,48055,1643],{"class":264},[240,48057,43555],{"class":257},[240,48059,32820],{"class":792},[240,48061,440],{"class":288},[240,48063,1741],{"class":264},[240,48065,2479],{"class":257},[240,48067,32829],{"class":792},[240,48069,440],{"class":288},[240,48071,1668],{"class":264},[240,48073,2129],{"class":257},[240,48075,48076],{"class":242,"line":3607},[240,48077,43703],{"class":246},[240,48079,48080],{"class":242,"line":3628},[240,48081,43708],{"class":246},[240,48083,48084,48086,48088,48090,48092,48094,48096,48098,48100,48102,48104,48106,48108,48110,48112,48114],{"class":242,"line":3633},[240,48085,32791],{"class":264},[240,48087,43715],{"class":257},[240,48089,440],{"class":288},[240,48091,36775],{"class":257},[240,48093,32820],{"class":792},[240,48095,440],{"class":288},[240,48097,1692],{"class":264},[240,48099,2479],{"class":257},[240,48101,32875],{"class":792},[240,48103,440],{"class":288},[240,48105,1643],{"class":264},[240,48107,2479],{"class":257},[240,48109,32829],{"class":792},[240,48111,440],{"class":288},[240,48113,1643],{"class":264},[240,48115,2129],{"class":257},[240,48117,48118,48120,48122,48124,48126,48128,48130,48132,48134,48136,48138,48140,48142,48144],{"class":242,"line":3647},[240,48119,32791],{"class":264},[240,48121,43750],{"class":257},[240,48123,440],{"class":288},[240,48125,32799],{"class":257},[240,48127,32802],{"class":792},[240,48129,440],{"class":288},[240,48131,43506],{"class":257},[240,48133,32811],{"class":792},[240,48135,440],{"class":288},[240,48137,43767],{"class":257},[240,48139,32820],{"class":792},[240,48141,440],{"class":288},[240,48143,1643],{"class":264},[240,48145,2129],{"class":257},[240,48147,48148],{"class":242,"line":3652},[240,48149,4353],{"emptyLinePlaceholder":2051},[240,48151,48152,48154,48156],{"class":242,"line":3681},[240,48153,32747],{"class":288},[240,48155,33039],{"class":436},[240,48157,33042],{"class":257},[240,48159,48160,48162,48164,48166,48168,48170],{"class":242,"line":3686},[240,48161,43792],{"class":257},[240,48163,440],{"class":288},[240,48165,32769],{"class":264},[240,48167,37130],{"class":257},[240,48169,32769],{"class":264},[240,48171,43803],{"class":257},[240,48173,48174,48176,48178,48180,48182,48184,48186,48188,48190,48192],{"class":242,"line":3703},[240,48175,9036],{"class":257},[240,48177,440],{"class":288},[240,48179,32769],{"class":264},[240,48181,37130],{"class":257},[240,48183,32769],{"class":264},[240,48185,43818],{"class":257},[240,48187,32769],{"class":264},[240,48189,37130],{"class":257},[240,48191,32769],{"class":264},[240,48193,43827],{"class":257},[240,48195,48196,48198,48200,48202,48204,48206,48208,48210,48212,48214],{"class":242,"line":3708},[240,48197,43832],{"class":257},[240,48199,440],{"class":288},[240,48201,32769],{"class":264},[240,48203,37130],{"class":257},[240,48205,32769],{"class":264},[240,48207,43843],{"class":257},[240,48209,32769],{"class":264},[240,48211,37130],{"class":257},[240,48213,32769],{"class":264},[240,48215,43852],{"class":257},[240,48217,48218,48220,48222,48224,48226,48228,48230,48232],{"class":242,"line":3713},[240,48219,43857],{"class":257},[240,48221,440],{"class":288},[240,48223,32769],{"class":264},[240,48225,37130],{"class":257},[240,48227,32769],{"class":264},[240,48229,43868],{"class":257},[240,48231,32769],{"class":264},[240,48233,43873],{"class":257},[240,48235,48236],{"class":242,"line":3718},[240,48237,43878],{"class":246},[240,48239,48240,48242,48244,48246,48248,48250],{"class":242,"line":3732},[240,48241,16701],{"class":288},[240,48243,43885],{"class":257},[240,48245,34631],{"class":792},[240,48247,440],{"class":288},[240,48249,1643],{"class":264},[240,48251,2129],{"class":257},[240,48253,48254],{"class":242,"line":3737},[240,48255,4353],{"emptyLinePlaceholder":2051},[240,48257,48258],{"class":242,"line":4530},[240,48259,43906],{"class":246},[240,48261,48262,48264,48266,48268,48270,48272,48274],{"class":242,"line":4544},[240,48263,16643],{"class":288},[240,48265,43913],{"class":436},[240,48267,789],{"class":257},[240,48269,32724],{"class":436},[240,48271,2657],{"class":257},[240,48273,32729],{"class":436},[240,48275,32732],{"class":257},[240,48277,48278],{"class":242,"line":4552},[240,48279,43928],{"class":246},[240,48281,48282,48284,48286],{"class":242,"line":4557},[240,48283,32747],{"class":288},[240,48285,32750],{"class":264},[240,48287,43937],{"class":257},[240,48289,48290,48292,48294,48296,48298,48300],{"class":242,"line":4563},[240,48291,32763],{"class":264},[240,48293,43944],{"class":257},[240,48295,32769],{"class":264},[240,48297,32772],{"class":257},[240,48299,32775],{"class":264},[240,48301,3929],{"class":257},[240,48303,48304,48306,48308,48310],{"class":242,"line":4569},[240,48305,32791],{"class":264},[240,48307,43959],{"class":257},[240,48309,440],{"class":288},[240,48311,39955],{"class":257},[240,48313,48314,48316,48318,48320,48322,48324,48326,48328,48330,48332,48334,48336,48338,48340,48342,48344,48346,48348,48350,48352,48354],{"class":242,"line":4574},[240,48315,39960],{"class":257},[240,48317,32802],{"class":792},[240,48319,440],{"class":288},[240,48321,1692],{"class":264},[240,48323,2479],{"class":257},[240,48325,32811],{"class":792},[240,48327,440],{"class":288},[240,48329,2310],{"class":264},[240,48331,2479],{"class":257},[240,48333,32820],{"class":792},[240,48335,440],{"class":288},[240,48337,2470],{"class":264},[240,48339,2479],{"class":257},[240,48341,32875],{"class":792},[240,48343,440],{"class":288},[240,48345,1668],{"class":264},[240,48347,2479],{"class":257},[240,48349,32829],{"class":792},[240,48351,440],{"class":288},[240,48353,1692],{"class":264},[240,48355,39993],{"class":257},[240,48357,48358],{"class":242,"line":9899},[240,48359,39998],{"class":257},[240,48361,48362,48364,48366,48368,48370,48372,48374,48376,48378,48380,48382,48384,48386],{"class":242,"line":9923},[240,48363,40043],{"class":257},[240,48365,32820],{"class":792},[240,48367,440],{"class":288},[240,48369,1692],{"class":264},[240,48371,2479],{"class":257},[240,48373,32875],{"class":792},[240,48375,440],{"class":288},[240,48377,1668],{"class":264},[240,48379,2479],{"class":257},[240,48381,32829],{"class":792},[240,48383,440],{"class":288},[240,48385,1643],{"class":264},[240,48387,2129],{"class":257},[240,48389,48390],{"class":242,"line":9928},[240,48391,40072],{"class":257},[240,48393,48394,48396,48398,48400],{"class":242,"line":9934},[240,48395,32791],{"class":264},[240,48397,44050],{"class":257},[240,48399,440],{"class":288},[240,48401,39955],{"class":257},[240,48403,48404,48406,48408,48410,48412,48414,48416,48418,48420,48422,48424,48426,48428],{"class":242,"line":9961},[240,48405,39960],{"class":257},[240,48407,32802],{"class":792},[240,48409,440],{"class":288},[240,48411,2310],{"class":264},[240,48413,2479],{"class":257},[240,48415,32811],{"class":792},[240,48417,440],{"class":288},[240,48419,2310],{"class":264},[240,48421,2479],{"class":257},[240,48423,32820],{"class":792},[240,48425,440],{"class":288},[240,48427,1643],{"class":264},[240,48429,39993],{"class":257},[240,48431,48432],{"class":242,"line":9966},[240,48433,39998],{"class":257},[240,48435,48436,48438,48440,48442,48444,48446,48448,48450,48452,48454,48456,48458,48460,48462,48464,48466,48468],{"class":242,"line":9972},[240,48437,39960],{"class":257},[240,48439,32802],{"class":792},[240,48441,440],{"class":288},[240,48443,2310],{"class":264},[240,48445,2479],{"class":257},[240,48447,32811],{"class":792},[240,48449,440],{"class":288},[240,48451,44105],{"class":264},[240,48453,2479],{"class":257},[240,48455,32820],{"class":792},[240,48457,440],{"class":288},[240,48459,1692],{"class":264},[240,48461,2479],{"class":257},[240,48463,32829],{"class":792},[240,48465,440],{"class":288},[240,48467,1643],{"class":264},[240,48469,39993],{"class":257},[240,48471,48472],{"class":242,"line":9984},[240,48473,39998],{"class":257},[240,48475,48476,48478,48480,48482,48484,48486,48488,48490,48492,48494,48496,48498,48500],{"class":242,"line":9996},[240,48477,40043],{"class":257},[240,48479,32820],{"class":792},[240,48481,440],{"class":288},[240,48483,1692],{"class":264},[240,48485,2479],{"class":257},[240,48487,32875],{"class":792},[240,48489,440],{"class":288},[240,48491,1668],{"class":264},[240,48493,2479],{"class":257},[240,48495,32829],{"class":792},[240,48497,440],{"class":288},[240,48499,1643],{"class":264},[240,48501,2129],{"class":257},[240,48503,48504],{"class":242,"line":10008},[240,48505,40072],{"class":257},[240,48507,48508,48510,48512,48514],{"class":242,"line":11667},[240,48509,32791],{"class":264},[240,48511,44166],{"class":257},[240,48513,440],{"class":288},[240,48515,39955],{"class":257},[240,48517,48518,48520,48522,48524,48526,48528,48530,48532,48534,48536,48538,48540,48542,48544,48546],{"class":242,"line":11692},[240,48519,44175],{"class":257},[240,48521,44105],{"class":264},[240,48523,2479],{"class":257},[240,48525,2310],{"class":264},[240,48527,44184],{"class":257},[240,48529,2316],{"class":264},[240,48531,2479],{"class":257},[240,48533,34016],{"class":264},[240,48535,44193],{"class":257},[240,48537,2700],{"class":264},[240,48539,2479],{"class":257},[240,48541,2304],{"class":264},[240,48543,44202],{"class":257},[240,48545,2304],{"class":264},[240,48547,39993],{"class":257},[240,48549,48550,48552,48554,48556,48558,48560,48562,48564,48566,48568,48570,48572,48574,48576,48578],{"class":242,"line":11715},[240,48551,44175],{"class":257},[240,48553,36816],{"class":264},[240,48555,2479],{"class":257},[240,48557,34016],{"class":264},[240,48559,44184],{"class":257},[240,48561,34016],{"class":264},[240,48563,2479],{"class":257},[240,48565,44105],{"class":264},[240,48567,44193],{"class":257},[240,48569,2304],{"class":264},[240,48571,2479],{"class":257},[240,48573,2316],{"class":264},[240,48575,44202],{"class":257},[240,48577,2310],{"class":264},[240,48579,39993],{"class":257},[240,48581,48582,48584,48586,48588,48590,48592,48594,48596,48598,48600,48602,48604,48606],{"class":242,"line":11739},[240,48583,40043],{"class":257},[240,48585,32820],{"class":792},[240,48587,440],{"class":288},[240,48589,1692],{"class":264},[240,48591,2479],{"class":257},[240,48593,32875],{"class":792},[240,48595,440],{"class":288},[240,48597,1668],{"class":264},[240,48599,2479],{"class":257},[240,48601,32829],{"class":792},[240,48603,440],{"class":288},[240,48605,1643],{"class":264},[240,48607,2129],{"class":257},[240,48609,48610],{"class":242,"line":11744},[240,48611,40072],{"class":257},[240,48613,48614,48616,48618,48620],{"class":242,"line":11749},[240,48615,32791],{"class":264},[240,48617,44277],{"class":257},[240,48619,440],{"class":288},[240,48621,39955],{"class":257},[240,48623,48624,48626,48628,48630,48632,48634,48636,48638,48640,48642,48644,48646,48648,48650,48652],{"class":242,"line":11754},[240,48625,44175],{"class":257},[240,48627,44288],{"class":264},[240,48629,2479],{"class":257},[240,48631,44105],{"class":264},[240,48633,44184],{"class":257},[240,48635,2316],{"class":264},[240,48637,2479],{"class":257},[240,48639,44301],{"class":264},[240,48641,44193],{"class":257},[240,48643,2700],{"class":264},[240,48645,2479],{"class":257},[240,48647,2706],{"class":264},[240,48649,44202],{"class":257},[240,48651,2310],{"class":264},[240,48653,39993],{"class":257},[240,48655,48656,48658,48660,48662,48664,48666,48668,48670,48672,48674,48676,48678,48680,48682,48684],{"class":242,"line":11763},[240,48657,44175],{"class":257},[240,48659,40403],{"class":264},[240,48661,2479],{"class":257},[240,48663,22995],{"class":264},[240,48665,44184],{"class":257},[240,48667,2716],{"class":264},[240,48669,2479],{"class":257},[240,48671,33447],{"class":264},[240,48673,44193],{"class":257},[240,48675,2897],{"class":264},[240,48677,2479],{"class":257},[240,48679,2310],{"class":264},[240,48681,44202],{"class":257},[240,48683,2310],{"class":264},[240,48685,39993],{"class":257},[240,48687,48688,48690,48692,48694,48696,48698,48700,48702,48704,48706,48708,48710,48712,48714,48716],{"class":242,"line":11768},[240,48689,44175],{"class":257},[240,48691,40403],{"class":264},[240,48693,2479],{"class":257},[240,48695,34016],{"class":264},[240,48697,44184],{"class":257},[240,48699,34016],{"class":264},[240,48701,2479],{"class":257},[240,48703,36816],{"class":264},[240,48705,44193],{"class":257},[240,48707,2897],{"class":264},[240,48709,2479],{"class":257},[240,48711,2310],{"class":264},[240,48713,44202],{"class":257},[240,48715,2310],{"class":264},[240,48717,39993],{"class":257},[240,48719,48720,48722,48724,48726,48728,48730,48732,48734,48736,48738,48740,48742,48744,48746,48748],{"class":242,"line":11774},[240,48721,44175],{"class":257},[240,48723,40403],{"class":264},[240,48725,2479],{"class":257},[240,48727,2716],{"class":264},[240,48729,44184],{"class":257},[240,48731,34016],{"class":264},[240,48733,2479],{"class":257},[240,48735,44398],{"class":264},[240,48737,44193],{"class":257},[240,48739,2304],{"class":264},[240,48741,2479],{"class":257},[240,48743,2310],{"class":264},[240,48745,44202],{"class":257},[240,48747,2310],{"class":264},[240,48749,39993],{"class":257},[240,48751,48752,48754,48756,48758,48760,48762,48764,48766,48768,48770,48772,48774,48776,48778,48780],{"class":242,"line":11795},[240,48753,44175],{"class":257},[240,48755,44419],{"class":264},[240,48757,2479],{"class":257},[240,48759,36816],{"class":264},[240,48761,44184],{"class":257},[240,48763,22995],{"class":264},[240,48765,2479],{"class":257},[240,48767,44432],{"class":264},[240,48769,44193],{"class":257},[240,48771,2304],{"class":264},[240,48773,2479],{"class":257},[240,48775,34016],{"class":264},[240,48777,44202],{"class":257},[240,48779,34016],{"class":264},[240,48781,39993],{"class":257},[240,48783,48784,48786,48788,48790,48792,48794,48796,48798,48800,48802,48804,48806,48808],{"class":242,"line":11801},[240,48785,40043],{"class":257},[240,48787,32820],{"class":792},[240,48789,440],{"class":288},[240,48791,1692],{"class":264},[240,48793,2479],{"class":257},[240,48795,32875],{"class":792},[240,48797,440],{"class":288},[240,48799,1668],{"class":264},[240,48801,2479],{"class":257},[240,48803,32829],{"class":792},[240,48805,440],{"class":288},[240,48807,1643],{"class":264},[240,48809,2129],{"class":257},[240,48811,48812],{"class":242,"line":11815},[240,48813,40072],{"class":257},[240,48815,48816,48818,48820,48822],{"class":242,"line":11821},[240,48817,32791],{"class":264},[240,48819,44485],{"class":257},[240,48821,440],{"class":288},[240,48823,39955],{"class":257},[240,48825,48826,48828,48830,48832,48834,48836,48838,48840,48842,48844,48846,48848,48850,48852,48854],{"class":242,"line":11848},[240,48827,44175],{"class":257},[240,48829,44496],{"class":264},[240,48831,2479],{"class":257},[240,48833,36816],{"class":264},[240,48835,44184],{"class":257},[240,48837,22995],{"class":264},[240,48839,2479],{"class":257},[240,48841,44432],{"class":264},[240,48843,44193],{"class":257},[240,48845,2304],{"class":264},[240,48847,2479],{"class":257},[240,48849,34016],{"class":264},[240,48851,44202],{"class":257},[240,48853,34016],{"class":264},[240,48855,39993],{"class":257},[240,48857,48858,48860,48862,48864,48866,48868,48870,48872,48874,48876,48878,48880,48882,48884,48886],{"class":242,"line":11857},[240,48859,44175],{"class":257},[240,48861,44496],{"class":264},[240,48863,2479],{"class":257},[240,48865,36886],{"class":264},[240,48867,44184],{"class":257},[240,48869,44105],{"class":264},[240,48871,2479],{"class":257},[240,48873,36886],{"class":264},[240,48875,44193],{"class":257},[240,48877,2706],{"class":264},[240,48879,2479],{"class":257},[240,48881,34016],{"class":264},[240,48883,44202],{"class":257},[240,48885,34016],{"class":264},[240,48887,39993],{"class":257},[240,48889,48890,48892,48894,48896,48898],{"class":242,"line":11863},[240,48891,44559],{"class":257},[240,48893,1643],{"class":264},[240,48895,2479],{"class":257},[240,48897,1643],{"class":264},[240,48899,44568],{"class":257},[240,48901,48902],{"class":242,"line":11871},[240,48903,40736],{"class":257},[240,48905,48906,48908,48910,48912,48914],{"class":242,"line":11876},[240,48907,40741],{"class":257},[240,48909,44579],{"class":264},[240,48911,2479],{"class":257},[240,48913,1668],{"class":264},[240,48915,2129],{"class":257},[240,48917,48918],{"class":242,"line":18552},[240,48919,40072],{"class":257},[240,48921,48922],{"class":242,"line":18558},[240,48923,44594],{"class":246},[240,48925,48926,48928,48930,48932,48934],{"class":242,"line":18581},[240,48927,5355],{"class":288},[240,48929,40814],{"class":257},[240,48931,27989],{"class":288},[240,48933,40819],{"class":264},[240,48935,40822],{"class":257},[240,48937,48938,48940,48942],{"class":242,"line":18587},[240,48939,6594],{"class":288},[240,48941,40834],{"class":264},[240,48943,40837],{"class":257},[240,48945,48946,48948,48950,48952,48954,48956,48958,48960,48962],{"class":242,"line":18610},[240,48947,40847],{"class":257},[240,48949,44621],{"class":792},[240,48951,440],{"class":288},[240,48953,44626],{"class":443},[240,48955,2479],{"class":257},[240,48957,40850],{"class":792},[240,48959,440],{"class":288},[240,48961,40855],{"class":443},[240,48963,2129],{"class":257},[240,48965,48966],{"class":242,"line":18624},[240,48967,44641],{"class":246},[240,48969,48970],{"class":242,"line":18644},[240,48971,44646],{"class":246},[240,48973,48974],{"class":242,"line":18650},[240,48975,44651],{"class":246},[240,48977,48978],{"class":242,"line":18661},[240,48979,44656],{"class":246},[240,48981,48982],{"class":242,"line":18684},[240,48983,44661],{"class":246},[240,48985,48986],{"class":242,"line":18706},[240,48987,44666],{"class":246},[240,48989,48990,48992,48994,48996,48998,49000],{"class":242,"line":18711},[240,48991,40867],{"class":288},[240,48993,40870],{"class":257},[240,48995,40873],{"class":288},[240,48997,40876],{"class":288},[240,48999,40879],{"class":264},[240,49001,5691],{"class":257},[240,49003,49004,49006,49008],{"class":242,"line":18717},[240,49005,40891],{"class":257},[240,49007,1274],{"class":264},[240,49009,2129],{"class":257},[240,49011,49012,49014,49016],{"class":242,"line":18731},[240,49013,44693],{"class":288},[240,49015,40834],{"class":264},[240,49017,40910],{"class":257},[240,49019,49020,49022,49024,49026,49028],{"class":242,"line":18744},[240,49021,44702],{"class":257},[240,49023,1274],{"class":264},[240,49025,2479],{"class":257},[240,49027,40932],{"class":264},[240,49029,2129],{"class":257},[240,49031,49032,49034,49036,49038,49040,49042],{"class":242,"line":18749},[240,49033,44715],{"class":288},[240,49035,40870],{"class":257},[240,49037,40873],{"class":288},[240,49039,40876],{"class":288},[240,49041,40879],{"class":264},[240,49043,5691],{"class":257},[240,49045,49046,49048,49050],{"class":242,"line":18763},[240,49047,44730],{"class":257},[240,49049,1274],{"class":264},[240,49051,2129],{"class":257},[240,49053,49054],{"class":242,"line":18768},[240,49055,37111],{"class":246},[240,49057,49058,49060,49062],{"class":242,"line":18774},[240,49059,32747],{"class":288},[240,49061,33039],{"class":436},[240,49063,33042],{"class":257},[240,49065,49066,49068,49070,49072],{"class":242,"line":18779},[240,49067,33047],{"class":257},[240,49069,440],{"class":288},[240,49071,32769],{"class":264},[240,49073,44757],{"class":257},[240,49075,49076,49078,49080,49082],{"class":242,"line":18793},[240,49077,33047],{"class":257},[240,49079,440],{"class":288},[240,49081,32769],{"class":264},[240,49083,44768],{"class":257},[240,49085,49086,49088,49090,49092],{"class":242,"line":18798},[240,49087,33047],{"class":257},[240,49089,440],{"class":288},[240,49091,32769],{"class":264},[240,49093,44779],{"class":257},[240,49095,49096,49098,49100,49102],{"class":242,"line":18803},[240,49097,33047],{"class":257},[240,49099,440],{"class":288},[240,49101,32769],{"class":264},[240,49103,44790],{"class":257},[240,49105,49106,49108,49110,49112],{"class":242,"line":18817},[240,49107,33047],{"class":257},[240,49109,440],{"class":288},[240,49111,32769],{"class":264},[240,49113,44801],{"class":257},[240,49115,49116,49118],{"class":242,"line":18829},[240,49117,16701],{"class":288},[240,49119,33155],{"class":257},[240,49121,49122],{"class":242,"line":18834},[240,49123,4353],{"emptyLinePlaceholder":2051},[240,49125,49126],{"class":242,"line":18847},[240,49127,44816],{"class":246},[240,49129,49130,49132,49134,49136,49138],{"class":242,"line":18852},[240,49131,3489],{"class":288},[240,49133,33166],{"class":264},[240,49135,4901],{"class":288},[240,49137,33171],{"class":443},[240,49139,5691],{"class":257},[240,49141,49142,49144,49146,49148,49150,49152,49154,49156,49158],{"class":242,"line":18857},[240,49143,33183],{"class":257},[240,49145,440],{"class":288},[240,49147,32397],{"class":257},[240,49149,33190],{"class":443},[240,49151,3658],{"class":288},[240,49153,33195],{"class":257},[240,49155,3655],{"class":288},[240,49157,32422],{"class":443},[240,49159,2129],{"class":257},[240,49161,49162,49164,49166],{"class":242,"line":18862},[240,49163,33235],{"class":257},[240,49165,440],{"class":288},[240,49167,44857],{"class":257},[240,49169,49170,49172,49174,49176,49178,49180,49182,49184],{"class":242,"line":18875},[240,49171,33245],{"class":264},[240,49173,33248],{"class":257},[240,49175,1643],{"class":264},[240,49177,2479],{"class":257},[240,49179,33447],{"class":264},[240,49181,2479],{"class":257},[240,49183,33447],{"class":264},[240,49185,33261],{"class":257},[23945,49187,49189],{"id":49188},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[19,49191,49192],{},"计算图片的均值与方差，用于训练中归一化处理操作",[231,49194,49196],{"className":32324,"code":49195,"language":32326,"meta":236,"style":236},"# 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",[23,49197,49198,49203,49216,49221,49227,49232,49242,49246,49251,49261,49265,49270,49280,49297,49301,49306,49318,49330,49361,49370,49380,49390,49394,49399,49414,49418,49423,49428,49433,49443,49448,49473,49477,49482,49497,49501,49514,49518,49523,49528,49533,49538,49543,49553,49563,49586,49594,49602,49610,49614,49626,49630,49635,49639,49643,49650,49670,49694,49701,49715,49720,49725,49729,49743,49747,49759],{"__ignoreMap":236},[240,49199,49200],{"class":242,"line":243},[240,49201,49202],{"class":246},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[240,49204,49205,49207,49210,49213],{"class":242,"line":250},[240,49206,32683],{"class":288},[240,49208,49209],{"class":264}," PIL",[240,49211,49212],{"class":288}," import",[240,49214,49215],{"class":257}," Image\n",[240,49217,49218],{"class":242,"line":261},[240,49219,49220],{"class":246},"# os 用来处理文件夹和文件路径\n",[240,49222,49223,49225],{"class":242,"line":277},[240,49224,32338],{"class":288},[240,49226,47251],{"class":257},[240,49228,49229],{"class":242,"line":294},[240,49230,49231],{"class":246},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[240,49233,49234,49236,49238,49240],{"class":242,"line":309},[240,49235,32338],{"class":288},[240,49237,33326],{"class":257},[240,49239,33329],{"class":288},[240,49241,33332],{"class":257},[240,49243,49244],{"class":242,"line":529},[240,49245,4353],{"emptyLinePlaceholder":2051},[240,49247,49248],{"class":242,"line":549},[240,49249,49250],{"class":246},"# 文件夹路径，包含所有图片文件\n",[240,49252,49253,49256,49258],{"class":242,"line":569},[240,49254,49255],{"class":257},"folder_path ",[240,49257,440],{"class":288},[240,49259,49260],{"class":443}," 'data_cat_dog'\n",[240,49262,49263],{"class":242,"line":589},[240,49264,4353],{"emptyLinePlaceholder":2051},[240,49266,49267],{"class":242,"line":715},[240,49268,49269],{"class":246},"# 初始化累积变量\n",[240,49271,49272,49275,49277],{"class":242,"line":727},[240,49273,49274],{"class":257},"total_pixels ",[240,49276,440],{"class":288},[240,49278,49279],{"class":264}," 0\n",[240,49281,49282,49285,49287,49290,49292,49294],{"class":242,"line":1730},[240,49283,49284],{"class":257},"sum_normalized_pixel_values ",[240,49286,440],{"class":288},[240,49288,49289],{"class":257}," np.zeros(",[240,49291,1692],{"class":264},[240,49293,47754],{"class":257},[240,49295,49296],{"class":246},"# 如果是RGB图像，需要三个通道的均值和方差\n",[240,49298,49299],{"class":242,"line":3582},[240,49300,4353],{"emptyLinePlaceholder":2051},[240,49302,49303],{"class":242,"line":3596},[240,49304,49305],{"class":246},"# 遍历文件夹中的图片文件\n",[240,49307,49308,49310,49313,49315],{"class":242,"line":3601},[240,49309,4977],{"class":288},[240,49311,49312],{"class":257}," root, dirs, files ",[240,49314,27989],{"class":288},[240,49316,49317],{"class":257}," os.walk(folder_path):\n",[240,49319,49320,49322,49325,49327],{"class":242,"line":3607},[240,49321,5153],{"class":288},[240,49323,49324],{"class":257}," filename ",[240,49326,27989],{"class":288},[240,49328,49329],{"class":257}," files:\n",[240,49331,49332,49334,49337,49340,49342,49345,49347,49350,49352,49355,49358],{"class":242,"line":3628},[240,49333,4450],{"class":288},[240,49335,49336],{"class":257}," filename.endswith((",[240,49338,49339],{"class":443},"'.jpg'",[240,49341,1277],{"class":257},[240,49343,49344],{"class":443},"'.jpeg'",[240,49346,1277],{"class":257},[240,49348,49349],{"class":443},"'.png'",[240,49351,1277],{"class":257},[240,49353,49354],{"class":443},"'.bmp'",[240,49356,49357],{"class":257},")):  ",[240,49359,49360],{"class":246},"# 可根据实际情况添加其他格式\n",[240,49362,49363,49365,49367],{"class":242,"line":3633},[240,49364,47619],{"class":257},[240,49366,440],{"class":288},[240,49368,49369],{"class":257}," os.path.join(root, filename)\n",[240,49371,49372,49375,49377],{"class":242,"line":3647},[240,49373,49374],{"class":257},"            image ",[240,49376,440],{"class":288},[240,49378,49379],{"class":257}," Image.open(image_path)\n",[240,49381,49382,49385,49387],{"class":242,"line":3652},[240,49383,49384],{"class":257},"            image_array ",[240,49386,440],{"class":288},[240,49388,49389],{"class":257}," np.array(image)\n",[240,49391,49392],{"class":242,"line":3681},[240,49393,4353],{"emptyLinePlaceholder":2051},[240,49395,49396],{"class":242,"line":3686},[240,49397,49398],{"class":246},"            # 归一化像素值到0-1之间\n",[240,49400,49401,49404,49406,49409,49411],{"class":242,"line":3703},[240,49402,49403],{"class":257},"            normalized_image_array ",[240,49405,440],{"class":288},[240,49407,49408],{"class":257}," image_array ",[240,49410,2683],{"class":288},[240,49412,49413],{"class":264}," 255.0\n",[240,49415,49416],{"class":242,"line":3708},[240,49417,4353],{"emptyLinePlaceholder":2051},[240,49419,49420],{"class":242,"line":3713},[240,49421,49422],{"class":246},"            # print(image_path)\n",[240,49424,49425],{"class":242,"line":3718},[240,49426,49427],{"class":246},"            # print(normalized_image_array.shape)\n",[240,49429,49430],{"class":242,"line":3732},[240,49431,49432],{"class":246},"            # 累积归一化后的像素值和像素数量\n",[240,49434,49435,49438,49440],{"class":242,"line":3737},[240,49436,49437],{"class":257},"            total_pixels ",[240,49439,11428],{"class":288},[240,49441,49442],{"class":257}," normalized_image_array.size\n",[240,49444,49445],{"class":242,"line":4530},[240,49446,49447],{"class":246},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[240,49449,49450,49453,49455,49458,49461,49463,49465,49467,49469,49471],{"class":242,"line":4544},[240,49451,49452],{"class":257},"            sum_normalized_pixel_values ",[240,49454,11428],{"class":288},[240,49456,49457],{"class":257}," np.sum(normalized_image_array, ",[240,49459,49460],{"class":792},"axis",[240,49462,440],{"class":288},[240,49464,789],{"class":257},[240,49466,1274],{"class":264},[240,49468,1277],{"class":257},[240,49470,1643],{"class":264},[240,49472,32443],{"class":257},[240,49474,49475],{"class":242,"line":4552},[240,49476,4353],{"emptyLinePlaceholder":2051},[240,49478,49479],{"class":242,"line":4557},[240,49480,49481],{"class":246},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[240,49483,49484,49487,49489,49492,49494],{"class":242,"line":4563},[240,49485,49486],{"class":257},"mean ",[240,49488,440],{"class":288},[240,49490,49491],{"class":257}," sum_normalized_pixel_values ",[240,49493,2683],{"class":288},[240,49495,49496],{"class":257}," total_pixels\n",[240,49498,49499],{"class":242,"line":4569},[240,49500,4353],{"emptyLinePlaceholder":2051},[240,49502,49503,49506,49508,49510,49512],{"class":242,"line":4574},[240,49504,49505],{"class":257},"sum_squared_diff ",[240,49507,440],{"class":288},[240,49509,49289],{"class":257},[240,49511,1692],{"class":264},[240,49513,2129],{"class":257},[240,49515,49516],{"class":242,"line":9899},[240,49517,4353],{"emptyLinePlaceholder":2051},[240,49519,49520],{"class":242,"line":9923},[240,49521,49522],{"class":246},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[240,49524,49525],{"class":242,"line":9928},[240,49526,49527],{"class":246},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[240,49529,49530],{"class":242,"line":9934},[240,49531,49532],{"class":246},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[240,49534,49535],{"class":242,"line":9961},[240,49536,49537],{"class":246},"# Image.open(image_path)：打开图片\n",[240,49539,49540],{"class":242,"line":9966},[240,49541,49542],{"class":246},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[240,49544,49545,49547,49549,49551],{"class":242,"line":9972},[240,49546,4977],{"class":288},[240,49548,49312],{"class":257},[240,49550,27989],{"class":288},[240,49552,49317],{"class":257},[240,49554,49555,49557,49559,49561],{"class":242,"line":9984},[240,49556,5153],{"class":288},[240,49558,49324],{"class":257},[240,49560,27989],{"class":288},[240,49562,49329],{"class":257},[240,49564,49565,49567,49569,49571,49573,49575,49577,49579,49581,49583],{"class":242,"line":9996},[240,49566,4450],{"class":288},[240,49568,49336],{"class":257},[240,49570,49339],{"class":443},[240,49572,1277],{"class":257},[240,49574,49344],{"class":443},[240,49576,1277],{"class":257},[240,49578,49349],{"class":443},[240,49580,1277],{"class":257},[240,49582,49354],{"class":443},[240,49584,49585],{"class":257},")):\n",[240,49587,49588,49590,49592],{"class":242,"line":10008},[240,49589,47619],{"class":257},[240,49591,440],{"class":288},[240,49593,49369],{"class":257},[240,49595,49596,49598,49600],{"class":242,"line":11667},[240,49597,49374],{"class":257},[240,49599,440],{"class":288},[240,49601,49379],{"class":257},[240,49603,49604,49606,49608],{"class":242,"line":11692},[240,49605,49384],{"class":257},[240,49607,440],{"class":288},[240,49609,49389],{"class":257},[240,49611,49612],{"class":242,"line":11715},[240,49613,49398],{"class":246},[240,49615,49616,49618,49620,49622,49624],{"class":242,"line":11739},[240,49617,49403],{"class":257},[240,49619,440],{"class":288},[240,49621,49408],{"class":257},[240,49623,2683],{"class":288},[240,49625,49413],{"class":264},[240,49627,49628],{"class":242,"line":11744},[240,49629,49427],{"class":246},[240,49631,49632],{"class":242,"line":11749},[240,49633,49634],{"class":246},"            # print(mean.shape)\n",[240,49636,49637],{"class":242,"line":11754},[240,49638,49422],{"class":246},[240,49640,49641],{"class":242,"line":11763},[240,49642,4353],{"emptyLinePlaceholder":2051},[240,49644,49645,49648],{"class":242,"line":11768},[240,49646,49647],{"class":288},"            try",[240,49649,5691],{"class":257},[240,49651,49652,49655,49657,49660,49662,49665,49667],{"class":242,"line":11774},[240,49653,49654],{"class":257},"                diff ",[240,49656,440],{"class":288},[240,49658,49659],{"class":257}," (normalized_image_array ",[240,49661,2631],{"class":288},[240,49663,49664],{"class":257}," mean) ",[240,49666,12612],{"class":288},[240,49668,49669],{"class":264}," 2\n",[240,49671,49672,49675,49677,49680,49682,49684,49686,49688,49690,49692],{"class":242,"line":11795},[240,49673,49674],{"class":257},"                sum_squared_diff ",[240,49676,11428],{"class":288},[240,49678,49679],{"class":257}," np.sum(diff, ",[240,49681,49460],{"class":792},[240,49683,440],{"class":288},[240,49685,789],{"class":257},[240,49687,1274],{"class":264},[240,49689,1277],{"class":257},[240,49691,1643],{"class":264},[240,49693,32443],{"class":257},[240,49695,49696,49699],{"class":242,"line":11801},[240,49697,49698],{"class":288},"            except",[240,49700,5691],{"class":257},[240,49702,49703,49706,49708,49710,49713],{"class":242,"line":11815},[240,49704,49705],{"class":264},"                print",[240,49707,789],{"class":257},[240,49709,2172],{"class":288},[240,49711,49712],{"class":443},"\"捕获到自定义异常\"",[240,49714,2129],{"class":257},[240,49716,49717],{"class":242,"line":11821},[240,49718,49719],{"class":246},"            # diff = (normalized_image_array - mean) ** 2\n",[240,49721,49722],{"class":242,"line":11848},[240,49723,49724],{"class":246},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[240,49726,49727],{"class":242,"line":11857},[240,49728,4353],{"emptyLinePlaceholder":2051},[240,49730,49731,49734,49736,49739,49741],{"class":242,"line":11863},[240,49732,49733],{"class":257},"variance ",[240,49735,440],{"class":288},[240,49737,49738],{"class":257}," sum_squared_diff ",[240,49740,2683],{"class":288},[240,49742,49496],{"class":257},[240,49744,49745],{"class":242,"line":11871},[240,49746,4353],{"emptyLinePlaceholder":2051},[240,49748,49749,49751,49753,49756],{"class":242,"line":11876},[240,49750,32361],{"class":264},[240,49752,789],{"class":257},[240,49754,49755],{"class":443},"\"Mean:\"",[240,49757,49758],{"class":257},", mean)\n",[240,49760,49761,49763,49765,49768],{"class":242,"line":18552},[240,49762,32361],{"class":264},[240,49764,789],{"class":257},[240,49766,49767],{"class":443},"\"Variance:\"",[240,49769,49770],{"class":257},", variance)\n",[231,49772,49774],{"className":32324,"code":49773,"language":32326,"meta":236,"style":236},"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",[23,49775,49776,49782,49788,49798,49804,49814,49828,49838,49848,49858,49862,49872,49882,49886,49890,49898,49903,49908,49927,49931,49936,49941,49946,49951,49992,49997,50007,50012,50025,50030,50035,50040,50045,50050,50054,50059,50064,50086,50090,50122,50136,50146,50156,50160,50170,50184,50194,50204,50214,50220,50224,50228,50232,50236,50240,50248,50268,50272,50276,50280,50284,50300,50304,50308,50316,50320,50324,50332,50336,50340,50344,50352,50356,50360,50364,50372,50376,50384,50388,50396,50400,50408,50412,50420,50424,50428,50436,50440,50444,50456,50480,50494,50498,50502,50506,50514,50518,50526,50530,50538,50542,50550,50554,50562,50566,50574,50578,50590,50594,50602,50606,50614,50618,50622,50626,50630,50638,50642,50658,50662,50670,50674,50678,50682,50686,50690,50694,50698,50714,50718,50730,50734,50746,50750,50762,50766,50774,50778,50786,50790,50794,50798,50804,50808,50816,50820,50836,50840,50848,50852,50868,50880,50884,50896,50900,50904,50912,50916,50920,50928,50932,50940,50944,50952,50956,50960,51002,51044,51048,51052,51068,51072,51088,51092,51096,51104,51108,51112,51124,51162,51166,51170,51178,51182,51196,51206,51212,51218,51224,51230,51234,51238,51244,51248,51252,51260,51264,51282,51286,51290,51294,51310,51314,51318,51322,51326,51330,51350,51370,51374,51378,51382,51390,51398,51402,51418,51438,51458,51462,51467,51476,51485,51490,51495,51500,51513,51518,51527,51536,51553],{"__ignoreMap":236},[240,49777,49778,49780],{"class":242,"line":243},[240,49779,32338],{"class":288},[240,49781,33768],{"class":257},[240,49783,49784,49786],{"class":242,"line":250},[240,49785,32338],{"class":288},[240,49787,33775],{"class":257},[240,49789,49790,49792,49794,49796],{"class":242,"line":261},[240,49791,32338],{"class":288},[240,49793,33786],{"class":257},[240,49795,33329],{"class":288},[240,49797,33791],{"class":257},[240,49799,49800,49802],{"class":242,"line":277},[240,49801,32338],{"class":288},[240,49803,32341],{"class":257},[240,49805,49806,49808,49810,49812],{"class":242,"line":294},[240,49807,32683],{"class":288},[240,49809,33361],{"class":257},[240,49811,32338],{"class":288},[240,49813,33808],{"class":257},[240,49815,49816,49818,49820,49822,49825],{"class":242,"line":309},[240,49817,32683],{"class":288},[240,49819,33314],{"class":257},[240,49821,32338],{"class":288},[240,49823,49824],{"class":257}," ImageFolder ",[240,49826,49827],{"class":246},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[240,49829,49830,49832,49834,49836],{"class":242,"line":529},[240,49831,32683],{"class":288},[240,49833,33344],{"class":257},[240,49835,32338],{"class":288},[240,49837,33349],{"class":257},[240,49839,49840,49842,49844,49846],{"class":242,"line":549},[240,49841,32338],{"class":288},[240,49843,33361],{"class":257},[240,49845,33329],{"class":288},[240,49847,33366],{"class":257},[240,49849,49850,49852,49854,49856],{"class":242,"line":569},[240,49851,32338],{"class":288},[240,49853,33378],{"class":257},[240,49855,33329],{"class":288},[240,49857,33383],{"class":257},[240,49859,49860],{"class":242,"line":589},[240,49861,33853],{"class":246},[240,49863,49864,49866,49868,49870],{"class":242,"line":715},[240,49865,32683],{"class":288},[240,49867,33860],{"class":257},[240,49869,32338],{"class":288},[240,49871,44977],{"class":257},[240,49873,49874,49876,49878,49880],{"class":242,"line":727},[240,49875,32683],{"class":288},[240,49877,32686],{"class":257},[240,49879,32338],{"class":288},[240,49881,32691],{"class":257},[240,49883,49884],{"class":242,"line":1730},[240,49885,4353],{"emptyLinePlaceholder":2051},[240,49887,49888],{"class":242,"line":3582},[240,49889,33888],{"class":246},[240,49891,49892,49894,49896],{"class":242,"line":3596},[240,49893,33893],{"class":288},[240,49895,33896],{"class":436},[240,49897,33899],{"class":257},[240,49899,49900],{"class":242,"line":3601},[240,49901,49902],{"class":246},"    # 导入自己的数据集，并进行数据处理\n",[240,49904,49905],{"class":242,"line":3607},[240,49906,49907],{"class":246},"    # 定义数据集的路径\n",[240,49909,49910,49913,49915,49917,49919,49921,49925],{"class":242,"line":3628},[240,49911,49912],{"class":264},"    ROOT_PATH",[240,49914,440],{"class":288},[240,49916,2768],{"class":288},[240,49918,2355],{"class":443},[240,49920,2657],{"class":264},[240,49922,49924],{"class":49923},"sA_wV","\u002Fdata\u002Ftrain",[240,49926,27080],{"class":443},[240,49928,49929],{"class":242,"line":3633},[240,49930,4353],{"emptyLinePlaceholder":2051},[240,49932,49933],{"class":242,"line":3647},[240,49934,49935],{"class":246},"    # 定义归一化方法\n",[240,49937,49938],{"class":242,"line":3652},[240,49939,49940],{"class":246},"    # 这里需要先计算一下数据集的均值和方差\n",[240,49942,49943],{"class":242,"line":3681},[240,49944,49945],{"class":246},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[240,49947,49948],{"class":242,"line":3686},[240,49949,49950],{"class":246},"    # 第一个参数是均值，第二个参数是方差\n",[240,49952,49953,49956,49958,49961,49964,49966,49969,49971,49974,49977,49980,49982,49985,49987,49990],{"class":242,"line":3703},[240,49954,49955],{"class":257},"    normalize",[240,49957,440],{"class":288},[240,49959,49960],{"class":257},"transforms.Normalize([",[240,49962,49963],{"class":264},"0.162",[240,49965,2479],{"class":257},[240,49967,49968],{"class":264},"0.151",[240,49970,2479],{"class":257},[240,49972,49973],{"class":264},"0.138",[240,49975,49976],{"class":257},"],[",[240,49978,49979],{"class":264},"0.058",[240,49981,2479],{"class":257},[240,49983,49984],{"class":264},"0.052",[240,49986,2479],{"class":257},[240,49988,49989],{"class":264},"0.048",[240,49991,6609],{"class":257},[240,49993,49994],{"class":242,"line":3708},[240,49995,49996],{"class":246},"    # 定义数据集处理方法变量\n",[240,49998,49999,50002,50004],{"class":242,"line":3713},[240,50000,50001],{"class":257},"    train_transform",[240,50003,440],{"class":288},[240,50005,50006],{"class":257},"transforms.Compose([\n",[240,50008,50009],{"class":242,"line":3718},[240,50010,50011],{"class":246},"        # 调整图像大小为224*224\n",[240,50013,50014,50017,50019,50021,50023],{"class":242,"line":3732},[240,50015,50016],{"class":257},"        transforms.Resize((",[240,50018,33447],{"class":264},[240,50020,2479],{"class":257},[240,50022,33447],{"class":264},[240,50024,44568],{"class":257},[240,50026,50027],{"class":242,"line":3737},[240,50028,50029],{"class":246},"        # 将图像转换为张量\n",[240,50031,50032],{"class":242,"line":4530},[240,50033,50034],{"class":257},"        transforms.ToTensor(),\n",[240,50036,50037],{"class":242,"line":4544},[240,50038,50039],{"class":257},"        normalize])\n",[240,50041,50042],{"class":242,"line":4552},[240,50043,50044],{"class":246},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[240,50046,50047],{"class":242,"line":4557},[240,50048,50049],{"class":246},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[240,50051,50052],{"class":242,"line":4563},[240,50053,4353],{"emptyLinePlaceholder":2051},[240,50055,50056],{"class":242,"line":4569},[240,50057,50058],{"class":246},"    # 加载数据集\n",[240,50060,50061],{"class":242,"line":4574},[240,50062,50063],{"class":246},"    # 传入数据集路径与处理方法\n",[240,50065,50066,50068,50070,50073,50076,50078,50081,50083],{"class":242,"line":9899},[240,50067,33904],{"class":257},[240,50069,440],{"class":288},[240,50071,50072],{"class":257},"ImageFolder(",[240,50074,50075],{"class":264},"ROOT_PATH",[240,50077,2479],{"class":257},[240,50079,50080],{"class":792},"transform",[240,50082,440],{"class":288},[240,50084,50085],{"class":257},"train_transform)\n",[240,50087,50088],{"class":242,"line":9923},[240,50089,4353],{"emptyLinePlaceholder":2051},[240,50091,50092,50094,50096,50098,50100,50102,50104,50106,50108,50110,50112,50114,50116,50118,50120],{"class":242,"line":9928},[240,50093,33956],{"class":257},[240,50095,440],{"class":288},[240,50097,33961],{"class":257},[240,50099,33964],{"class":264},[240,50101,789],{"class":257},[240,50103,33969],{"class":264},[240,50105,2554],{"class":288},[240,50107,9309],{"class":264},[240,50109,33976],{"class":257},[240,50111,33964],{"class":264},[240,50113,789],{"class":257},[240,50115,33983],{"class":264},[240,50117,2554],{"class":288},[240,50119,9309],{"class":264},[240,50121,33990],{"class":257},[240,50123,50124,50126,50128,50130,50132,50134],{"class":242,"line":9934},[240,50125,33995],{"class":257},[240,50127,440],{"class":288},[240,50129,34000],{"class":257},[240,50131,33483],{"class":792},[240,50133,440],{"class":288},[240,50135,33488],{"class":257},[240,50137,50138,50140,50142,50144],{"class":242,"line":9961},[240,50139,34011],{"class":792},[240,50141,440],{"class":288},[240,50143,2304],{"class":264},[240,50145,33412],{"class":257},[240,50147,50148,50150,50152,50154],{"class":242,"line":9966},[240,50149,34023],{"class":792},[240,50151,440],{"class":288},[240,50153,33422],{"class":264},[240,50155,33412],{"class":257},[240,50157,50158],{"class":242,"line":9972},[240,50159,34034],{"class":246},[240,50161,50162,50164,50166,50168],{"class":242,"line":9984},[240,50163,34039],{"class":792},[240,50165,440],{"class":288},[240,50167,2496],{"class":264},[240,50169,2129],{"class":257},[240,50171,50172,50174,50176,50178,50180,50182],{"class":242,"line":9996},[240,50173,34050],{"class":257},[240,50175,440],{"class":288},[240,50177,33480],{"class":257},[240,50179,33483],{"class":792},[240,50181,440],{"class":288},[240,50183,34061],{"class":257},[240,50185,50186,50188,50190,50192],{"class":242,"line":10008},[240,50187,34066],{"class":792},[240,50189,440],{"class":288},[240,50191,2304],{"class":264},[240,50193,33412],{"class":257},[240,50195,50196,50198,50200,50202],{"class":242,"line":11667},[240,50197,34077],{"class":792},[240,50199,440],{"class":288},[240,50201,33422],{"class":264},[240,50203,33412],{"class":257},[240,50205,50206,50208,50210,50212],{"class":242,"line":11692},[240,50207,34088],{"class":792},[240,50209,440],{"class":288},[240,50211,2496],{"class":264},[240,50213,2129],{"class":257},[240,50215,50216,50218],{"class":242,"line":11715},[240,50217,6042],{"class":288},[240,50219,34101],{"class":257},[240,50221,50222],{"class":242,"line":11739},[240,50223,4353],{"emptyLinePlaceholder":2051},[240,50225,50226],{"class":242,"line":11744},[240,50227,34110],{"class":246},[240,50229,50230],{"class":242,"line":11749},[240,50231,34115],{"class":246},[240,50233,50234],{"class":242,"line":11754},[240,50235,4353],{"emptyLinePlaceholder":2051},[240,50237,50238],{"class":242,"line":11763},[240,50239,34124],{"class":246},[240,50241,50242,50244,50246],{"class":242,"line":11768},[240,50243,33893],{"class":288},[240,50245,34131],{"class":436},[240,50247,34134],{"class":257},[240,50249,50250,50252,50254,50256,50258,50260,50262,50264,50266],{"class":242,"line":11774},[240,50251,33183],{"class":257},[240,50253,440],{"class":288},[240,50255,32397],{"class":257},[240,50257,33190],{"class":443},[240,50259,3658],{"class":288},[240,50261,33195],{"class":257},[240,50263,3655],{"class":288},[240,50265,34153],{"class":443},[240,50267,2129],{"class":257},[240,50269,50270],{"class":242,"line":11795},[240,50271,4353],{"emptyLinePlaceholder":2051},[240,50273,50274],{"class":242,"line":11801},[240,50275,34168],{"class":246},[240,50277,50278],{"class":242,"line":11815},[240,50279,34173],{"class":246},[240,50281,50282],{"class":242,"line":11821},[240,50283,34178],{"class":246},[240,50285,50286,50288,50290,50292,50294,50296,50298],{"class":242,"line":11848},[240,50287,34183],{"class":257},[240,50289,440],{"class":288},[240,50291,34188],{"class":257},[240,50293,34191],{"class":792},[240,50295,440],{"class":288},[240,50297,34196],{"class":264},[240,50299,2129],{"class":257},[240,50301,50302],{"class":242,"line":11857},[240,50303,4353],{"emptyLinePlaceholder":2051},[240,50305,50306],{"class":242,"line":11863},[240,50307,34207],{"class":246},[240,50309,50310,50312,50314],{"class":242,"line":11871},[240,50311,34212],{"class":257},[240,50313,440],{"class":288},[240,50315,34217],{"class":257},[240,50317,50318],{"class":242,"line":11876},[240,50319,4353],{"emptyLinePlaceholder":2051},[240,50321,50322],{"class":242,"line":18552},[240,50323,34226],{"class":246},[240,50325,50326,50328,50330],{"class":242,"line":18558},[240,50327,33235],{"class":257},[240,50329,440],{"class":288},[240,50331,34235],{"class":257},[240,50333,50334],{"class":242,"line":18581},[240,50335,34240],{"class":246},[240,50337,50338],{"class":242,"line":18587},[240,50339,34245],{"class":246},[240,50341,50342],{"class":242,"line":18610},[240,50343,34250],{"class":246},[240,50345,50346,50348,50350],{"class":242,"line":18624},[240,50347,34255],{"class":257},[240,50349,440],{"class":288},[240,50351,34260],{"class":257},[240,50353,50354],{"class":242,"line":18644},[240,50355,4353],{"emptyLinePlaceholder":2051},[240,50357,50358],{"class":242,"line":18650},[240,50359,34273],{"class":246},[240,50361,50362],{"class":242,"line":18661},[240,50363,34278],{"class":246},[240,50365,50366,50368,50370],{"class":242,"line":18684},[240,50367,34283],{"class":257},[240,50369,440],{"class":288},[240,50371,34288],{"class":264},[240,50373,50374],{"class":242,"line":18706},[240,50375,34293],{"class":246},[240,50377,50378,50380,50382],{"class":242,"line":18711},[240,50379,34298],{"class":257},[240,50381,440],{"class":288},[240,50383,34303],{"class":257},[240,50385,50386],{"class":242,"line":18717},[240,50387,34308],{"class":246},[240,50389,50390,50392,50394],{"class":242,"line":18731},[240,50391,34313],{"class":257},[240,50393,440],{"class":288},[240,50395,34303],{"class":257},[240,50397,50398],{"class":242,"line":18744},[240,50399,34322],{"class":246},[240,50401,50402,50404,50406],{"class":242,"line":18749},[240,50403,34327],{"class":257},[240,50405,440],{"class":288},[240,50407,34303],{"class":257},[240,50409,50410],{"class":242,"line":18763},[240,50411,34336],{"class":246},[240,50413,50414,50416,50418],{"class":242,"line":18768},[240,50415,34341],{"class":257},[240,50417,440],{"class":288},[240,50419,34303],{"class":257},[240,50421,50422],{"class":242,"line":18774},[240,50423,4353],{"emptyLinePlaceholder":2051},[240,50425,50426],{"class":242,"line":18779},[240,50427,34354],{"class":246},[240,50429,50430,50432,50434],{"class":242,"line":18793},[240,50431,34359],{"class":257},[240,50433,440],{"class":288},[240,50435,34364],{"class":257},[240,50437,50438],{"class":242,"line":18798},[240,50439,4353],{"emptyLinePlaceholder":2051},[240,50441,50442],{"class":242,"line":18803},[240,50443,34377],{"class":246},[240,50445,50446,50448,50450,50452,50454],{"class":242,"line":18817},[240,50447,5153],{"class":288},[240,50449,34384],{"class":257},[240,50451,27989],{"class":288},[240,50453,34389],{"class":264},[240,50455,34392],{"class":257},[240,50457,50458,50460,50462,50464,50466,50468,50470,50472,50474,50476,50478],{"class":242,"line":18829},[240,50459,34397],{"class":264},[240,50461,789],{"class":257},[240,50463,34402],{"class":443},[240,50465,34405],{"class":264},[240,50467,2683],{"class":443},[240,50469,34405],{"class":264},[240,50471,2355],{"class":443},[240,50473,34414],{"class":257},[240,50475,2631],{"class":288},[240,50477,1643],{"class":264},[240,50479,32443],{"class":257},[240,50481,50482,50484,50486,50488,50490,50492],{"class":242,"line":18834},[240,50483,34397],{"class":264},[240,50485,789],{"class":257},[240,50487,34429],{"class":443},[240,50489,2554],{"class":288},[240,50491,2546],{"class":264},[240,50493,2129],{"class":257},[240,50495,50496],{"class":242,"line":18847},[240,50497,4353],{"emptyLinePlaceholder":2051},[240,50499,50500],{"class":242,"line":18852},[240,50501,34444],{"class":246},[240,50503,50504],{"class":242,"line":18857},[240,50505,34449],{"class":246},[240,50507,50508,50510,50512],{"class":242,"line":18862},[240,50509,34454],{"class":257},[240,50511,440],{"class":288},[240,50513,34288],{"class":264},[240,50515,50516],{"class":242,"line":18875},[240,50517,34463],{"class":246},[240,50519,50520,50522,50524],{"class":242,"line":18880},[240,50521,34468],{"class":257},[240,50523,440],{"class":288},[240,50525,5037],{"class":264},[240,50527,50528],{"class":242,"line":34579},[240,50529,34477],{"class":246},[240,50531,50532,50534,50536],{"class":242,"line":34585},[240,50533,34482],{"class":257},[240,50535,440],{"class":288},[240,50537,34288],{"class":264},[240,50539,50540],{"class":242,"line":34591},[240,50541,34491],{"class":246},[240,50543,50544,50546,50548],{"class":242,"line":34597},[240,50545,34496],{"class":257},[240,50547,440],{"class":288},[240,50549,5037],{"class":264},[240,50551,50552],{"class":242,"line":34603},[240,50553,34505],{"class":246},[240,50555,50556,50558,50560],{"class":242,"line":34614},[240,50557,34510],{"class":257},[240,50559,440],{"class":288},[240,50561,5037],{"class":264},[240,50563,50564],{"class":242,"line":34620},[240,50565,34519],{"class":246},[240,50567,50568,50570,50572],{"class":242,"line":34640},[240,50569,34524],{"class":257},[240,50571,440],{"class":288},[240,50573,5037],{"class":264},[240,50575,50576],{"class":242,"line":34646},[240,50577,34533],{"class":246},[240,50579,50580,50582,50584,50586,50588],{"class":242,"line":34657},[240,50581,5355],{"class":288},[240,50583,33547],{"class":257},[240,50585,27989],{"class":288},[240,50587,33552],{"class":264},[240,50589,34546],{"class":257},[240,50591,50592],{"class":242,"line":34663},[240,50593,34551],{"class":246},[240,50595,50596,50598,50600],{"class":242,"line":34669},[240,50597,34556],{"class":257},[240,50599,440],{"class":288},[240,50601,34561],{"class":257},[240,50603,50604],{"class":242,"line":34675},[240,50605,34566],{"class":246},[240,50607,50608,50610,50612],{"class":242,"line":34681},[240,50609,34571],{"class":257},[240,50611,440],{"class":288},[240,50613,34576],{"class":257},[240,50615,50616],{"class":242,"line":34687},[240,50617,34582],{"class":246},[240,50619,50620],{"class":242,"line":34693},[240,50621,34588],{"class":257},[240,50623,50624],{"class":242,"line":34699},[240,50625,34594],{"class":246},[240,50627,50628],{"class":242,"line":34719},[240,50629,34600],{"class":246},[240,50631,50632,50634,50636],{"class":242,"line":34725},[240,50633,34606],{"class":257},[240,50635,440],{"class":288},[240,50637,34611],{"class":257},[240,50639,50640],{"class":242,"line":34741},[240,50641,34617],{"class":246},[240,50643,50644,50646,50648,50650,50652,50654,50656],{"class":242,"line":34747},[240,50645,34623],{"class":257},[240,50647,440],{"class":288},[240,50649,34628],{"class":257},[240,50651,34631],{"class":792},[240,50653,440],{"class":288},[240,50655,1643],{"class":264},[240,50657,2129],{"class":257},[240,50659,50660],{"class":242,"line":34761},[240,50661,34643],{"class":246},[240,50663,50664,50666,50668],{"class":242,"line":34767},[240,50665,34649],{"class":257},[240,50667,440],{"class":288},[240,50669,34654],{"class":257},[240,50671,50672],{"class":242,"line":34782},[240,50673,34660],{"class":246},[240,50675,50676],{"class":242,"line":34788},[240,50677,34666],{"class":257},[240,50679,50680],{"class":242,"line":34797},[240,50681,34672],{"class":246},[240,50683,50684],{"class":242,"line":34803},[240,50685,34678],{"class":257},[240,50687,50688],{"class":242,"line":34812},[240,50689,34684],{"class":246},[240,50691,50692],{"class":242,"line":34818},[240,50693,34690],{"class":257},[240,50695,50696],{"class":242,"line":34824},[240,50697,34696],{"class":246},[240,50699,50700,50702,50704,50706,50708,50710,50712],{"class":242,"line":34833},[240,50701,34702],{"class":257},[240,50703,11428],{"class":288},[240,50705,34707],{"class":257},[240,50707,2554],{"class":288},[240,50709,34712],{"class":257},[240,50711,1274],{"class":264},[240,50713,2129],{"class":257},[240,50715,50716],{"class":242,"line":34839},[240,50717,34722],{"class":246},[240,50719,50720,50722,50724,50726,50728],{"class":242,"line":34850},[240,50721,34728],{"class":257},[240,50723,11428],{"class":288},[240,50725,34733],{"class":257},[240,50727,4901],{"class":288},[240,50729,34738],{"class":257},[240,50731,50732],{"class":242,"line":34856},[240,50733,34744],{"class":246},[240,50735,50736,50738,50740,50742,50744],{"class":242,"line":34875},[240,50737,34750],{"class":257},[240,50739,11428],{"class":288},[240,50741,34712],{"class":257},[240,50743,1274],{"class":264},[240,50745,2129],{"class":257},[240,50747,50748],{"class":242,"line":34881},[240,50749,34764],{"class":246},[240,50751,50752,50754,50756,50758,50760],{"class":242,"line":34892},[240,50753,5355],{"class":288},[240,50755,34772],{"class":257},[240,50757,27989],{"class":288},[240,50759,33552],{"class":264},[240,50761,34779],{"class":257},[240,50763,50764],{"class":242,"line":34898},[240,50765,34785],{"class":246},[240,50767,50768,50770,50772],{"class":242,"line":34918},[240,50769,34556],{"class":257},[240,50771,440],{"class":288},[240,50773,34561],{"class":257},[240,50775,50776],{"class":242,"line":34934},[240,50777,34800],{"class":246},[240,50779,50780,50782,50784],{"class":242,"line":34940},[240,50781,34571],{"class":257},[240,50783,440],{"class":288},[240,50785,34576],{"class":257},[240,50787,50788],{"class":242,"line":34954},[240,50789,34815],{"class":246},[240,50791,50792],{"class":242,"line":34960},[240,50793,34821],{"class":257},[240,50795,50796],{"class":242,"line":34966},[240,50797,38302],{"class":246},[240,50799,50800,50802],{"class":242,"line":34977},[240,50801,34827],{"class":288},[240,50803,34830],{"class":257},[240,50805,50806],{"class":242,"line":34983},[240,50807,34836],{"class":246},[240,50809,50810,50812,50814],{"class":242,"line":34989},[240,50811,38317],{"class":257},[240,50813,440],{"class":288},[240,50815,34611],{"class":257},[240,50817,50818],{"class":242,"line":34999},[240,50819,34853],{"class":246},[240,50821,50822,50824,50826,50828,50830,50832,50834],{"class":242,"line":35005},[240,50823,38330],{"class":257},[240,50825,440],{"class":288},[240,50827,34628],{"class":257},[240,50829,34631],{"class":792},[240,50831,440],{"class":288},[240,50833,1643],{"class":264},[240,50835,2129],{"class":257},[240,50837,50838],{"class":242,"line":35016},[240,50839,34878],{"class":246},[240,50841,50842,50844,50846],{"class":242,"line":35022},[240,50843,38351],{"class":257},[240,50845,440],{"class":288},[240,50847,34654],{"class":257},[240,50849,50850],{"class":242,"line":35032},[240,50851,34895],{"class":246},[240,50853,50854,50856,50858,50860,50862,50864,50866],{"class":242,"line":35037},[240,50855,38364],{"class":257},[240,50857,11428],{"class":288},[240,50859,38369],{"class":257},[240,50861,2554],{"class":288},[240,50863,34712],{"class":257},[240,50865,1274],{"class":264},[240,50867,2129],{"class":257},[240,50869,50870,50872,50874,50876,50878],{"class":242,"line":35043},[240,50871,38382],{"class":257},[240,50873,11428],{"class":288},[240,50875,34733],{"class":257},[240,50877,4901],{"class":288},[240,50879,34738],{"class":257},[240,50881,50882],{"class":242,"line":35092},[240,50883,38395],{"class":246},[240,50885,50886,50888,50890,50892,50894],{"class":242,"line":35139},[240,50887,38400],{"class":257},[240,50889,11428],{"class":288},[240,50891,34712],{"class":257},[240,50893,1274],{"class":264},[240,50895,2129],{"class":257},[240,50897,50898],{"class":242,"line":35144},[240,50899,34957],{"class":246},[240,50901,50902],{"class":242,"line":35150},[240,50903,34963],{"class":246},[240,50905,50906,50908,50910],{"class":242,"line":35169},[240,50907,34969],{"class":257},[240,50909,2683],{"class":288},[240,50911,34974],{"class":257},[240,50913,50914],{"class":242,"line":35175},[240,50915,34980],{"class":246},[240,50917,50918],{"class":242,"line":35195},[240,50919,34986],{"class":246},[240,50921,50922,50924,50926],{"class":242,"line":35201},[240,50923,34992],{"class":257},[240,50925,2683],{"class":288},[240,50927,34974],{"class":257},[240,50929,50930],{"class":242,"line":35207},[240,50931,35002],{"class":246},[240,50933,50934,50936,50938],{"class":242,"line":35217},[240,50935,35008],{"class":257},[240,50937,2683],{"class":288},[240,50939,35013],{"class":257},[240,50941,50942],{"class":242,"line":35222},[240,50943,35019],{"class":246},[240,50945,50946,50948,50950],{"class":242,"line":35228},[240,50947,35025],{"class":257},[240,50949,2683],{"class":288},[240,50951,35013],{"class":257},[240,50953,50954],{"class":242,"line":35244},[240,50955,4353],{"emptyLinePlaceholder":2051},[240,50957,50958],{"class":242,"line":35289},[240,50959,35040],{"class":246},[240,50961,50962,50964,50966,50968,50970,50972,50974,50976,50978,50980,50982,50984,50986,50988,50990,50992,50994,50996,50998,51000],{"class":242,"line":35295},[240,50963,34397],{"class":264},[240,50965,789],{"class":257},[240,50967,5544],{"class":443},[240,50969,34405],{"class":264},[240,50971,35054],{"class":443},[240,50973,2991],{"class":264},[240,50975,35059],{"class":288},[240,50977,3040],{"class":264},[240,50979,35064],{"class":443},[240,50981,2991],{"class":264},[240,50983,35059],{"class":288},[240,50985,3040],{"class":264},[240,50987,5544],{"class":443},[240,50989,35075],{"class":257},[240,50991,2631],{"class":288},[240,50993,1643],{"class":264},[240,50995,35082],{"class":257},[240,50997,2631],{"class":288},[240,50999,1643],{"class":264},[240,51001,35089],{"class":257},[240,51003,51004,51006,51008,51010,51012,51014,51016,51018,51020,51022,51024,51026,51028,51030,51032,51034,51036,51038,51040,51042],{"class":242,"line":35301},[240,51005,34397],{"class":264},[240,51007,789],{"class":257},[240,51009,5544],{"class":443},[240,51011,34405],{"class":264},[240,51013,35103],{"class":443},[240,51015,2991],{"class":264},[240,51017,35059],{"class":288},[240,51019,3040],{"class":264},[240,51021,35112],{"class":443},[240,51023,2991],{"class":264},[240,51025,35059],{"class":288},[240,51027,3040],{"class":264},[240,51029,5544],{"class":443},[240,51031,35123],{"class":257},[240,51033,2631],{"class":288},[240,51035,1643],{"class":264},[240,51037,35130],{"class":257},[240,51039,2631],{"class":288},[240,51041,1643],{"class":264},[240,51043,35089],{"class":257},[240,51045,51046],{"class":242,"line":35307},[240,51047,4353],{"emptyLinePlaceholder":2051},[240,51049,51050],{"class":242,"line":35318},[240,51051,35147],{"class":246},[240,51053,51054,51056,51058,51060,51062,51064,51066],{"class":242,"line":35324},[240,51055,4450],{"class":288},[240,51057,35155],{"class":257},[240,51059,2631],{"class":288},[240,51061,1643],{"class":264},[240,51063,3034],{"class":257},[240,51065,3053],{"class":288},[240,51067,35166],{"class":257},[240,51069,51070],{"class":242,"line":35330},[240,51071,35172],{"class":246},[240,51073,51074,51076,51078,51080,51082,51084,51086],{"class":242,"line":35336},[240,51075,35178],{"class":257},[240,51077,2161],{"class":264},[240,51079,440],{"class":288},[240,51081,35185],{"class":257},[240,51083,2631],{"class":288},[240,51085,1643],{"class":264},[240,51087,35192],{"class":257},[240,51089,51090],{"class":242,"line":35354},[240,51091,35198],{"class":246},[240,51093,51094],{"class":242,"line":35368},[240,51095,35204],{"class":246},[240,51097,51098,51100,51102],{"class":242,"line":35377},[240,51099,35210],{"class":257},[240,51101,440],{"class":288},[240,51103,34260],{"class":257},[240,51105,51106],{"class":242,"line":35386},[240,51107,4353],{"emptyLinePlaceholder":2051},[240,51109,51110],{"class":242,"line":35395},[240,51111,35225],{"class":246},[240,51113,51114,51116,51118,51120,51122],{"class":242,"line":35404},[240,51115,35231],{"class":257},[240,51117,440],{"class":288},[240,51119,35236],{"class":257},[240,51121,2631],{"class":288},[240,51123,35241],{"class":257},[240,51125,51126,51128,51130,51132,51134,51136,51138,51140,51142,51144,51146,51148,51150,51152,51154,51156,51158,51160],{"class":242,"line":35410},[240,51127,34397],{"class":264},[240,51129,789],{"class":257},[240,51131,35251],{"class":443},[240,51133,2991],{"class":264},[240,51135,35256],{"class":288},[240,51137,3040],{"class":264},[240,51139,2643],{"class":443},[240,51141,2991],{"class":264},[240,51143,35256],{"class":288},[240,51145,3040],{"class":264},[240,51147,35269],{"class":443},[240,51149,35272],{"class":257},[240,51151,35275],{"class":288},[240,51153,3002],{"class":264},[240,51155,35280],{"class":257},[240,51157,2429],{"class":288},[240,51159,3002],{"class":264},[240,51161,32443],{"class":257},[240,51163,51164],{"class":242,"line":35416},[240,51165,38679],{"class":246},[240,51167,51168],{"class":242,"line":35424},[240,51169,38684],{"class":246},[240,51171,51172,51174,51176],{"class":242,"line":35429},[240,51173,38689],{"class":257},[240,51175,35313],{"class":443},[240,51177,2129],{"class":257},[240,51179,51180],{"class":242,"line":35435},[240,51181,35333],{"class":246},[240,51183,51184,51186,51188,51190,51192,51194],{"class":242,"line":35446},[240,51185,35339],{"class":257},[240,51187,440],{"class":288},[240,51189,35344],{"class":257},[240,51191,35347],{"class":792},[240,51193,440],{"class":288},[240,51195,3504],{"class":257},[240,51197,51198,51200,51202,51204],{"class":242,"line":35452},[240,51199,35357],{"class":443},[240,51201,2954],{"class":257},[240,51203,35362],{"class":264},[240,51205,35365],{"class":257},[240,51207,51208,51210],{"class":242,"line":35472},[240,51209,35371],{"class":443},[240,51211,35374],{"class":257},[240,51213,51214,51216],{"class":242,"line":35478},[240,51215,35380],{"class":443},[240,51217,35383],{"class":257},[240,51219,51220,51222],{"class":242,"line":35484},[240,51221,35389],{"class":443},[240,51223,35392],{"class":257},[240,51225,51226,51228],{"class":242,"line":35490},[240,51227,35398],{"class":443},[240,51229,35401],{"class":257},[240,51231,51232],{"class":242,"line":35507},[240,51233,35407],{"class":257},[240,51235,51236],{"class":242,"line":35513},[240,51237,35413],{"class":246},[240,51239,51240,51242],{"class":242,"line":35519},[240,51241,6042],{"class":288},[240,51243,35421],{"class":257},[240,51245,51246],{"class":242,"line":35525},[240,51247,4353],{"emptyLinePlaceholder":2051},[240,51249,51250],{"class":242,"line":35531},[240,51251,35432],{"class":246},[240,51253,51254,51256,51258],{"class":242,"line":35537},[240,51255,33893],{"class":288},[240,51257,35440],{"class":436},[240,51259,35443],{"class":257},[240,51261,51262],{"class":242,"line":35564},[240,51263,35449],{"class":246},[240,51265,51266,51268,51270,51272,51274,51276,51278,51280],{"class":242,"line":35588},[240,51267,35455],{"class":257},[240,51269,33639],{"class":792},[240,51271,440],{"class":288},[240,51273,789],{"class":257},[240,51275,2597],{"class":264},[240,51277,2479],{"class":257},[240,51279,1716],{"class":264},[240,51281,32443],{"class":257},[240,51283,51284],{"class":242,"line":35594},[240,51285,35475],{"class":246},[240,51287,51288],{"class":242,"line":35600},[240,51289,35481],{"class":246},[240,51291,51292],{"class":242,"line":35606},[240,51293,35487],{"class":246},[240,51295,51296,51298,51300,51302,51304,51306,51308],{"class":242,"line":35617},[240,51297,33673],{"class":257},[240,51299,1643],{"class":264},[240,51301,2479],{"class":257},[240,51303,1668],{"class":264},[240,51305,2479],{"class":257},[240,51307,1643],{"class":264},[240,51309,2129],{"class":257},[240,51311,51312],{"class":242,"line":35628},[240,51313,35510],{"class":246},[240,51315,51316],{"class":242,"line":35634},[240,51317,35516],{"class":246},[240,51319,51320],{"class":242,"line":35651},[240,51321,35522],{"class":246},[240,51323,51324],{"class":242,"line":35674},[240,51325,35528],{"class":246},[240,51327,51328],{"class":242,"line":35697},[240,51329,35534],{"class":246},[240,51331,51332,51334,51336,51338,51340,51342,51344,51346,51348],{"class":242,"line":35703},[240,51333,35540],{"class":257},[240,51335,35543],{"class":443},[240,51337,35546],{"class":257},[240,51339,35549],{"class":443},[240,51341,2479],{"class":257},[240,51343,35554],{"class":792},[240,51345,440],{"class":288},[240,51347,35559],{"class":443},[240,51349,2129],{"class":257},[240,51351,51352,51354,51356,51358,51360,51362,51364,51366,51368],{"class":242,"line":35708},[240,51353,35540],{"class":257},[240,51355,35543],{"class":443},[240,51357,35571],{"class":257},[240,51359,35574],{"class":443},[240,51361,2479],{"class":257},[240,51363,35554],{"class":792},[240,51365,440],{"class":288},[240,51367,35583],{"class":443},[240,51369,2129],{"class":257},[240,51371,51372],{"class":242,"line":35717},[240,51373,35591],{"class":246},[240,51375,51376],{"class":242,"line":35727},[240,51377,35597],{"class":257},[240,51379,51380],{"class":242,"line":35733},[240,51381,35603],{"class":246},[240,51383,51384,51386,51388],{"class":242,"line":35738},[240,51385,35609],{"class":257},[240,51387,35612],{"class":443},[240,51389,2129],{"class":257},[240,51391,51392,51394,51396],{"class":242,"line":35744},[240,51393,35620],{"class":257},[240,51395,35623],{"class":443},[240,51397,2129],{"class":257},[240,51399,51400],{"class":242,"line":35757},[240,51401,35631],{"class":246},[240,51403,51404,51406,51408,51410,51412,51414,51416],{"class":242,"line":35763},[240,51405,33673],{"class":257},[240,51407,1643],{"class":264},[240,51409,2479],{"class":257},[240,51411,1668],{"class":264},[240,51413,2479],{"class":257},[240,51415,1668],{"class":264},[240,51417,2129],{"class":257},[240,51419,51420,51422,51424,51426,51428,51430,51432,51434,51436],{"class":242,"line":35774},[240,51421,35540],{"class":257},[240,51423,35543],{"class":443},[240,51425,35658],{"class":257},[240,51427,35549],{"class":443},[240,51429,2479],{"class":257},[240,51431,35554],{"class":792},[240,51433,440],{"class":288},[240,51435,35669],{"class":443},[240,51437,2129],{"class":257},[240,51439,51440,51442,51444,51446,51448,51450,51452,51454,51456],{"class":242,"line":35785},[240,51441,35540],{"class":257},[240,51443,35543],{"class":443},[240,51445,35681],{"class":257},[240,51447,35574],{"class":443},[240,51449,2479],{"class":257},[240,51451,35554],{"class":792},[240,51453,440],{"class":288},[240,51455,35692],{"class":443},[240,51457,2129],{"class":257},[240,51459,51460],{"class":242,"line":35804},[240,51461,35700],{"class":246},[240,51463,51465],{"class":242,"line":51464},219,[240,51466,35597],{"class":257},[240,51468,51470,51472,51474],{"class":242,"line":51469},220,[240,51471,35609],{"class":257},[240,51473,35543],{"class":443},[240,51475,2129],{"class":257},[240,51477,51479,51481,51483],{"class":242,"line":51478},221,[240,51480,35620],{"class":257},[240,51482,35722],{"class":443},[240,51484,2129],{"class":257},[240,51486,51488],{"class":242,"line":51487},222,[240,51489,35730],{"class":257},[240,51491,51493],{"class":242,"line":51492},223,[240,51494,4353],{"emptyLinePlaceholder":2051},[240,51496,51498],{"class":242,"line":51497},224,[240,51499,35741],{"class":246},[240,51501,51503,51505,51507,51509,51511],{"class":242,"line":51502},225,[240,51504,3489],{"class":288},[240,51506,33166],{"class":264},[240,51508,4901],{"class":288},[240,51510,33171],{"class":443},[240,51512,5691],{"class":257},[240,51514,51516],{"class":242,"line":51515},226,[240,51517,35760],{"class":246},[240,51519,51521,51523,51525],{"class":242,"line":51520},227,[240,51522,46492],{"class":257},[240,51524,440],{"class":288},[240,51526,46497],{"class":257},[240,51528,51530,51532,51534],{"class":242,"line":51529},228,[240,51531,35777],{"class":257},[240,51533,440],{"class":288},[240,51535,35782],{"class":257},[240,51537,51539,51541,51543,51545,51547,51549,51551],{"class":242,"line":51538},229,[240,51540,35339],{"class":257},[240,51542,440],{"class":288},[240,51544,46514],{"class":257},[240,51546,35795],{"class":792},[240,51548,440],{"class":288},[240,51550,3002],{"class":264},[240,51552,2129],{"class":257},[240,51554,51556],{"class":242,"line":51555},230,[240,51557,35807],{"class":257},[23945,51559,51561],{"id":51560},"_242测试代码","2.4.2.测试代码",[19,51563,51564],{},"使用测试集进行测试与推理",[231,51566,51568],{"className":32324,"code":51567,"language":32326,"meta":236,"style":236},"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",[23,51569,51570,51576,51586,51596,51607,51617,51621,51625,51633,51638,51642,51659,51663,51667,51671,51675,51679,51711,51715,51723,51727,51739,51743,51747,51751,51755,51759,51763,51767,51771,51789,51803,51807,51817,51827,51837,51843,51847,51851,51859,51863,51879,51887,51891,51895,51903,51911,51915,51919,51923,51927,51933,51937,51947,51955,51963,51967,51971,51975,51983,51987,52003,52007,52011,52015,52027,52031,52043,52047,52051,52063,52067,52077,52081,52085,52097,52101,52109,52113,52117,52125,52129,52137,52141,52145,52149,52153,52157,52173,52181,52185,52189,52207,52213,52217,52227,52235,52243,52247,52251,52255,52259,52267,52271,52287,52291,52299,52307],{"__ignoreMap":236},[240,51571,51572,51574],{"class":242,"line":243},[240,51573,32338],{"class":288},[240,51575,32341],{"class":257},[240,51577,51578,51580,51582,51584],{"class":242,"line":250},[240,51579,32338],{"class":288},[240,51581,33361],{"class":257},[240,51583,33329],{"class":288},[240,51585,33366],{"class":257},[240,51587,51588,51590,51592,51594],{"class":242,"line":261},[240,51589,32683],{"class":288},[240,51591,33344],{"class":257},[240,51593,32338],{"class":288},[240,51595,33349],{"class":257},[240,51597,51598,51600,51602,51604],{"class":242,"line":277},[240,51599,32683],{"class":288},[240,51601,33314],{"class":257},[240,51603,32338],{"class":288},[240,51605,51606],{"class":257}," ImageFolder\n",[240,51608,51609,51611,51613,51615],{"class":242,"line":294},[240,51610,32683],{"class":288},[240,51612,33860],{"class":257},[240,51614,32338],{"class":288},[240,51616,46586],{"class":257},[240,51618,51619],{"class":242,"line":309},[240,51620,4353],{"emptyLinePlaceholder":2051},[240,51622,51623],{"class":242,"line":529},[240,51624,35897],{"class":246},[240,51626,51627,51629,51631],{"class":242,"line":549},[240,51628,33893],{"class":288},[240,51630,35904],{"class":436},[240,51632,33899],{"class":257},[240,51634,51635],{"class":242,"line":569},[240,51636,51637],{"class":246},"   # 导入自己的数据集，并进行数据处理\n",[240,51639,51640],{"class":242,"line":589},[240,51641,49907],{"class":246},[240,51643,51644,51646,51648,51650,51652,51654,51657],{"class":242,"line":715},[240,51645,49912],{"class":264},[240,51647,440],{"class":288},[240,51649,2768],{"class":288},[240,51651,2355],{"class":443},[240,51653,2657],{"class":264},[240,51655,51656],{"class":49923},"\u002Fdata\u002Ftest",[240,51658,27080],{"class":443},[240,51660,51661],{"class":242,"line":727},[240,51662,4353],{"emptyLinePlaceholder":2051},[240,51664,51665],{"class":242,"line":1730},[240,51666,49935],{"class":246},[240,51668,51669],{"class":242,"line":3582},[240,51670,49940],{"class":246},[240,51672,51673],{"class":242,"line":3596},[240,51674,49945],{"class":246},[240,51676,51677],{"class":242,"line":3601},[240,51678,49950],{"class":246},[240,51680,51681,51683,51685,51687,51689,51691,51693,51695,51697,51699,51701,51703,51705,51707,51709],{"class":242,"line":3607},[240,51682,49955],{"class":257},[240,51684,440],{"class":288},[240,51686,49960],{"class":257},[240,51688,49963],{"class":264},[240,51690,2479],{"class":257},[240,51692,49968],{"class":264},[240,51694,2479],{"class":257},[240,51696,49973],{"class":264},[240,51698,49976],{"class":257},[240,51700,49979],{"class":264},[240,51702,2479],{"class":257},[240,51704,49984],{"class":264},[240,51706,2479],{"class":257},[240,51708,49989],{"class":264},[240,51710,6609],{"class":257},[240,51712,51713],{"class":242,"line":3628},[240,51714,49996],{"class":246},[240,51716,51717,51719,51721],{"class":242,"line":3633},[240,51718,50001],{"class":257},[240,51720,440],{"class":288},[240,51722,50006],{"class":257},[240,51724,51725],{"class":242,"line":3647},[240,51726,50011],{"class":246},[240,51728,51729,51731,51733,51735,51737],{"class":242,"line":3652},[240,51730,50016],{"class":257},[240,51732,33447],{"class":264},[240,51734,2479],{"class":257},[240,51736,33447],{"class":264},[240,51738,44568],{"class":257},[240,51740,51741],{"class":242,"line":3681},[240,51742,50029],{"class":246},[240,51744,51745],{"class":242,"line":3686},[240,51746,50034],{"class":257},[240,51748,51749],{"class":242,"line":3703},[240,51750,50039],{"class":257},[240,51752,51753],{"class":242,"line":3708},[240,51754,50044],{"class":246},[240,51756,51757],{"class":242,"line":3713},[240,51758,50049],{"class":246},[240,51760,51761],{"class":242,"line":3718},[240,51762,4353],{"emptyLinePlaceholder":2051},[240,51764,51765],{"class":242,"line":3732},[240,51766,50058],{"class":246},[240,51768,51769],{"class":242,"line":3737},[240,51770,50063],{"class":246},[240,51772,51773,51775,51777,51779,51781,51783,51785,51787],{"class":242,"line":4530},[240,51774,35911],{"class":257},[240,51776,440],{"class":288},[240,51778,50072],{"class":257},[240,51780,50075],{"class":264},[240,51782,2479],{"class":257},[240,51784,50080],{"class":792},[240,51786,440],{"class":288},[240,51788,50085],{"class":257},[240,51790,51791,51793,51795,51797,51799,51801],{"class":242,"line":4544},[240,51792,35968],{"class":257},[240,51794,440],{"class":288},[240,51796,33480],{"class":257},[240,51798,33483],{"class":792},[240,51800,440],{"class":288},[240,51802,35979],{"class":257},[240,51804,51805],{"class":242,"line":4552},[240,51806,35984],{"class":246},[240,51808,51809,51811,51813,51815],{"class":242,"line":4557},[240,51810,35989],{"class":792},[240,51812,440],{"class":288},[240,51814,1643],{"class":264},[240,51816,33412],{"class":257},[240,51818,51819,51821,51823,51825],{"class":242,"line":4563},[240,51820,36000],{"class":792},[240,51822,440],{"class":288},[240,51824,33422],{"class":264},[240,51826,33412],{"class":257},[240,51828,51829,51831,51833,51835],{"class":242,"line":4569},[240,51830,36011],{"class":792},[240,51832,440],{"class":288},[240,51834,1274],{"class":264},[240,51836,2129],{"class":257},[240,51838,51839,51841],{"class":242,"line":4574},[240,51840,6042],{"class":288},[240,51842,36024],{"class":257},[240,51844,51845],{"class":242,"line":9899},[240,51846,4353],{"emptyLinePlaceholder":2051},[240,51848,51849],{"class":242,"line":9923},[240,51850,36033],{"class":246},[240,51852,51853,51855,51857],{"class":242,"line":9928},[240,51854,33893],{"class":288},[240,51856,36040],{"class":436},[240,51858,36043],{"class":257},[240,51860,51861],{"class":242,"line":9934},[240,51862,36048],{"class":246},[240,51864,51865,51867,51869,51871,51873,51875,51877],{"class":242,"line":9961},[240,51866,33183],{"class":257},[240,51868,440],{"class":288},[240,51870,33190],{"class":443},[240,51872,3658],{"class":288},[240,51874,33195],{"class":257},[240,51876,3655],{"class":288},[240,51878,36065],{"class":443},[240,51880,51881,51883,51885],{"class":242,"line":9966},[240,51882,33235],{"class":257},[240,51884,440],{"class":288},[240,51886,34235],{"class":257},[240,51888,51889],{"class":242,"line":9972},[240,51890,4353],{"emptyLinePlaceholder":2051},[240,51892,51893],{"class":242,"line":9984},[240,51894,36082],{"class":246},[240,51896,51897,51899,51901],{"class":242,"line":9996},[240,51898,36087],{"class":257},[240,51900,440],{"class":288},[240,51902,34288],{"class":264},[240,51904,51905,51907,51909],{"class":242,"line":10008},[240,51906,36096],{"class":257},[240,51908,440],{"class":288},[240,51910,5037],{"class":264},[240,51912,51913],{"class":242,"line":11667},[240,51914,4353],{"emptyLinePlaceholder":2051},[240,51916,51917],{"class":242,"line":11692},[240,51918,36109],{"class":246},[240,51920,51921],{"class":242,"line":11715},[240,51922,36114],{"class":246},[240,51924,51925],{"class":242,"line":11739},[240,51926,36119],{"class":246},[240,51928,51929,51931],{"class":242,"line":11744},[240,51930,36124],{"class":288},[240,51932,34830],{"class":257},[240,51934,51935],{"class":242,"line":11749},[240,51936,36131],{"class":246},[240,51938,51939,51941,51943,51945],{"class":242,"line":11754},[240,51940,5355],{"class":288},[240,51942,36138],{"class":257},[240,51944,27989],{"class":288},[240,51946,36143],{"class":257},[240,51948,51949,51951,51953],{"class":242,"line":11763},[240,51950,36148],{"class":257},[240,51952,440],{"class":288},[240,51954,36153],{"class":257},[240,51956,51957,51959,51961],{"class":242,"line":11768},[240,51958,36158],{"class":257},[240,51960,440],{"class":288},[240,51962,36163],{"class":257},[240,51964,51965],{"class":242,"line":11774},[240,51966,36168],{"class":246},[240,51968,51969],{"class":242,"line":11795},[240,51970,34821],{"class":257},[240,51972,51973],{"class":242,"line":11801},[240,51974,36177],{"class":246},[240,51976,51977,51979,51981],{"class":242,"line":11815},[240,51978,34606],{"class":257},[240,51980,440],{"class":288},[240,51982,36186],{"class":257},[240,51984,51985],{"class":242,"line":11821},[240,51986,36191],{"class":246},[240,51988,51989,51991,51993,51995,51997,51999,52001],{"class":242,"line":11848},[240,51990,34623],{"class":257},[240,51992,440],{"class":288},[240,51994,34628],{"class":257},[240,51996,34631],{"class":792},[240,51998,440],{"class":288},[240,52000,1643],{"class":264},[240,52002,2129],{"class":257},[240,52004,52005],{"class":242,"line":11857},[240,52006,36212],{"class":246},[240,52008,52009],{"class":242,"line":11863},[240,52010,36217],{"class":246},[240,52012,52013],{"class":242,"line":11871},[240,52014,36222],{"class":246},[240,52016,52017,52019,52021,52023,52025],{"class":242,"line":11876},[240,52018,36227],{"class":257},[240,52020,11428],{"class":288},[240,52022,34733],{"class":257},[240,52024,4901],{"class":288},[240,52026,36236],{"class":257},[240,52028,52029],{"class":242,"line":18552},[240,52030,36241],{"class":246},[240,52032,52033,52035,52037,52039,52041],{"class":242,"line":18558},[240,52034,36246],{"class":257},[240,52036,11428],{"class":288},[240,52038,36251],{"class":257},[240,52040,1274],{"class":264},[240,52042,2129],{"class":257},[240,52044,52045],{"class":242,"line":18581},[240,52046,4353],{"emptyLinePlaceholder":2051},[240,52048,52049],{"class":242,"line":18587},[240,52050,36264],{"class":246},[240,52052,52053,52055,52057,52059,52061],{"class":242,"line":18610},[240,52054,36269],{"class":257},[240,52056,440],{"class":288},[240,52058,36274],{"class":257},[240,52060,2683],{"class":288},[240,52062,36279],{"class":257},[240,52064,52065],{"class":242,"line":18624},[240,52066,36284],{"class":246},[240,52068,52069,52071,52073,52075],{"class":242,"line":18644},[240,52070,34397],{"class":264},[240,52072,789],{"class":257},[240,52074,36293],{"class":443},[240,52076,36296],{"class":257},[240,52078,52079],{"class":242,"line":18650},[240,52080,4353],{"emptyLinePlaceholder":2051},[240,52082,52083],{"class":242,"line":18661},[240,52084,36305],{"class":246},[240,52086,52087,52089,52091,52093,52095],{"class":242,"line":18684},[240,52088,3489],{"class":288},[240,52090,33166],{"class":264},[240,52092,4901],{"class":288},[240,52094,33171],{"class":443},[240,52096,5691],{"class":257},[240,52098,52099],{"class":242,"line":18706},[240,52100,36322],{"class":246},[240,52102,52103,52105,52107],{"class":242,"line":18711},[240,52104,33235],{"class":257},[240,52106,440],{"class":288},[240,52108,46497],{"class":257},[240,52110,52111],{"class":242,"line":18717},[240,52112,36335],{"class":246},[240,52114,52115],{"class":242,"line":18731},[240,52116,36340],{"class":246},[240,52118,52119,52121,52123],{"class":242,"line":18744},[240,52120,36345],{"class":257},[240,52122,36348],{"class":443},[240,52124,32443],{"class":257},[240,52126,52127],{"class":242,"line":18749},[240,52128,36355],{"class":246},[240,52130,52131,52133,52135],{"class":242,"line":18763},[240,52132,35968],{"class":257},[240,52134,440],{"class":288},[240,52136,36364],{"class":257},[240,52138,52139],{"class":242,"line":18768},[240,52140,36369],{"class":246},[240,52142,52143],{"class":242,"line":18774},[240,52144,36374],{"class":257},[240,52146,52147],{"class":242,"line":18779},[240,52148,4353],{"emptyLinePlaceholder":2051},[240,52150,52151],{"class":242,"line":18793},[240,52152,36383],{"class":246},[240,52154,52155],{"class":242,"line":18798},[240,52156,36388],{"class":246},[240,52158,52159,52161,52163,52165,52167,52169,52171],{"class":242,"line":18803},[240,52160,33183],{"class":257},[240,52162,440],{"class":288},[240,52164,33190],{"class":443},[240,52166,3658],{"class":288},[240,52168,33195],{"class":257},[240,52170,3655],{"class":288},[240,52172,36065],{"class":443},[240,52174,52175,52177,52179],{"class":242,"line":18817},[240,52176,33235],{"class":257},[240,52178,440],{"class":288},[240,52180,34235],{"class":257},[240,52182,52183],{"class":242,"line":18829},[240,52184,36417],{"class":246},[240,52186,52187],{"class":242,"line":18834},[240,52188,36422],{"class":246},[240,52190,52191,52193,52195,52197,52200,52202,52205],{"class":242,"line":18847},[240,52192,36427],{"class":257},[240,52194,440],{"class":288},[240,52196,2985],{"class":257},[240,52198,52199],{"class":443},"'猫'",[240,52201,2479],{"class":257},[240,52203,52204],{"class":443},"'狗'",[240,52206,35192],{"class":257},[240,52208,52209,52211],{"class":242,"line":18852},[240,52210,36124],{"class":288},[240,52212,34830],{"class":257},[240,52214,52215],{"class":242,"line":18857},[240,52216,36492],{"class":246},[240,52218,52219,52221,52223,52225],{"class":242,"line":18862},[240,52220,5355],{"class":288},[240,52222,36499],{"class":257},[240,52224,27989],{"class":288},[240,52226,36143],{"class":257},[240,52228,52229,52231,52233],{"class":242,"line":18875},[240,52230,34556],{"class":257},[240,52232,440],{"class":288},[240,52234,34561],{"class":257},[240,52236,52237,52239,52241],{"class":242,"line":18880},[240,52238,34571],{"class":257},[240,52240,440],{"class":288},[240,52242,34576],{"class":257},[240,52244,52245],{"class":242,"line":34579},[240,52246,4353],{"emptyLinePlaceholder":2051},[240,52248,52249],{"class":242,"line":34585},[240,52250,36528],{"class":246},[240,52252,52253],{"class":242,"line":34591},[240,52254,34821],{"class":257},[240,52256,52257],{"class":242,"line":34597},[240,52258,36537],{"class":246},[240,52260,52261,52263,52265],{"class":242,"line":34603},[240,52262,34606],{"class":257},[240,52264,440],{"class":288},[240,52266,34611],{"class":257},[240,52268,52269],{"class":242,"line":34614},[240,52270,36550],{"class":246},[240,52272,52273,52275,52277,52279,52281,52283,52285],{"class":242,"line":34620},[240,52274,34623],{"class":257},[240,52276,440],{"class":288},[240,52278,34628],{"class":257},[240,52280,34631],{"class":792},[240,52282,440],{"class":288},[240,52284,1643],{"class":264},[240,52286,2129],{"class":257},[240,52288,52289],{"class":242,"line":34640},[240,52290,36571],{"class":246},[240,52292,52293,52295,52297],{"class":242,"line":34646},[240,52294,36576],{"class":257},[240,52296,440],{"class":288},[240,52298,36581],{"class":257},[240,52300,52301,52303,52305],{"class":242,"line":34657},[240,52302,36586],{"class":257},[240,52304,440],{"class":288},[240,52306,36591],{"class":257},[240,52308,52309,52311,52313,52315,52317,52319,52321,52323],{"class":242,"line":34663},[240,52310,36596],{"class":264},[240,52312,789],{"class":257},[240,52314,36601],{"class":443},[240,52316,36604],{"class":257},[240,52318,36607],{"class":443},[240,52320,2479],{"class":257},[240,52322,36612],{"class":443},[240,52324,36615],{"class":257},[2019,52326,52327],{},"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":236,"searchDepth":250,"depth":250,"links":52329},[52330,52331,52332,52333],{"id":32537,"depth":261,"text":32538},{"id":39785,"depth":261,"text":39786},{"id":43218,"depth":261,"text":43219},{"id":47227,"depth":261,"text":47228},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":32529,"description":2048},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":52340,"title":52341,"body":52342,"description":2048,"extension":2049,"meta":52349,"navigation":2051,"path":52350,"seo":52351,"stem":52352,"__hash__":52353},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":52343,"toc":52347},[52344],[10,52345,52341],{"id":52346},"_3yolo模型学习",{"title":236,"searchDepth":250,"depth":250,"links":52348},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":52341,"description":2048},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":52355,"title":52356,"body":52357,"description":52364,"extension":2049,"meta":52365,"navigation":2051,"path":52367,"seo":52368,"stem":52369,"__hash__":52370},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":52358,"toc":52362},[52359],[19,52360,52361],{},"yolo模型还未补充",{"title":236,"searchDepth":250,"depth":250,"links":52363},[],"深度学习学习",{"category":52366},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":52356,"description":52364},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":52372,"title":52373,"body":52374,"description":2048,"extension":2049,"meta":52399,"navigation":2051,"path":52400,"seo":52401,"stem":52402,"__hash__":52403},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":52375,"toc":52397},[52376,52379,52382,52387,52394],[10,52377,52373],{"id":52378},"_1工具",[19,52380,52381],{},"提示错误插件：有问题会提前报错",[19,52383,52384],{},[219,52385],{"alt":236,"src":52386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[19,52388,52389],{},[254,52390,52393],{"href":52391,"rel":52392},"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",[25811],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[19,52395,52396],{},"alt键加上下箭头可以实现语句的移动",{"title":236,"searchDepth":250,"depth":250,"links":52398},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":52373,"description":2048},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":52405,"title":52406,"body":52407,"description":2048,"extension":2049,"meta":55261,"navigation":2051,"path":55262,"seo":55263,"stem":55264,"__hash__":55265},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":52408,"toc":55212},[52409,52412,52416,52420,52425,52428,52433,52437,52444,52449,52456,52461,52468,52473,52477,52482,52485,52489,52494,52498,52503,52506,52509,52512,52515,52518,52521,52524,52527,52532,52537,52542,52546,52549,52552,52556,52561,52564,52572,52577,52594,52602,52607,52612,52617,52622,52627,52630,52635,52640,52644,52653,52658,52663,52667,52672,52675,52679,52684,52692,52697,52702,52705,52710,52715,52720,52723,52726,52729,52734,52739,52742,52747,52750,52755,52758,52761,52764,52769,52772,52775,52790,52795,52800,52805,52808,52811,52814,52828,52831,52836,52841,52844,52847,52850,52853,52856,52859,52862,52866,52870,52875,52879,52882,52887,52892,52895,52900,52903,52907,52912,52915,52918,52921,52924,52927,52930,52933,52936,52939,52943,52948,52953,52958,52961,52964,52968,52973,52976,52980,52983,52986,52991,52994,52997,53001,53005,53008,53013,53018,53021,53050,53055,53060,53065,53070,53074,53079,53083,53088,53091,53095,53099,53104,53108,53113,53118,53122,53127,53130,53132,53135,53140,53144,53149,53153,53157,53162,53167,53172,53177,53181,53186,53191,53196,53199,53202,53207,53210,53215,53220,53225,53230,53234,54032,54036,54378,54383,54386,54389,54392,54395,54398,54401,54404,54407,54409,54412,54414,54417,54421,54426,54429,54432,54435,54439,54444,54449,54469,54472,54476,54481,54486,54503,54507,54536,54540,54562,54564,54603,54611,54617,54621,54624,54627,54632,54637,54640,54643,54646,54651,54656,54659,54662,54665,54668,54671,54674,54677,54680,54683,54686,54689,54691,54694,54697,54700,54703,54706,54709,54712,54715,54719,54724,54727,54732,54735,54738,54741,54744,54747,54750,54753,54755,54758,54761,54764,54767,54770,54773,54777,54780,54789,54792,54797,54800,54805,54808,54811,54814,54817,54820,54823,54826,54830,54834,54837,54840,54845,54850,54855,54859,54864,54869,54872,54875,54878,54881,54884,54889,54892,54897,54899,54904,54907,54911,54916,54919,54922,54927,54931,54934,54939,54942,54945,54974,54979,54982,54985,54988,54991,54994,54998,55001,55087,55091,55094,55099,55104,55111,55114,55117,55120,55123,55126,55131,55136,55139,55142,55145,55148,55151,55154,55157,55160,55163,55165,55168,55172,55177,55182,55187,55190,55195,55200,55203,55206,55209],[10,52410,52406],{"id":52411},"_2基础语法",[14,52413,52415],{"id":52414},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[32,52417,52419],{"id":52418},"_211-js组成","2.1.1 js组成",[1826,52421,52422],{},[1829,52423,52424],{},"js是编程语言，html和css不是编程语言，是标记语言",[19,52426,52427],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[1826,52429,52430],{"start":250},[1829,52431,52432],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[32,52434,52436],{"id":52435},"_212-js书写位置","2.1.2 js书写位置",[1826,52438,52439],{},[1829,52440,52441],{},[68,52442,52443],{},"内部 JavaScript",[19,52445,52446],{},[219,52447],{"alt":236,"src":52448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[1826,52450,52451],{"start":250},[1829,52452,52453],{},[68,52454,52455],{},"外部 JavaScript",[19,52457,52458],{},[219,52459],{"alt":236,"src":52460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[1826,52462,52463],{"start":261},[1829,52464,52465],{},[68,52466,52467],{},"内联 JavaScript",[19,52469,52470],{},[219,52471],{"alt":236,"src":52472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[32,52474,52476],{"id":52475},"_213-javascript注释","2.1.3 JavaScript注释",[19,52478,52479],{},[219,52480],{"alt":236,"src":52481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[19,52483,52484],{},"alt+shift+a一定要记住！",[32,52486,52488],{"id":52487},"_214-javascript结束符","2.1.4 JavaScript结束符",[19,52490,52491],{},[219,52492],{"alt":236,"src":52493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[32,52495,52497],{"id":52496},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[1826,52499,52500],{},[1829,52501,52502],{},"输出语法：",[19,52504,52505],{},"①document.write('要出的内容')",[19,52507,52508],{},"向body内输出内容；",[19,52510,52511],{},"如果输出的内容写的是标签，也会被解析cheng",[19,52513,52514],{},"②alert('要出的内容')",[19,52516,52517],{},"页面弹出警告对话框",[19,52519,52520],{},"③console.log('控制台打印')",[19,52522,52523],{},"控制台输出语法，程序员调试使用",[19,52525,52526],{},"输入log就行，自动生成：",[19,52528,52529],{},[219,52530],{"alt":236,"src":52531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[1826,52533,52534],{"start":250},[1829,52535,52536],{},"输入语法：",[19,52538,52539],{},[219,52540],{"alt":236,"src":52541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[32,52543,52545],{"id":52544},"_2116-字面量","21.1.6 字面量",[19,52547,52548],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[19,52550,52551],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[14,52553,52555],{"id":52554},"_22-变量","2.2 变量",[1826,52557,52558],{},[1829,52559,52560],{},"变量声明",[19,52562,52563],{},"let 变量名",[3100,52565,52566,52569],{},[1829,52567,52568],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[1829,52570,52571],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[1826,52573,52574],{"start":250},[1829,52575,52576],{},"变量赋值",[231,52578,52582],{"className":52579,"code":52580,"language":52581,"meta":236,"style":236},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[23,52583,52584,52589],{"__ignoreMap":236},[240,52585,52586],{"class":242,"line":243},[240,52587,52588],{"class":257},"let age\n",[240,52590,52591],{"class":242,"line":250},[240,52592,52593],{"class":257},"age=18\n",[1826,52595,52596,52599],{"start":261},[1829,52597,52598],{},"连这些（变量的初始化）：let age=18",[1829,52600,52601],{},"更新变量",[19,52603,52604],{},[219,52605],{"alt":236,"src":52606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[1826,52608,52609],{"start":294},[1829,52610,52611],{},"声明多个变量",[19,52613,52614],{},[219,52615],{"alt":236,"src":52616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[1826,52618,52619],{"start":309},[1829,52620,52621],{},"变量命名规则与规范",[19,52623,52624],{},[219,52625],{"alt":236,"src":52626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[19,52628,52629],{},"遵守小驼峰！",[1826,52631,52632],{"start":529},[1829,52633,52634],{},"变量拓展-let和var的区别",[19,52636,52637],{},[219,52638],{"alt":236,"src":52639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[14,52641,52643],{"id":52642},"_23-数组","2.3 数组",[231,52645,52647],{"className":52579,"code":52646,"language":52581,"meta":236,"style":236},"let arr = []\n",[23,52648,52649],{"__ignoreMap":236},[240,52650,52651],{"class":242,"line":243},[240,52652,52646],{"class":257},[19,52654,52655],{},[219,52656],{"alt":236,"src":52657},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[19,52659,52660],{},[219,52661],{"alt":236,"src":52662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[14,52664,52666],{"id":52665},"_24-常量","2.4 常量",[19,52668,52669],{},[219,52670],{"alt":236,"src":52671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[19,52673,52674],{},"const — 类似于 let ，但是变量的值无法被修改",[14,52676,52678],{"id":52677},"_25-数据类型","2.5 数据类型",[19,52680,52681],{},[219,52682],{"alt":236,"src":52683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[1826,52685,52686,52689],{},[1829,52687,52688],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[1829,52690,52691],{},"算数运算符：",[19,52693,52694],{},[219,52695],{"alt":236,"src":52696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[1826,52698,52699],{"start":261},[1829,52700,52701],{},"数字类型（Number）",[19,52703,52704],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[19,52706,52707],{},[219,52708],{"alt":236,"src":52709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[1826,52711,52712],{"start":277},[1829,52713,52714],{},"字符串类型（string）",[19,52716,52717],{},[219,52718],{"alt":236,"src":52719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[19,52721,52722],{},"反引号也是可以使用的",[19,52724,52725],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[19,52727,52728],{},"例如：document.write(\"我今年\"+age+\"岁\")",[1826,52730,52731],{"start":294},[1829,52732,52733],{},"模板字符串",[19,52735,52736],{},[219,52737],{"alt":236,"src":52738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[19,52740,52741],{},"类似于python的字符串格式化",[1826,52743,52744],{"start":309},[1829,52745,52746],{},"布尔类型",[19,52748,52749],{},"true 和 false",[1826,52751,52752],{"start":529},[1829,52753,52754],{},"未定义类型（underfined）",[19,52756,52757],{},"表示没有赋值",[19,52759,52760],{},"未定义类型是比较特殊的类型，只有一个值undefined",[19,52762,52763],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[1826,52765,52766],{"start":549},[1829,52767,52768],{},"null（空类型）",[19,52770,52771],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[19,52773,52774],{},"赋值了，但是内容为空",[231,52776,52778],{"className":52579,"code":52777,"language":52581,"meta":236,"style":236},"typeof null\n输出的是'object'，是一个对象数据类型\n",[23,52779,52780,52785],{"__ignoreMap":236},[240,52781,52782],{"class":242,"line":243},[240,52783,52784],{"class":257},"typeof null\n",[240,52786,52787],{"class":242,"line":250},[240,52788,52789],{"class":257},"输出的是'object'，是一个对象数据类型\n",[1826,52791,52792],{"start":569},[1829,52793,52794],{},"控制台检测数据类型",[19,52796,52797],{},[219,52798],{"alt":236,"src":52799},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[1826,52801,52802],{"start":589},[1829,52803,52804],{},"类型转换",[19,52806,52807],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[19,52809,52810],{},"转换方式：隐式转换和显示转换",[19,52812,52813],{},"①隐式转换",[3100,52815,52816,52819,52822,52825],{},[1829,52817,52818],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[1829,52820,52821],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[1829,52823,52824],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[1829,52826,52827],{},"任何数据和字符串相加结果都是字符串",[19,52829,52830],{},"②显示转换",[19,52832,52833],{},[219,52834],{"alt":236,"src":52835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[19,52837,52838],{},[219,52839],{"alt":236,"src":52840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[19,52842,52843],{},"在输入的时候要用好隐式转换，简单写起来",[19,52845,52846],{},"let num = +prompt(’请输入数字：‘)",[19,52848,52849],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[19,52851,52852],{},"console.log(parseInt('12.333px'))",[19,52854,52855],{},"输出为：12",[19,52857,52858],{},"console.log(parseInt('a'a'a12.333px'))",[19,52860,52861],{},"输出：NaN",[14,52863,52865],{"id":52864},"_26-运算符","2.6 运算符",[32,52867,52869],{"id":52868},"_261-赋值运算符","2.6.1 赋值运算符",[19,52871,52872],{},[219,52873],{"alt":236,"src":52874},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[32,52876,52878],{"id":52877},"_262-一元运算符","2.6.2 一元运算符",[19,52880,52881],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[19,52883,52884],{},[219,52885],{"alt":236,"src":52886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[19,52888,52889],{},[219,52890],{"alt":236,"src":52891},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[19,52893,52894],{},"两者的区别：",[19,52896,52897],{},[219,52898],{"alt":236,"src":52899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[19,52901,52902],{},"前置先自加；后置后加，代码执行完之后再加",[32,52904,52906],{"id":52905},"_263-比较运算符","2.6.3 比较运算符",[19,52908,52909],{},[219,52910],{"alt":236,"src":52911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[19,52913,52914],{},"比较运算符也有隐式转换",[19,52916,52917],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[19,52919,52920],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[19,52922,52923],{},"要使用三等，开发的时候",[19,52925,52926],{},"NaN不等于任何人，包括它自己",[19,52928,52929],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[19,52931,52932],{},"7\u002F10=0.7",[19,52934,52935],{},"最后：0.5+0.2=0.7",[19,52937,52938],{},"字符串比较，比较的是字符对应的ASCII码",[32,52940,52942],{"id":52941},"_264-逻辑运算符","2.6.4 逻辑运算符",[19,52944,52945],{},[219,52946],{"alt":236,"src":52947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[19,52949,52950],{},[219,52951],{"alt":236,"src":52952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[19,52954,52955],{},[219,52956],{"alt":236,"src":52957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[19,52959,52960],{},"上述题目选D",[19,52962,52963],{},"与真2假1；或真1假2",[32,52965,52967],{"id":52966},"_265-运算符优先级","2.6.5 运算符优先级",[19,52969,52970],{},[219,52971],{"alt":236,"src":52972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[19,52974,52975],{},"先算逻辑与，后算逻辑或",[14,52977,52979],{"id":52978},"_27-语句","2.7 语句",[19,52981,52982],{},"表达式：是可以被求值的代码，会有结果给我们",[19,52984,52985],{},"语句：语句是可以被执行的代码，例如prompt()",[19,52987,52988],{},[219,52989],{"alt":236,"src":52990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[19,52992,52993],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[19,52995,52996],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[32,52998,53000],{"id":52999},"_271-分支语句","2.7.1 分支语句",[23945,53002,53004],{"id":53003},"_2711-if分支语句","2.7.1.1 if分支语句",[19,53006,53007],{},"if语句单行简单的话，可以不写{}，写在一行就行",[1826,53009,53010],{},[1829,53011,53012],{},"单分支语句",[19,53014,53015],{},[219,53016],{"alt":236,"src":53017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[19,53019,53020],{},"除了0，所有数字都为真",[231,53022,53024],{"className":52579,"code":53023,"language":52581,"meta":236,"style":236},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[23,53025,53026,53031,53036,53041,53045],{"__ignoreMap":236},[240,53027,53028],{"class":242,"line":243},[240,53029,53030],{"class":257},"if（0) {\n",[240,53032,53033],{"class":242,"line":250},[240,53034,53035],{"class":257},"    let a=1\n",[240,53037,53038],{"class":242,"line":261},[240,53039,53040],{"class":257},"    alert(typeof a)\n",[240,53042,53043],{"class":242,"line":277},[240,53044,312],{"class":257},[240,53046,53047],{"class":242,"line":294},[240,53048,53049],{"class":257},"不输出，括号为假\n",[1826,53051,53052],{"start":250},[1829,53053,53054],{},"双分支语句",[19,53056,53057],{},[219,53058],{"alt":236,"src":53059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[1826,53061,53062],{"start":261},[1829,53063,53064],{},"多分支语句",[19,53066,53067],{},[219,53068],{"alt":236,"src":53069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[23945,53071,53073],{"id":53072},"_2712-三元运算符","2.7.1.2 三元运算符",[19,53075,53076],{},[219,53077],{"alt":236,"src":53078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[23945,53080,53082],{"id":53081},"_2713-switch语句","2.7.1.3 switch语句",[19,53084,53085],{},[219,53086],{"alt":236,"src":53087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[19,53089,53090],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[32,53092,53094],{"id":53093},"_272-循环语句","2.7.2 循环语句",[23945,53096,53098],{"id":53097},"_2721-断点演示","2.7.2.1 断点演示",[19,53100,53101],{},[219,53102],{"alt":236,"src":53103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[23945,53105,53107],{"id":53106},"_2722-while循环","2.7.2.2 while循环",[19,53109,53110],{},[219,53111],{"alt":236,"src":53112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[19,53114,53115],{},[219,53116],{"alt":236,"src":53117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[23945,53119,53121],{"id":53120},"_2723-for循环","2.7.2.3 for循环",[19,53123,53124],{},[219,53125],{"alt":236,"src":53126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[19,53128,53129],{},"for(;;) {",[19,53131,3040],{},[19,53133,53134],{},"表示无限循环",[19,53136,53137],{},[219,53138],{"alt":236,"src":53139},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[23945,53141,53143],{"id":53142},"_2724-循环的退出","2.7.2.4 循环的退出",[19,53145,53146],{},[219,53147],{"alt":236,"src":53148},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[14,53150,53152],{"id":53151},"_28-数组","2.8 数组",[32,53154,53156],{"id":53155},"_281-基础认识","2.8.1 基础认识",[19,53158,53159],{},[219,53160],{"alt":236,"src":53161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[19,53163,53164],{},[219,53165],{"alt":236,"src":53166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[19,53168,53169],{},[219,53170],{"alt":236,"src":53171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[19,53173,53174],{},[219,53175],{"alt":236,"src":53176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[32,53178,53180],{"id":53179},"_282-操作数组","2.8.2 操作数组",[19,53182,53183],{},[219,53184],{"alt":236,"src":53185},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[1826,53187,53188],{},[1829,53189,53190],{},"添加元素",[19,53192,53193],{},[219,53194],{"alt":236,"src":53195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[19,53197,53198],{},"console.log(arr.push('green'))",[19,53200,53201],{},"输出结果：为新数组的长度",[19,53203,53204],{},[219,53205],{"alt":236,"src":53206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[19,53208,53209],{},"push用的非常多，一定要记住",[1826,53211,53212],{},[1829,53213,53214],{},"删除元素",[19,53216,53217],{},[219,53218],{"alt":236,"src":53219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[19,53221,53222],{},[219,53223],{"alt":236,"src":53224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[19,53226,53227],{},[219,53228],{"alt":236,"src":53229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[32,53231,53233],{"id":53232},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[231,53235,53237],{"className":52579,"code":53236,"language":52581,"meta":236,"style":236},"\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",[23,53238,53239,53252,53268,53272,53281,53299,53323,53345,53359,53367,53374,53385,53396,53400,53404,53411,53423,53437,53450,53469,53486,53501,53513,53525,53536,53540,53544,53554,53564,53576,53587,53599,53610,53614,53618,53630,53634,53648,53652,53656,53667,53681,53693,53707,53711,53720,53728,53732,53741,53745,53754,53759,53764,53777,53805,53810,53815,53840,53845,53849,53854,53859,53874,53878,53883,53912,53924,53940,53956,53970,53975,53982,53986,53991,54004,54012,54020,54024],{"__ignoreMap":236},[240,53240,53241,53244,53247,53250],{"class":242,"line":243},[240,53242,53243],{"class":257},"\u003C!",[240,53245,53246],{"class":253},"DOCTYPE",[240,53248,53249],{"class":436}," html",[240,53251,447],{"class":257},[240,53253,53254,53256,53258,53261,53263,53266],{"class":242,"line":250},[240,53255,431],{"class":257},[240,53257,52581],{"class":253},[240,53259,53260],{"class":436}," lang",[240,53262,440],{"class":257},[240,53264,53265],{"class":443},"\"en\"",[240,53267,447],{"class":257},[240,53269,53270],{"class":242,"line":261},[240,53271,4353],{"emptyLinePlaceholder":2051},[240,53273,53274,53276,53279],{"class":242,"line":277},[240,53275,431],{"class":257},[240,53277,53278],{"class":253},"head",[240,53280,447],{"class":257},[240,53282,53283,53286,53289,53292,53294,53297],{"class":242,"line":294},[240,53284,53285],{"class":257},"    \u003C",[240,53287,53288],{"class":253},"meta",[240,53290,53291],{"class":436}," charset",[240,53293,440],{"class":257},[240,53295,53296],{"class":443},"\"UTF-8\"",[240,53298,447],{"class":257},[240,53300,53301,53303,53305,53308,53310,53313,53316,53318,53321],{"class":242,"line":309},[240,53302,53285],{"class":257},[240,53304,53288],{"class":253},[240,53306,53307],{"class":436}," http-equiv",[240,53309,440],{"class":257},[240,53311,53312],{"class":443},"\"X-UA-Compatible\"",[240,53314,53315],{"class":436}," content",[240,53317,440],{"class":257},[240,53319,53320],{"class":443},"\"IE=edge\"",[240,53322,447],{"class":257},[240,53324,53325,53327,53329,53331,53333,53336,53338,53340,53343],{"class":242,"line":529},[240,53326,53285],{"class":257},[240,53328,53288],{"class":253},[240,53330,16869],{"class":436},[240,53332,440],{"class":257},[240,53334,53335],{"class":443},"\"viewport\"",[240,53337,53315],{"class":436},[240,53339,440],{"class":257},[240,53341,53342],{"class":443},"\"width=device-width, initial-scale=1.0\"",[240,53344,447],{"class":257},[240,53346,53347,53349,53352,53355,53357],{"class":242,"line":549},[240,53348,53285],{"class":257},[240,53350,53351],{"class":253},"title",[240,53353,53354],{"class":257},">Document\u003C\u002F",[240,53356,53351],{"class":253},[240,53358,447],{"class":257},[240,53360,53361,53363,53365],{"class":242,"line":569},[240,53362,53285],{"class":257},[240,53364,2019],{"class":253},[240,53366,447],{"class":257},[240,53368,53369,53372],{"class":242,"line":589},[240,53370,53371],{"class":253},"        *",[240,53373,258],{"class":257},[240,53375,53376,53379,53381,53383],{"class":242,"line":715},[240,53377,53378],{"class":264},"            margin",[240,53380,268],{"class":257},[240,53382,1274],{"class":264},[240,53384,274],{"class":257},[240,53386,53387,53390,53392,53394],{"class":242,"line":727},[240,53388,53389],{"class":264},"            padding",[240,53391,268],{"class":257},[240,53393,1274],{"class":264},[240,53395,274],{"class":257},[240,53397,53398],{"class":242,"line":1730},[240,53399,4482],{"class":257},[240,53401,53402],{"class":242,"line":3582},[240,53403,4353],{"emptyLinePlaceholder":2051},[240,53405,53406,53409],{"class":242,"line":3596},[240,53407,53408],{"class":436},"        .box",[240,53410,258],{"class":257},[240,53412,53413,53416,53418,53421],{"class":242,"line":3601},[240,53414,53415],{"class":264},"            display",[240,53417,268],{"class":257},[240,53419,53420],{"class":264},"flex",[240,53422,274],{"class":257},[240,53424,53425,53428,53430,53433,53435],{"class":242,"line":3607},[240,53426,53427],{"class":264},"            width",[240,53429,268],{"class":257},[240,53431,53432],{"class":264},"700",[240,53434,289],{"class":288},[240,53436,274],{"class":257},[240,53438,53439,53442,53444,53446,53448],{"class":242,"line":3628},[240,53440,53441],{"class":264},"            height",[240,53443,268],{"class":257},[240,53445,5925],{"class":264},[240,53447,289],{"class":288},[240,53449,274],{"class":257},[240,53451,53452,53455,53457,53459,53461,53464,53467],{"class":242,"line":3633},[240,53453,53454],{"class":264},"            border-left",[240,53456,268],{"class":257},[240,53458,1643],{"class":264},[240,53460,289],{"class":288},[240,53462,53463],{"class":264}," solid",[240,53465,53466],{"class":264}," pink",[240,53468,274],{"class":257},[240,53470,53471,53474,53476,53478,53480,53482,53484],{"class":242,"line":3647},[240,53472,53473],{"class":264},"            border-bottom",[240,53475,268],{"class":257},[240,53477,1643],{"class":264},[240,53479,289],{"class":288},[240,53481,53463],{"class":264},[240,53483,53466],{"class":264},[240,53485,274],{"class":257},[240,53487,53488,53490,53492,53494,53496,53499],{"class":242,"line":3652},[240,53489,53378],{"class":264},[240,53491,268],{"class":257},[240,53493,2754],{"class":264},[240,53495,289],{"class":288},[240,53497,53498],{"class":264}," auto",[240,53500,274],{"class":257},[240,53502,53503,53506,53508,53511],{"class":242,"line":3681},[240,53504,53505],{"class":264},"            justify-content",[240,53507,268],{"class":257},[240,53509,53510],{"class":264},"space-around",[240,53512,274],{"class":257},[240,53514,53515,53518,53520,53523],{"class":242,"line":3686},[240,53516,53517],{"class":264},"            align-items",[240,53519,268],{"class":257},[240,53521,53522],{"class":264},"flex-end",[240,53524,274],{"class":257},[240,53526,53527,53530,53532,53534],{"class":242,"line":3703},[240,53528,53529],{"class":264},"            text-align",[240,53531,268],{"class":257},[240,53533,971],{"class":264},[240,53535,274],{"class":257},[240,53537,53538],{"class":242,"line":3708},[240,53539,4482],{"class":257},[240,53541,53542],{"class":242,"line":3713},[240,53543,4353],{"emptyLinePlaceholder":2051},[240,53545,53546,53548,53550,53552],{"class":242,"line":3718},[240,53547,53408],{"class":436},[240,53549,3053],{"class":288},[240,53551,330],{"class":253},[240,53553,258],{"class":257},[240,53555,53556,53558,53560,53562],{"class":242,"line":3732},[240,53557,53415],{"class":264},[240,53559,268],{"class":257},[240,53561,53420],{"class":264},[240,53563,274],{"class":257},[240,53565,53566,53568,53570,53572,53574],{"class":242,"line":3737},[240,53567,53427],{"class":264},[240,53569,268],{"class":257},[240,53571,2754],{"class":264},[240,53573,289],{"class":288},[240,53575,274],{"class":257},[240,53577,53578,53581,53583,53585],{"class":242,"line":4530},[240,53579,53580],{"class":264},"            background-color",[240,53582,268],{"class":257},[240,53584,1924],{"class":264},[240,53586,274],{"class":257},[240,53588,53589,53592,53594,53597],{"class":242,"line":4544},[240,53590,53591],{"class":264},"            flex-direction",[240,53593,268],{"class":257},[240,53595,53596],{"class":264},"column",[240,53598,274],{"class":257},[240,53600,53601,53603,53605,53608],{"class":242,"line":4552},[240,53602,53505],{"class":264},[240,53604,268],{"class":257},[240,53606,53607],{"class":264},"space-between",[240,53609,274],{"class":257},[240,53611,53612],{"class":242,"line":4557},[240,53613,4482],{"class":257},[240,53615,53616],{"class":242,"line":4563},[240,53617,4353],{"emptyLinePlaceholder":2051},[240,53619,53620,53622,53625,53628],{"class":242,"line":4569},[240,53621,53408],{"class":436},[240,53623,53624],{"class":253}," div",[240,53626,53627],{"class":253}," span",[240,53629,258],{"class":257},[240,53631,53632],{"class":242,"line":4574},[240,53633,4353],{"emptyLinePlaceholder":2051},[240,53635,53636,53639,53641,53644,53646],{"class":242,"line":9899},[240,53637,53638],{"class":264},"            margin-top",[240,53640,268],{"class":257},[240,53642,53643],{"class":264},"-20",[240,53645,289],{"class":288},[240,53647,274],{"class":257},[240,53649,53650],{"class":242,"line":9923},[240,53651,4482],{"class":257},[240,53653,53654],{"class":242,"line":9928},[240,53655,4353],{"emptyLinePlaceholder":2051},[240,53657,53658,53660,53662,53665],{"class":242,"line":9934},[240,53659,53408],{"class":436},[240,53661,53624],{"class":253},[240,53663,53664],{"class":253}," h4",[240,53666,258],{"class":257},[240,53668,53669,53672,53674,53677,53679],{"class":242,"line":9961},[240,53670,53671],{"class":264},"            margin-bottom",[240,53673,268],{"class":257},[240,53675,53676],{"class":264},"-35",[240,53678,289],{"class":288},[240,53680,274],{"class":257},[240,53682,53683,53685,53687,53689,53691],{"class":242,"line":9966},[240,53684,53427],{"class":264},[240,53686,268],{"class":257},[240,53688,2457],{"class":264},[240,53690,289],{"class":288},[240,53692,274],{"class":257},[240,53694,53695,53698,53700,53703,53705],{"class":242,"line":9972},[240,53696,53697],{"class":264},"            margin-left",[240,53699,268],{"class":257},[240,53701,53702],{"class":264},"-10",[240,53704,289],{"class":288},[240,53706,274],{"class":257},[240,53708,53709],{"class":242,"line":9984},[240,53710,4482],{"class":257},[240,53712,53713,53716,53718],{"class":242,"line":9996},[240,53714,53715],{"class":257},"    \u003C\u002F",[240,53717,2019],{"class":253},[240,53719,447],{"class":257},[240,53721,53722,53724,53726],{"class":242,"line":10008},[240,53723,592],{"class":257},[240,53725,53278],{"class":253},[240,53727,447],{"class":257},[240,53729,53730],{"class":242,"line":11667},[240,53731,4353],{"emptyLinePlaceholder":2051},[240,53733,53734,53736,53739],{"class":242,"line":11692},[240,53735,431],{"class":257},[240,53737,53738],{"class":253},"body",[240,53740,447],{"class":257},[240,53742,53743],{"class":242,"line":11715},[240,53744,4353],{"emptyLinePlaceholder":2051},[240,53746,53747,53749,53752],{"class":242,"line":11739},[240,53748,53285],{"class":257},[240,53750,53751],{"class":253},"script",[240,53753,447],{"class":257},[240,53755,53756],{"class":242,"line":11744},[240,53757,53758],{"class":246},"        \u002F\u002F 1. 四次弹框效果\n",[240,53760,53761],{"class":242,"line":11749},[240,53762,53763],{"class":246},"        \u002F\u002F 声明一个新的数组\n",[240,53765,53766,53769,53772,53774],{"class":242,"line":11754},[240,53767,53768],{"class":288},"        let",[240,53770,53771],{"class":257}," arr ",[240,53773,440],{"class":288},[240,53775,53776],{"class":257}," []\n",[240,53778,53779,53781,53783,53786,53788,53790,53792,53794,53796,53799,53801,53803],{"class":242,"line":11763},[240,53780,5355],{"class":288},[240,53782,3612],{"class":257},[240,53784,53785],{"class":288},"let",[240,53787,11389],{"class":257},[240,53789,440],{"class":288},[240,53791,27065],{"class":264},[240,53793,11396],{"class":257},[240,53795,3545],{"class":288},[240,53797,53798],{"class":264}," 4",[240,53800,5166],{"class":257},[240,53802,4245],{"class":288},[240,53804,14392],{"class":257},[240,53806,53807],{"class":242,"line":11768},[240,53808,53809],{"class":246},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[240,53811,53812],{"class":242,"line":11774},[240,53813,53814],{"class":246},"            \u002F\u002F arr.push(num)\n",[240,53816,53817,53820,53823,53825,53828,53830,53833,53835,53838],{"class":242,"line":11795},[240,53818,53819],{"class":257},"            arr.",[240,53821,53822],{"class":436},"push",[240,53824,789],{"class":257},[240,53826,53827],{"class":436},"prompt",[240,53829,789],{"class":257},[240,53831,53832],{"class":443},"`请输入第${",[240,53834,2541],{"class":257},[240,53836,53837],{"class":443},"}季度的数据:`",[240,53839,32443],{"class":257},[240,53841,53842],{"class":242,"line":11801},[240,53843,53844],{"class":246},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[240,53846,53847],{"class":242,"line":11815},[240,53848,4482],{"class":257},[240,53850,53851],{"class":242,"line":11821},[240,53852,53853],{"class":246},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[240,53855,53856],{"class":242,"line":11848},[240,53857,53858],{"class":246},"        \u002F\u002F 盒子开头\n",[240,53860,53861,53864,53867,53869,53872],{"class":242,"line":11857},[240,53862,53863],{"class":257},"        document.",[240,53865,53866],{"class":436},"write",[240,53868,789],{"class":257},[240,53870,53871],{"class":443},"` \u003Cdiv class=\"box\">`",[240,53873,2129],{"class":257},[240,53875,53876],{"class":242,"line":11863},[240,53877,4353],{"emptyLinePlaceholder":2051},[240,53879,53880],{"class":242,"line":11871},[240,53881,53882],{"class":246},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[240,53884,53885,53887,53889,53891,53893,53895,53897,53899,53901,53904,53906,53908,53910],{"class":242,"line":11876},[240,53886,5355],{"class":288},[240,53888,3612],{"class":257},[240,53890,53785],{"class":288},[240,53892,11389],{"class":257},[240,53894,440],{"class":288},[240,53896,6045],{"class":264},[240,53898,11396],{"class":257},[240,53900,431],{"class":288},[240,53902,53903],{"class":257}," arr.",[240,53905,1064],{"class":264},[240,53907,5166],{"class":257},[240,53909,4245],{"class":288},[240,53911,14392],{"class":257},[240,53913,53914,53917,53919,53921],{"class":242,"line":18552},[240,53915,53916],{"class":257},"            document.",[240,53918,53866],{"class":436},[240,53920,789],{"class":257},[240,53922,53923],{"class":443},"`\n",[240,53925,53926,53929,53931,53933,53935,53937],{"class":242,"line":18558},[240,53927,53928],{"class":443},"              \u003Cdiv style=\"height: ${",[240,53930,5832],{"class":257},[240,53932,2985],{"class":443},[240,53934,2541],{"class":257},[240,53936,3034],{"class":443},[240,53938,53939],{"class":443},"}px;\">\n",[240,53941,53942,53945,53947,53949,53951,53953],{"class":242,"line":18581},[240,53943,53944],{"class":443},"                \u003Cspan>${",[240,53946,5832],{"class":257},[240,53948,2985],{"class":443},[240,53950,2541],{"class":257},[240,53952,3034],{"class":443},[240,53954,53955],{"class":443},"}\u003C\u002Fspan>\n",[240,53957,53958,53961,53963,53965,53967],{"class":242,"line":18587},[240,53959,53960],{"class":443},"                \u003Ch4>第${",[240,53962,2541],{"class":257},[240,53964,47512],{"class":288},[240,53966,27065],{"class":264},[240,53968,53969],{"class":443},"}季度\u003C\u002Fh4>\n",[240,53971,53972],{"class":242,"line":18610},[240,53973,53974],{"class":443},"              \u003C\u002Fdiv>          \n",[240,53976,53977,53980],{"class":242,"line":18624},[240,53978,53979],{"class":443},"            `",[240,53981,2129],{"class":257},[240,53983,53984],{"class":242,"line":18644},[240,53985,4482],{"class":257},[240,53987,53988],{"class":242,"line":18650},[240,53989,53990],{"class":246},"        \u002F\u002F 盒子结尾\n",[240,53992,53993,53995,53997,53999,54002],{"class":242,"line":18661},[240,53994,53863],{"class":257},[240,53996,53866],{"class":436},[240,53998,789],{"class":257},[240,54000,54001],{"class":443},"` \u003C\u002Fdiv>`",[240,54003,2129],{"class":257},[240,54005,54006,54008,54010],{"class":242,"line":18684},[240,54007,53715],{"class":257},[240,54009,53751],{"class":253},[240,54011,447],{"class":257},[240,54013,54014,54016,54018],{"class":242,"line":18706},[240,54015,592],{"class":257},[240,54017,53738],{"class":253},[240,54019,447],{"class":257},[240,54021,54022],{"class":242,"line":18711},[240,54023,4353],{"emptyLinePlaceholder":2051},[240,54025,54026,54028,54030],{"class":242,"line":18717},[240,54027,592],{"class":257},[240,54029,52581],{"class":253},[240,54031,447],{"class":257},[32,54033,54035],{"id":54034},"_284-冒泡排序","2.8.4 冒泡排序",[231,54037,54039],{"className":52579,"code":54038,"language":52581,"meta":236,"style":236},"\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",[23,54040,54041,54051,54065,54069,54077,54091,54111,54123,54131,54135,54143,54151,54183,54216,54253,54258,54277,54282,54295,54310,54326,54330,54335,54339,54349,54358,54366,54370],{"__ignoreMap":236},[240,54042,54043,54045,54047,54049],{"class":242,"line":243},[240,54044,53243],{"class":257},[240,54046,53246],{"class":253},[240,54048,53249],{"class":436},[240,54050,447],{"class":257},[240,54052,54053,54055,54057,54059,54061,54063],{"class":242,"line":250},[240,54054,431],{"class":257},[240,54056,52581],{"class":253},[240,54058,53260],{"class":436},[240,54060,440],{"class":257},[240,54062,53265],{"class":443},[240,54064,447],{"class":257},[240,54066,54067],{"class":242,"line":261},[240,54068,4353],{"emptyLinePlaceholder":2051},[240,54070,54071,54073,54075],{"class":242,"line":277},[240,54072,431],{"class":257},[240,54074,53278],{"class":253},[240,54076,447],{"class":257},[240,54078,54079,54081,54083,54085,54087,54089],{"class":242,"line":294},[240,54080,452],{"class":257},[240,54082,53288],{"class":253},[240,54084,53291],{"class":436},[240,54086,440],{"class":257},[240,54088,53296],{"class":443},[240,54090,447],{"class":257},[240,54092,54093,54095,54097,54099,54101,54103,54105,54107,54109],{"class":242,"line":309},[240,54094,452],{"class":257},[240,54096,53288],{"class":253},[240,54098,16869],{"class":436},[240,54100,440],{"class":257},[240,54102,53335],{"class":443},[240,54104,53315],{"class":436},[240,54106,440],{"class":257},[240,54108,53342],{"class":443},[240,54110,447],{"class":257},[240,54112,54113,54115,54117,54119,54121],{"class":242,"line":529},[240,54114,452],{"class":257},[240,54116,53351],{"class":253},[240,54118,53354],{"class":257},[240,54120,53351],{"class":253},[240,54122,447],{"class":257},[240,54124,54125,54127,54129],{"class":242,"line":549},[240,54126,592],{"class":257},[240,54128,53278],{"class":253},[240,54130,447],{"class":257},[240,54132,54133],{"class":242,"line":569},[240,54134,4353],{"emptyLinePlaceholder":2051},[240,54136,54137,54139,54141],{"class":242,"line":589},[240,54138,431],{"class":257},[240,54140,53738],{"class":253},[240,54142,447],{"class":257},[240,54144,54145,54147,54149],{"class":242,"line":715},[240,54146,452],{"class":257},[240,54148,53751],{"class":253},[240,54150,447],{"class":257},[240,54152,54153,54156,54158,54160,54163,54165,54167,54169,54171,54173,54175,54177,54179,54181],{"class":242,"line":727},[240,54154,54155],{"class":288},"    let",[240,54157,53771],{"class":257},[240,54159,440],{"class":288},[240,54161,54162],{"class":257}," [",[240,54164,1741],{"class":264},[240,54166,1277],{"class":257},[240,54168,1716],{"class":264},[240,54170,1277],{"class":257},[240,54172,1692],{"class":264},[240,54174,1277],{"class":257},[240,54176,1668],{"class":264},[240,54178,1277],{"class":257},[240,54180,1643],{"class":264},[240,54182,35192],{"class":257},[240,54184,54185,54187,54189,54191,54193,54195,54197,54199,54201,54203,54205,54208,54210,54212,54214],{"class":242,"line":1730},[240,54186,5153],{"class":288},[240,54188,3612],{"class":257},[240,54190,53785],{"class":288},[240,54192,11389],{"class":257},[240,54194,440],{"class":288},[240,54196,6045],{"class":264},[240,54198,11396],{"class":257},[240,54200,431],{"class":288},[240,54202,53903],{"class":257},[240,54204,1064],{"class":264},[240,54206,54207],{"class":288}," -",[240,54209,27065],{"class":264},[240,54211,5166],{"class":257},[240,54213,4245],{"class":288},[240,54215,14392],{"class":257},[240,54217,54218,54221,54223,54225,54227,54229,54231,54233,54235,54237,54239,54241,54243,54245,54247,54249,54251],{"class":242,"line":3582},[240,54219,54220],{"class":288},"      for",[240,54222,3612],{"class":257},[240,54224,53785],{"class":288},[240,54226,11451],{"class":257},[240,54228,440],{"class":288},[240,54230,6045],{"class":264},[240,54232,11458],{"class":257},[240,54234,431],{"class":288},[240,54236,53903],{"class":257},[240,54238,1064],{"class":264},[240,54240,54207],{"class":288},[240,54242,11389],{"class":257},[240,54244,2631],{"class":288},[240,54246,27065],{"class":264},[240,54248,11465],{"class":257},[240,54250,4245],{"class":288},[240,54252,14392],{"class":257},[240,54254,54255],{"class":242,"line":3596},[240,54256,54257],{"class":246},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[240,54259,54260,54262,54265,54267,54270,54272,54274],{"class":242,"line":3601},[240,54261,4450],{"class":288},[240,54263,54264],{"class":257}," (arr[j] ",[240,54266,3053],{"class":288},[240,54268,54269],{"class":257}," arr[j ",[240,54271,2580],{"class":288},[240,54273,27065],{"class":264},[240,54275,54276],{"class":257},"]) {\n",[240,54278,54279],{"class":242,"line":3607},[240,54280,54281],{"class":246},"          \u002F\u002F 交换两个变量\n",[240,54283,54284,54287,54290,54292],{"class":242,"line":3628},[240,54285,54286],{"class":288},"          let",[240,54288,54289],{"class":257}," tmp ",[240,54291,440],{"class":288},[240,54293,54294],{"class":257}," arr[j]\n",[240,54296,54297,54300,54302,54304,54306,54308],{"class":242,"line":3633},[240,54298,54299],{"class":257},"          arr[j] ",[240,54301,440],{"class":288},[240,54303,54269],{"class":257},[240,54305,2580],{"class":288},[240,54307,27065],{"class":264},[240,54309,35192],{"class":257},[240,54311,54312,54315,54317,54319,54321,54323],{"class":242,"line":3647},[240,54313,54314],{"class":257},"          arr[j ",[240,54316,2580],{"class":288},[240,54318,27065],{"class":264},[240,54320,6395],{"class":257},[240,54322,440],{"class":288},[240,54324,54325],{"class":257}," tmp\n",[240,54327,54328],{"class":242,"line":3652},[240,54329,4482],{"class":257},[240,54331,54332],{"class":242,"line":3681},[240,54333,54334],{"class":257},"      }\n",[240,54336,54337],{"class":242,"line":3686},[240,54338,4140],{"class":257},[240,54340,54341,54344,54346],{"class":242,"line":3703},[240,54342,54343],{"class":257},"    document.",[240,54345,53866],{"class":436},[240,54347,54348],{"class":257},"(arr)\n",[240,54350,54351,54354,54356],{"class":242,"line":3708},[240,54352,54353],{"class":257},"  \u003C\u002F",[240,54355,53751],{"class":253},[240,54357,447],{"class":257},[240,54359,54360,54362,54364],{"class":242,"line":3713},[240,54361,592],{"class":257},[240,54363,53738],{"class":253},[240,54365,447],{"class":257},[240,54367,54368],{"class":242,"line":3718},[240,54369,4353],{"emptyLinePlaceholder":2051},[240,54371,54372,54374,54376],{"class":242,"line":3732},[240,54373,592],{"class":257},[240,54375,52581],{"class":253},[240,54377,447],{"class":257},[19,54379,54380],{},[219,54381],{"alt":236,"src":54382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[19,54384,54385],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[19,54387,54388],{},"let arr = [4, 2, 5, 1, 3]",[19,54390,54391],{},"\u002F\u002F 1.升序排列写法",[19,54393,54394],{},"arr.sort(function (a, b) {",[19,54396,54397],{},"return a - b",[19,54399,54400],{},"})",[19,54402,54403],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[19,54405,54406],{},"\u002F\u002F 降序排列写法",[19,54408,54394],{},[19,54410,54411],{},"return b - a",[19,54413,54400],{},[19,54415,54416],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[14,54418,54420],{"id":54419},"_29-函数","2.9 函数",[19,54422,54423],{},[219,54424],{"alt":236,"src":54425},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[19,54427,54428],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[19,54430,54431],{},"函数的声明用function",[19,54433,54434],{},"函数里边可以嵌套函数",[32,54436,54438],{"id":54437},"_291-函数传参","2.9.1 函数传参",[19,54440,54441],{},[219,54442],{"alt":236,"src":54443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[19,54445,54446],{},[219,54447],{"alt":236,"src":54448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[3100,54450,54451,54454,54457,54460,54463,54466],{},[1829,54452,54453],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[1829,54455,54456],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[1829,54458,54459],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[1829,54461,54462],{},"开发中尽量保持形参和实参个数一致",[1829,54464,54465],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[1829,54467,54468],{},"形参只在函数中有用，所以不需要进行声明这个变量",[19,54470,54471],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[32,54473,54475],{"id":54474},"_292-函数的返回值","2.9.2 函数的返回值",[19,54477,54478],{},[219,54479],{"alt":236,"src":54480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[19,54482,54483],{},[219,54484],{"alt":236,"src":54485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[3100,54487,54488,54491,54494,54497,54500],{},[1829,54489,54490],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[1829,54492,54493],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[1829,54495,54496],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[1829,54498,54499],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[1829,54501,54502],{},"断点调试:进入函数内部看执行过程F11",[32,54504,54506],{"id":54505},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[231,54508,54510],{"className":52579,"code":54509,"language":52581,"meta":236,"style":236},"    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",[23,54511,54512,54517,54522,54526,54531],{"__ignoreMap":236},[240,54513,54514],{"class":242,"line":243},[240,54515,54516],{"class":257},"    function fn(a, b) {\n",[240,54518,54519],{"class":242,"line":250},[240,54520,54521],{"class":257},"      console.log(a + b);\n",[240,54523,54524],{"class":242,"line":261},[240,54525,4140],{"class":257},[240,54527,54528],{"class":242,"line":277},[240,54529,54530],{"class":257},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[240,54532,54533],{"class":242,"line":294},[240,54534,54535],{"class":257},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[32,54537,54539],{"id":54538},"_294-作用域","2.9.4 作用域",[3100,54541,54542,54548,54553,54556,54559],{},[1829,54543,54544,54545],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[68,54546,54547],{},"作用域",[1829,54549,54550],{},[68,54551,54552],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[1829,54554,54555],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[1829,54557,54558],{},"函数内部可以直接所使用全局变量",[1829,54560,54561],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[19,54563,16582],{},[231,54565,54567],{"className":52579,"code":54566,"language":52581,"meta":236,"style":236},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[23,54568,54569,54574,54579,54583,54588,54593,54598],{"__ignoreMap":236},[240,54570,54571],{"class":242,"line":243},[240,54572,54573],{"class":257},"    function fun() {\n",[240,54575,54576],{"class":242,"line":250},[240,54577,54578],{"class":257},"      num = 10\n",[240,54580,54581],{"class":242,"line":261},[240,54582,4140],{"class":257},[240,54584,54585],{"class":242,"line":277},[240,54586,54587],{"class":257},"    fun()\n",[240,54589,54590],{"class":242,"line":294},[240,54591,54592],{"class":257},"    console.log(num)\n",[240,54594,54595],{"class":242,"line":309},[240,54596,54597],{"class":257},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[240,54599,54600],{"class":242,"line":529},[240,54601,54602],{"class":257},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[3100,54604,54605,54608],{},[1829,54606,54607],{},"函数内部的形参可以看做是局部变量",[1829,54609,54610],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[19,54612,54613,54614],{},"变量访问原则： ",[68,54615,54616],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[32,54618,54620],{"id":54619},"_295-匿名函数","2.9.5 匿名函数",[19,54622,54623],{},"函数可以分为具名函数和匿名函数",[19,54625,54626],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[1826,54628,54629],{},[1829,54630,54631],{},"函数表达式",[19,54633,54634],{},[219,54635],{"alt":236,"src":54636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[19,54638,54639],{},"里边也可以写参数",[19,54641,54642],{},"具名函数调用位置可以随意调整；",[19,54644,54645],{},"匿名函数函数表达式形式只能在声明后才可以使用",[1826,54647,54648],{"start":250},[1829,54649,54650],{},"立即执行函数",[19,54652,54653],{},[219,54654],{"alt":236,"src":54655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[19,54657,54658],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[19,54660,54661],{},"写法：两个小括号，然后在第一个小括号中写function",[19,54663,54664],{},"(function () {})();",[19,54666,54667],{},"不要落下最后的;",[19,54669,54670],{},"立即执行函数必须要加;",[19,54672,54673],{},"分号写前写后都没问题",[19,54675,54676],{},"写前：",[19,54678,54679],{},"(function() {})()",[19,54681,54682],{},";(function () {})();",[19,54684,54685],{},"写后:",[19,54687,54688],{},"(function() {})();",[19,54690,54664],{},[19,54692,54693],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[19,54695,54696],{},"还有一种写法：",[19,54698,54699],{},"(function(){}());",[19,54701,54702],{},"或者:",[19,54704,54705],{},"!function(){}();",[19,54707,54708],{},"立即执行函数有时候也是可以加名字的：",[19,54710,54711],{},"(function flexible(window,document) {}(window,document));",[19,54713,54714],{},"省一些调用方法",[32,54716,54718],{"id":54717},"_296-逻辑中断","2.9.6 逻辑中断!!!",[19,54720,54721],{},[219,54722],{"alt":236,"src":54723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[19,54725,54726],{},"这样就不用非得给x,y初始化了",[19,54728,54729],{},[219,54730],{"alt":236,"src":54731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[19,54733,54734],{},"代码执行时先看左边",[19,54736,54737],{},"例如：console.log(false && 3+5)",[19,54739,54740],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[19,54742,54743],{},"&&都是真时，就返回最后一个真值",[19,54745,54746],{},"console.log(11 && 22)",[19,54748,54749],{},"输出22",[19,54751,54752],{},"逻辑与：遇真则真",[19,54754,16582],{},[19,54756,54757],{},"let age=1",[19,54759,54760],{},"console.log(11 || age++)",[19,54762,54763],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[19,54765,54766],{},"console.log(11 || 22)",[19,54768,54769],{},"||逻辑或遇到真就直接输出，输出结果为11",[19,54771,54772],{},"||如果都是假的话，就取最后一个假的值了",[32,54774,54776],{"id":54775},"_297-转换为boolean型","2.9.7 转换为Boolean型",[19,54778,54779],{},"显示转换：",[19,54781,54782,54785,54786],{},[68,54783,54784],{},"记忆","： ",[68,54787,54788],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[19,54790,54791],{},"空字符串为假，其他字符串全为真",[19,54793,54794],{},[219,54795],{"alt":236,"src":54796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[19,54798,54799],{},"隐式转换：",[19,54801,54802],{},[219,54803],{"alt":236,"src":54804},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[19,54806,54807],{},"隐式转换:",[19,54809,54810],{},"null+3=3",[19,54812,54813],{},"undefined+3=NaN",[19,54815,54816],{},"null==undefined 输出true,他两个都当0看",[19,54818,54819],{},"null===undefined 输出false",[19,54821,54822],{},"undefined做任何操作都是NaN",[19,54824,54825],{},"NaN不等于NaN，NaN表示计算错误",[14,54827,54829],{"id":54828},"_210-对象","2.10 对象",[32,54831,54833],{"id":54832},"_2101-对象的介绍","2.10.1 对象的介绍",[19,54835,54836],{},"对象也是一种数据类型，里边的数据是无序的",[19,54838,54839],{},"对象由属性和方法组成",[19,54841,54842],{},[219,54843],{"alt":236,"src":54844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[19,54846,54847],{},[219,54848],{"alt":236,"src":54849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[19,54851,54852],{},[219,54853],{"alt":236,"src":54854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[32,54856,54858],{"id":54857},"_2102-对象属性","2.10.2 对象属性",[19,54860,54861],{},[219,54862],{"alt":236,"src":54863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[1826,54865,54866],{},[1829,54867,54868],{},"查询对象",[19,54870,54871],{},"对象名.属性 goods.uname",[19,54873,54874],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[19,54876,54877],{},"不带字符串的属性名也可以使用 对象名['属性名']",[19,54879,54880],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[19,54882,54883],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[1826,54885,54886],{"start":250},[1829,54887,54888],{},"重新赋值",[19,54890,54891],{},"对象名.属性=新值",[1826,54893,54894],{"start":261},[1829,54895,54896],{},"增加新数据",[19,54898,54891],{},[1826,54900,54901],{"start":277},[1829,54902,54903],{},"删除对象中的属性",[19,54905,54906],{},"delete 对象名.属性",[32,54908,54910],{"id":54909},"_2103-对象方法","2.10.3 对象方法",[19,54912,54913],{},[219,54914],{"alt":236,"src":54915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[19,54917,54918],{},"后边跟的是匿名函数",[19,54920,54921],{},"对象外面的叫函数；对象内部的叫方法",[19,54923,54924],{},[219,54925],{"alt":236,"src":54926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[32,54928,54930],{"id":54929},"_2104-遍历对象","2.10.4 遍历对象",[19,54932,54933],{},"理解为加括号的python字典遍历",[19,54935,54936],{},[219,54937],{"alt":236,"src":54938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[19,54940,54941],{},"k是字符串类型",[19,54943,54944],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[231,54946,54948],{"className":52579,"code":54947,"language":52581,"meta":236,"style":236},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[23,54949,54950,54955,54960,54965,54970],{"__ignoreMap":236},[240,54951,54952],{"class":242,"line":243},[240,54953,54954],{"class":257},"   let arr = [1, 2, 3]\n",[240,54956,54957],{"class":242,"line":250},[240,54958,54959],{"class":257},"    for (let k in arr) {\n",[240,54961,54962],{"class":242,"line":261},[240,54963,54964],{"class":257},"      console.log(k)\n",[240,54966,54967],{"class":242,"line":277},[240,54968,54969],{"class":257},"      console.log(arr[k])\n",[240,54971,54972],{"class":242,"line":294},[240,54973,4140],{"class":257},[19,54975,54976],{},[219,54977],{"alt":236,"src":54978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[19,54980,54981],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[19,54983,54984],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[19,54986,54987],{},"for in 得到的k是属性名",[53751,54989,54990],{},"\n\nlet pink = {\n\nuname: 'pink老师',\n\nage: 18,\n\ngender: '男',\n\nsing: function () {\n\ndocument.write('唱歌')\n\n}\n\n}\n\n\u002F\u002F 遍历对象\n\nfor (let k in pink) {\n\nconsole.log(k)\n\nconsole.log(pink\\[k\\])\n\n}\n\n",[19,54992,54993],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[32,54995,54997],{"id":54996},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[19,54999,55000],{},"数组中放对象信息",[231,55002,55006],{"className":55003,"code":55004,"language":55005,"meta":236,"style":236},"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",[23,55007,55008,55016,55021,55026,55031,55036,55041,55046,55051,55056,55061,55066,55071,55075,55079],{"__ignoreMap":236},[240,55009,55010,55012,55014],{"class":242,"line":243},[240,55011,431],{"class":257},[240,55013,53751],{"class":253},[240,55015,447],{"class":257},[240,55017,55018],{"class":242,"line":250},[240,55019,55020],{"class":257},"    let students = [\n",[240,55022,55023],{"class":242,"line":261},[240,55024,55025],{"class":257},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[240,55027,55028],{"class":242,"line":277},[240,55029,55030],{"class":257},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[240,55032,55033],{"class":242,"line":294},[240,55034,55035],{"class":257},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[240,55037,55038],{"class":242,"line":309},[240,55039,55040],{"class":257},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[240,55042,55043],{"class":242,"line":529},[240,55044,55045],{"class":257},"    ]\n",[240,55047,55048],{"class":242,"line":549},[240,55049,55050],{"class":257},"    for (let i = 0; i \u003C students.length; i++) {\n",[240,55052,55053],{"class":242,"line":569},[240,55054,55055],{"class":257},"      for (let k in students[i]) {\n",[240,55057,55058],{"class":242,"line":589},[240,55059,55060],{"class":257},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[240,55062,55063],{"class":242,"line":715},[240,55064,55065],{"class":257},"        \u002F\u002F输出每个人的名字：\n",[240,55067,55068],{"class":242,"line":727},[240,55069,55070],{"class":257},"        \u002F\u002Fconsole.log(students[i].name)\n",[240,55072,55073],{"class":242,"line":1730},[240,55074,54334],{"class":257},[240,55076,55077],{"class":242,"line":3582},[240,55078,4140],{"class":257},[240,55080,55081,55083,55085],{"class":242,"line":3596},[240,55082,54353],{"class":257},[240,55084,53751],{"class":253},[240,55086,447],{"class":257},[32,55088,55090],{"id":55089},"_2106-内置对象","2.10.6 内置对象",[19,55092,55093],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[1826,55095,55096],{},[1829,55097,55098],{},"数学对象Math",[19,55100,55101],{},[219,55102],{"alt":236,"src":55103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[19,55105,55106],{},[254,55107,55110],{"href":55108,"rel":55109},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[25811],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[19,55112,55113],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[19,55115,55116],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[19,55118,55119],{},"数组不可以使用Math中的max,min来求最大值与最小值",[19,55121,55122],{},"null是一个空对象，可以认为：null类似于let obj={}",[19,55124,55125],{},"null属于对象数据类型",[1826,55127,55128],{"start":250},[1829,55129,55130],{},"生成任意范围随机数",[19,55132,55133],{},[219,55134],{"alt":236,"src":55135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[19,55137,55138],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[19,55140,55141],{},"乘以几就取不到几",[19,55143,55144],{},"取数组中的随机元素：",[19,55146,55147],{},"let arr = ['red', 'green', 'blue']",[19,55149,55150],{},"let random = Math.floor(Math.random() * arr.length)",[19,55152,55153],{},"console.log(arr[random])",[19,55155,55156],{},"这个函数得到的是全闭区间",[19,55158,55159],{},"function getRandom(N, M) {",[19,55161,55162],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[19,55164,3040],{},[19,55166,55167],{},"console.log(getRandom(4, 8))",[32,55169,55171],{"id":55170},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[19,55173,55174],{},[219,55175],{"alt":236,"src":55176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[19,55178,55179],{},[219,55180],{"alt":236,"src":55181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[19,55183,55184],{},[219,55185],{"alt":236,"src":55186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[19,55188,55189],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[19,55191,55192],{},[219,55193],{"alt":236,"src":55194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[19,55196,55197],{},[219,55198],{"alt":236,"src":55199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[19,55201,55202],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[19,55204,55205],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[19,55207,55208],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[2019,55210,55211],{},"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":236,"searchDepth":250,"depth":250,"links":55213},[55214,55222,55223,55224,55225,55226,55233,55237,55243,55252],{"id":52414,"depth":250,"text":52415,"children":55215},[55216,55217,55218,55219,55220,55221],{"id":52418,"depth":261,"text":52419},{"id":52435,"depth":261,"text":52436},{"id":52475,"depth":261,"text":52476},{"id":52487,"depth":261,"text":52488},{"id":52496,"depth":261,"text":52497},{"id":52544,"depth":261,"text":52545},{"id":52554,"depth":250,"text":52555},{"id":52642,"depth":250,"text":52643},{"id":52665,"depth":250,"text":52666},{"id":52677,"depth":250,"text":52678},{"id":52864,"depth":250,"text":52865,"children":55227},[55228,55229,55230,55231,55232],{"id":52868,"depth":261,"text":52869},{"id":52877,"depth":261,"text":52878},{"id":52905,"depth":261,"text":52906},{"id":52941,"depth":261,"text":52942},{"id":52966,"depth":261,"text":52967},{"id":52978,"depth":250,"text":52979,"children":55234},[55235,55236],{"id":52999,"depth":261,"text":53000},{"id":53093,"depth":261,"text":53094},{"id":53151,"depth":250,"text":53152,"children":55238},[55239,55240,55241,55242],{"id":53155,"depth":261,"text":53156},{"id":53179,"depth":261,"text":53180},{"id":53232,"depth":261,"text":53233},{"id":54034,"depth":261,"text":54035},{"id":54419,"depth":250,"text":54420,"children":55244},[55245,55246,55247,55248,55249,55250,55251],{"id":54437,"depth":261,"text":54438},{"id":54474,"depth":261,"text":54475},{"id":54505,"depth":261,"text":54506},{"id":54538,"depth":261,"text":54539},{"id":54619,"depth":261,"text":54620},{"id":54717,"depth":261,"text":54718},{"id":54775,"depth":261,"text":54776},{"id":54828,"depth":250,"text":54829,"children":55253},[55254,55255,55256,55257,55258,55259,55260],{"id":54832,"depth":261,"text":54833},{"id":54857,"depth":261,"text":54858},{"id":54909,"depth":261,"text":54910},{"id":54929,"depth":261,"text":54930},{"id":54996,"depth":261,"text":54997},{"id":55089,"depth":261,"text":55090},{"id":55170,"depth":261,"text":55171},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":52406,"description":2048},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":55267,"title":55268,"body":55269,"description":2048,"extension":2049,"meta":78588,"navigation":2051,"path":78589,"seo":78590,"stem":78591,"__hash__":78592},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":55270,"toc":78528},[55271,55274,55277,55280,55285,55288,55291,55294,55298,55302,55308,55313,55321,55328,55331,55335,55340,55345,55350,55353,55356,55367,55370,55374,55377,55380,55385,55390,55395,55398,55401,55492,55495,55500,55503,55508,55511,55514,55519,55522,55527,55531,55534,55548,55552,55557,55560,55563,55567,55572,55575,55579,55583,55588,55592,55597,55600,55603,55606,55609,55612,55615,55620,55625,55653,55656,55659,55662,55667,55670,55673,55676,55679,55683,55712,55716,55721,55726,55729,55732,55735,55740,55855,55860,55865,56026,56031,56034,56038,56043,56048,56051,56054,56057,56060,56063,56066,56069,56072,56075,56078,56081,56084,56087,56090,56092,56095,56098,56101,56106,56110,56507,56510,56516,56520,56525,57805,57810,57813,57816,57819,57824,59020,59024,59030,59035,59038,59043,59048,59052,59056,59061,59064,59069,59072,59075,59079,59985,59988,59992,60213,60216,60219,60222,60448,60451,60675,60678,60682,60687,60690,60693,60921,60924,60957,60960,60964,60969,60973,60976,60979,60982,60985,60988,60991,60994,60999,62279,62283,62286,63374,63378,63381,63384,63387,63390,63394,63397,63400,63402,63410,64888,64892,64895,64898,64901,65110,65113,65117,65121,65126,65131,65134,65137,65142,65146,65151,65154,65263,65267,65272,65277,65280,65283,65287,65292,65297,65302,65305,65308,65319,65322,65327,65332,65335,65338,65411,65415,65420,65423,65425,65436,65440,65445,66771,66774,66777,66780,66782,66785,66788,66791,66794,66797,66800,66803,66806,66809,66812,66815,66818,66820,66822,66825,66829,67923,67926,67929,67945,67959,67962,67967,67973,67978,67982,67986,67991,67995,68000,68442,68447,68450,68454,68459,68462,68465,68469,68474,68478,68483,68488,68492,68497,68502,68505,68510,68515,68519,68524,68529,68633,68636,68640,68645,69011,69014,69017,69020,69023,69026,69029,69032,69035,70331,70335,70340,70345,70348,70351,70354,70357,70359,70364,70369,70372,70376,70381,70386,70391,70394,70397,70400,70403,70406,70411,70414,70418,70423,70428,70432,70437,70440,70445,70448,70451,70454,70457,70460,70465,70468,70471,70474,70477,70481,70486,70489,70493,70498,70501,70504,70508,70537,70540,70544,70548,70553,70557,70562,70565,70568,70571,70574,70577,70580,70583,70586,70589,70592,70595,70598,70601,70604,70608,70613,70618,70621,70625,70629,70634,70637,70641,70644,70647,70652,70657,70662,70667,70672,70675,70678,70683,70688,70692,70697,70700,70705,70708,70711,70714,70717,70722,70725,70734,70738,70743,70746,70749,70753,70756,70761,70765,70768,70774,70780,70784,70810,70813,72374,72377,72866,72869,72874,72879,72884,72888,72893,72898,72903,72907,72912,72915,72918,72921,72924,72928,72931,72936,72939,72944,72948,72953,72956,72961,72966,72971,72974,72977,72982,72987,72990,72993,72997,73000,73005,73008,73013,73016,73021,73026,73031,73034,73039,73104,73107,73118,73122,73127,73299,73303,73308,73311,73314,73317,73321,73332,73336,73339,73344,73349,73352,73355,73358,73361,73364,73366,73369,73372,73375,73380,73383,73388,73391,73395,73398,73401,73415,73419,73422,73477,73482,73485,73488,73493,73496,73500,73505,73635,73639,73644,73649,73730,73735,73739,73742,73747,73752,73758,73761,73764,73767,73771,73776,73779,73790,73794,73811,76857,76861,76864,76867,76870,76891,76895,76898,76906,76909,76914,76917,76920,76925,76930,76934,76955,76959,76964,76967,76970,76973,76976,76980,76985,76988,76992,76997,77000,77005,77008,77013,77016,77021,78224,78228,78233,78236,78241,78525],[10,55272,55268],{"id":55273},"_3web-apis",[19,55275,55276],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[19,55278,55279],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[19,55281,55282],{},[219,55283],{"alt":236,"src":55284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[19,55286,55287],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[19,55289,55290],{},"建议数组和对象使用 const 来声明",[19,55292,55293],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[14,55295,55297],{"id":55296},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[32,55299,55301],{"id":55300},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[19,55303,55304,55307],{},[23,55305,55306],{},"document"," = HTML 文件解析后的对象化表示；",[19,55309,55310,55312],{},[23,55311,55306],{}," ≠ HTML 文件本身",[19,55314,55315,55320],{},[68,55316,55317],{},[23,55318,55319],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[19,55322,55323,55327],{},[68,55324,55325],{},[23,55326,55306],{}," ：容器里的内容，代表当前加载的网页（DOM）",[19,55329,55330],{},"document实际上为window.document的简写",[32,55332,55334],{"id":55333},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[19,55336,55337],{},[219,55338],{"alt":236,"src":55339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[19,55341,55342],{},[219,55343],{"alt":236,"src":55344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[19,55346,55347],{},[219,55348],{"alt":236,"src":55349},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[19,55351,55352],{},"console.dir()",[19,55354,55355],{},"dir用来打印对象",[3100,55357,55358,55361,55364],{},[1829,55359,55360],{},"任何一个标签，都是一个对象",[1829,55362,55363],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[1829,55365,55366],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[19,55368,55369],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[32,55371,55373],{"id":55372},"_312-获取dom对象","3.1.2 获取DoM对象",[19,55375,55376],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[19,55378,55379],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[19,55381,55382],{},[68,55383,55384],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[1826,55386,55387],{},[1829,55388,55389],{},"利用CSS选择器来获取标签元素",[19,55391,55392],{},[219,55393],{"alt":236,"src":55394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[19,55396,55397],{},"里边的选择器必须必须加引号！！！",[19,55399,55400],{},"只选择第一个元素",[231,55402,55404],{"className":55003,"code":55403,"language":55005,"meta":236,"style":236},"\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",[23,55405,55406,55414,55434,55453,55461,55466,55471,55476,55484],{"__ignoreMap":236},[240,55407,55408,55410,55412],{"class":242,"line":243},[240,55409,431],{"class":257},[240,55411,53738],{"class":253},[240,55413,447],{"class":257},[240,55415,55416,55418,55420,55422,55424,55427,55430,55432],{"class":242,"line":250},[240,55417,452],{"class":257},[240,55419,330],{"class":253},[240,55421,437],{"class":436},[240,55423,440],{"class":257},[240,55425,55426],{"class":443},"\"box\"",[240,55428,55429],{"class":257},">123\u003C\u002F",[240,55431,330],{"class":253},[240,55433,447],{"class":257},[240,55435,55436,55438,55440,55442,55444,55446,55449,55451],{"class":242,"line":261},[240,55437,452],{"class":257},[240,55439,330],{"class":253},[240,55441,437],{"class":436},[240,55443,440],{"class":257},[240,55445,55426],{"class":443},[240,55447,55448],{"class":257},">456\u003C\u002F",[240,55450,330],{"class":253},[240,55452,447],{"class":257},[240,55454,55455,55457,55459],{"class":242,"line":277},[240,55456,452],{"class":257},[240,55458,53751],{"class":253},[240,55460,447],{"class":257},[240,55462,55463],{"class":242,"line":294},[240,55464,55465],{"class":257},"    \u002F\u002F 1.获取匹配的第一个元素\n",[240,55467,55468],{"class":242,"line":309},[240,55469,55470],{"class":257},"    const box = document.querySelector('div')\n",[240,55472,55473],{"class":242,"line":529},[240,55474,55475],{"class":257},"    console.dir(box)\n",[240,55477,55478,55480,55482],{"class":242,"line":549},[240,55479,54353],{"class":257},[240,55481,53751],{"class":253},[240,55483,447],{"class":257},[240,55485,55486,55488,55490],{"class":242,"line":569},[240,55487,592],{"class":257},[240,55489,53738],{"class":253},[240,55491,447],{"class":257},[19,55493,55494],{},"只选123，不选456",[19,55496,55497],{},[219,55498],{"alt":236,"src":55499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[19,55501,55502],{},"返回的是一个数组的集合，不能对其进行直接修改",[19,55504,55505],{},[219,55506],{"alt":236,"src":55507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[19,55509,55510],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[19,55512,55513],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[1826,55515,55516],{"start":250},[1829,55517,55518],{},"其他方法来获取标签元素",[19,55520,55521],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[19,55523,55524],{},[219,55525],{"alt":236,"src":55526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[32,55528,55530],{"id":55529},"_313-操作元素的内容","3.1.3 操作元素的内容",[19,55532,55533],{},"设置修改DOM元素内容有两种方式：",[3100,55535,55536,55539,55542,55545],{},[1829,55537,55538],{},"元素.innerText=''",[1829,55540,55541],{},"元素.innerHTML=''",[1829,55543,55544],{},"不写字符串输出数字也是可以的",[1829,55546,55547],{},"元素.innerHtml=1",[23945,55549,55551],{"id":55550},"_3131-innertext","3.1.3.1 innerText",[19,55553,55554],{},[219,55555],{"alt":236,"src":55556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[19,55558,55559],{},"思路：实现了修改盒子中的内容！",[19,55561,55562],{},"它只显示纯文本，不解析标签",[23945,55564,55566],{"id":55565},"_3132-innerhtml","3.1.3.2 innerHTML",[19,55568,55569],{},[219,55570],{"alt":236,"src":55571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[19,55573,55574],{},"相比于innerText，他的强大之处在于可以解析标签",[32,55576,55578],{"id":55577},"_314-操作元素属性","3.1.4 操作元素属性",[23945,55580,55582],{"id":55581},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[19,55584,55585],{},[219,55586],{"alt":236,"src":55587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[23945,55589,55591],{"id":55590},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[19,55593,55594],{},[219,55595],{"alt":236,"src":55596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[19,55598,55599],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[19,55601,55602],{},"div.style.backgroundColor = 'hotpink'",[19,55604,55605],{},"如果按照css的写法，-表示减，就会出错",[19,55607,55608],{},"body元素不需要再获取，直接用就行！！！！！！",[19,55610,55611],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[19,55613,55614],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[19,55616,55617],{},[219,55618],{"alt":236,"src":55619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[19,55621,55622],{},[219,55623],{"alt":236,"src":55624},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[1826,55626,55627,55630,55633,55636,55639,55642],{},[1829,55628,55629],{},"className这个方式就是修改很多样式的时候来使用的！",[1829,55631,55632],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[1829,55634,55635],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[1829,55637,55638],{},"className为属性名，如果还用class的话就导致与关键字冲突",[1829,55640,55641],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[1829,55643,55644,55645,55650],{},"解析标签的时候就变为了",[330,55646],{"className":55647},[55648,55649],"nav","box",[55651,55652],"br",{},[19,55654,55655],{},"例子：",[330,55657],{"className":55658},[55648],[53751,55660,55661],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[19,55663,55664],{},[219,55665],{"alt":236,"src":55666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[19,55668,55669],{},"追加和删除类名用classList",[19,55671,55672],{},"常用于类似于开关的操作",[19,55674,55675],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[19,55677,55678],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[23945,55680,55682],{"id":55681},"_3143-牢记点","3.1.4.3 牢记点",[1826,55684,55685,55688,55691,55694,55697,55700,55703,55706,55709],{},[1829,55686,55687],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[1829,55689,55690],{},"使用style属性操作css时不要忘记引号",[1829,55692,55693],{},"使用className或者classList时也不要忘记引号",[1829,55695,55696],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[1829,55698,55699],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[1829,55701,55702],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[1829,55704,55705],{},"若： let arr=['1','2',3] arr[0]=1",[1829,55707,55708],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[1829,55710,55711],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[32,55713,55715],{"id":55714},"_315-操作表单元素","3.1.5 操作表单元素",[1826,55717,55718],{},[1829,55719,55720],{},"天生的属性",[19,55722,55723],{},[219,55724],{"alt":236,"src":55725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[19,55727,55728],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[19,55730,55731],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[19,55733,55734],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[19,55736,55737],{},[219,55738],{"alt":236,"src":55739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[231,55741,55743],{"className":52579,"code":55742,"language":52581,"meta":236,"style":236},"在复选框中如果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",[23,55744,55745,55750,55782,55787,55792,55797,55802,55806,55811,55816,55833,55845,55850],{"__ignoreMap":236},[240,55746,55747],{"class":242,"line":243},[240,55748,55749],{"class":257},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[240,55751,55752,55754,55757,55760,55762,55765,55767,55769,55771,55773,55775,55777,55780],{"class":242,"line":250},[240,55753,431],{"class":257},[240,55755,55756],{"class":253},"input",[240,55758,55759],{"class":436}," type",[240,55761,440],{"class":257},[240,55763,55764],{"class":443},"\"checkbox\"",[240,55766,16869],{"class":436},[240,55768,440],{"class":257},[240,55770,9603],{"class":443},[240,55772,16908],{"class":436},[240,55774,440],{"class":257},[240,55776,9603],{"class":443},[240,55778,55779],{"class":436}," checked",[240,55781,447],{"class":257},[240,55783,55784],{"class":242,"line":261},[240,55785,55786],{"class":257},"不选的话：\n",[240,55788,55789],{"class":242,"line":277},[240,55790,55791],{"class":257},"const input = document.querySelector('input')\n",[240,55793,55794],{"class":242,"line":294},[240,55795,55796],{"class":257},"input.checked=false\n",[240,55798,55799],{"class":242,"line":309},[240,55800,55801],{"class":257},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[240,55803,55804],{"class":242,"line":529},[240,55805,4353],{"emptyLinePlaceholder":2051},[240,55807,55808],{"class":242,"line":549},[240,55809,55810],{"class":257},"禁用按钮：\n",[240,55812,55813],{"class":242,"line":569},[240,55814,55815],{"class":257},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[240,55817,55818,55820,55823,55826,55829,55831],{"class":242,"line":589},[240,55819,431],{"class":257},[240,55821,55822],{"class":253},"button",[240,55824,55825],{"class":436}," disabled",[240,55827,55828],{"class":257},">点击\u003C\u002F",[240,55830,55822],{"class":253},[240,55832,447],{"class":257},[240,55834,55835,55837,55839,55841,55843],{"class":242,"line":715},[240,55836,431],{"class":257},[240,55838,55822],{"class":253},[240,55840,55828],{"class":257},[240,55842,55822],{"class":253},[240,55844,447],{"class":257},[240,55846,55847],{"class":242,"line":727},[240,55848,55849],{"class":257},"const bt = document.querySelector('button')\n",[240,55851,55852],{"class":242,"line":1730},[240,55853,55854],{"class":257},"bt.disabled = false\n",[1826,55856,55857],{"start":250},[1829,55858,55859],{},"自定义属性",[19,55861,55862],{},[219,55863],{"alt":236,"src":55864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[231,55866,55868],{"className":55003,"code":55867,"language":55005,"meta":236,"style":236},"\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",[23,55869,55870,55878,55906,55925,55944,55963,55982,55990,55995,56000,56005,56010,56018],{"__ignoreMap":236},[240,55871,55872,55874,55876],{"class":242,"line":243},[240,55873,431],{"class":257},[240,55875,53738],{"class":253},[240,55877,447],{"class":257},[240,55879,55880,55882,55884,55887,55889,55891,55894,55896,55899,55902,55904],{"class":242,"line":250},[240,55881,452],{"class":257},[240,55883,330],{"class":253},[240,55885,55886],{"class":436}," data-id",[240,55888,440],{"class":257},[240,55890,5630],{"class":443},[240,55892,55893],{"class":436}," data-spm",[240,55895,440],{"class":257},[240,55897,55898],{"class":443},"\"我不知道\"",[240,55900,55901],{"class":257},">1\u003C\u002F",[240,55903,330],{"class":253},[240,55905,447],{"class":257},[240,55907,55908,55910,55912,55914,55916,55918,55921,55923],{"class":242,"line":261},[240,55909,452],{"class":257},[240,55911,330],{"class":253},[240,55913,55886],{"class":436},[240,55915,440],{"class":257},[240,55917,5653],{"class":443},[240,55919,55920],{"class":257},">2\u003C\u002F",[240,55922,330],{"class":253},[240,55924,447],{"class":257},[240,55926,55927,55929,55931,55933,55935,55937,55940,55942],{"class":242,"line":277},[240,55928,452],{"class":257},[240,55930,330],{"class":253},[240,55932,55886],{"class":436},[240,55934,440],{"class":257},[240,55936,5666],{"class":443},[240,55938,55939],{"class":257},">3\u003C\u002F",[240,55941,330],{"class":253},[240,55943,447],{"class":257},[240,55945,55946,55948,55950,55952,55954,55956,55959,55961],{"class":242,"line":294},[240,55947,452],{"class":257},[240,55949,330],{"class":253},[240,55951,55886],{"class":436},[240,55953,440],{"class":257},[240,55955,5679],{"class":443},[240,55957,55958],{"class":257},">4\u003C\u002F",[240,55960,330],{"class":253},[240,55962,447],{"class":257},[240,55964,55965,55967,55969,55971,55973,55975,55978,55980],{"class":242,"line":309},[240,55966,452],{"class":257},[240,55968,330],{"class":253},[240,55970,55886],{"class":436},[240,55972,440],{"class":257},[240,55974,5700],{"class":443},[240,55976,55977],{"class":257},">5\u003C\u002F",[240,55979,330],{"class":253},[240,55981,447],{"class":257},[240,55983,55984,55986,55988],{"class":242,"line":529},[240,55985,452],{"class":257},[240,55987,53751],{"class":253},[240,55989,447],{"class":257},[240,55991,55992],{"class":242,"line":549},[240,55993,55994],{"class":257},"    const one = document.querySelector('div')\n",[240,55996,55997],{"class":242,"line":569},[240,55998,55999],{"class":257},"    console.log(one.dataset)\n",[240,56001,56002],{"class":242,"line":589},[240,56003,56004],{"class":257},"    console.log(one.dataset.id)\n",[240,56006,56007],{"class":242,"line":715},[240,56008,56009],{"class":257},"    console.log(one.dataset.spm)\n",[240,56011,56012,56014,56016],{"class":242,"line":727},[240,56013,54353],{"class":257},[240,56015,53751],{"class":253},[240,56017,447],{"class":257},[240,56019,56020,56022,56024],{"class":242,"line":1730},[240,56021,592],{"class":257},[240,56023,53738],{"class":253},[240,56025,447],{"class":257},[19,56027,56028],{},[219,56029],{"alt":236,"src":56030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[19,56032,56033],{},"document.querySelector选择的是第一个对象（元素）",[32,56035,56037],{"id":56036},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[19,56039,56040],{},[219,56041],{"alt":236,"src":56042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[19,56044,56045],{},[219,56046],{"alt":236,"src":56047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[19,56049,56050],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[53751,56052,56053],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[19,56055,56056],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[53751,56058,56059],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   let n1 = setInterval(fn, 1000)\n\n   console.log(n1)\n\n",[19,56061,56062],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[19,56064,56065],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[19,56067,56068],{},"单位为毫秒！！！",[19,56070,56071],{},"可以搭配匿名函数来用！！！",[19,56073,56074],{},"setInterval(function () {",[19,56076,56077],{},"alert('两秒执行一次')",[19,56079,56080],{},"}, 2000)",[19,56082,56083],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[19,56085,56086],{},"function fn() {",[19,56088,56089],{},"document.write(1)",[19,56091,3040],{},[19,56093,56094],{},"setInterval(fn, 1000)",[19,56096,56097],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[19,56099,56100],{},"setInterval('fn()', 1000)",[19,56102,56103],{},[219,56104],{"alt":236,"src":56105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[23945,56107,56109],{"id":56108},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[231,56111,56113],{"className":52579,"code":56112,"language":52581,"meta":236,"style":236},"\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",[23,56114,56115,56125,56139,56143,56151,56165,56185,56197,56205,56209,56217,56254,56259,56264,56269,56277,56285,56307,56315,56320,56342,56347,56352,56363,56368,56388,56396,56411,56426,56437,56442,56452,56462,56466,56475,56479,56487,56495,56499],{"__ignoreMap":236},[240,56116,56117,56119,56121,56123],{"class":242,"line":243},[240,56118,53243],{"class":257},[240,56120,53246],{"class":253},[240,56122,53249],{"class":436},[240,56124,447],{"class":257},[240,56126,56127,56129,56131,56133,56135,56137],{"class":242,"line":250},[240,56128,431],{"class":257},[240,56130,52581],{"class":253},[240,56132,53260],{"class":436},[240,56134,440],{"class":257},[240,56136,53265],{"class":443},[240,56138,447],{"class":257},[240,56140,56141],{"class":242,"line":261},[240,56142,4353],{"emptyLinePlaceholder":2051},[240,56144,56145,56147,56149],{"class":242,"line":277},[240,56146,431],{"class":257},[240,56148,53278],{"class":253},[240,56150,447],{"class":257},[240,56152,56153,56155,56157,56159,56161,56163],{"class":242,"line":294},[240,56154,452],{"class":257},[240,56156,53288],{"class":253},[240,56158,53291],{"class":436},[240,56160,440],{"class":257},[240,56162,53296],{"class":443},[240,56164,447],{"class":257},[240,56166,56167,56169,56171,56173,56175,56177,56179,56181,56183],{"class":242,"line":309},[240,56168,452],{"class":257},[240,56170,53288],{"class":253},[240,56172,16869],{"class":436},[240,56174,440],{"class":257},[240,56176,53335],{"class":443},[240,56178,53315],{"class":436},[240,56180,440],{"class":257},[240,56182,53342],{"class":443},[240,56184,447],{"class":257},[240,56186,56187,56189,56191,56193,56195],{"class":242,"line":529},[240,56188,452],{"class":257},[240,56190,53351],{"class":253},[240,56192,53354],{"class":257},[240,56194,53351],{"class":253},[240,56196,447],{"class":257},[240,56198,56199,56201,56203],{"class":242,"line":549},[240,56200,592],{"class":257},[240,56202,53278],{"class":253},[240,56204,447],{"class":257},[240,56206,56207],{"class":242,"line":569},[240,56208,4353],{"emptyLinePlaceholder":2051},[240,56210,56211,56213,56215],{"class":242,"line":589},[240,56212,431],{"class":257},[240,56214,53738],{"class":253},[240,56216,447],{"class":257},[240,56218,56219,56221,56224,56226,56228,56230,56232,56234,56236,56239,56241,56244,56247,56249,56252],{"class":242,"line":715},[240,56220,452],{"class":257},[240,56222,56223],{"class":253},"textarea",[240,56225,16869],{"class":436},[240,56227,440],{"class":257},[240,56229,9603],{"class":443},[240,56231,16908],{"class":436},[240,56233,440],{"class":257},[240,56235,9603],{"class":443},[240,56237,56238],{"class":436}," cols",[240,56240,440],{"class":257},[240,56242,56243],{"class":443},"\"30\"",[240,56245,56246],{"class":436}," rows",[240,56248,440],{"class":257},[240,56250,56251],{"class":443},"\"10\"",[240,56253,447],{"class":257},[240,56255,56256],{"class":242,"line":727},[240,56257,56258],{"class":257},"        用户注册协议\n",[240,56260,56261],{"class":242,"line":1730},[240,56262,56263],{"class":257},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[240,56265,56266],{"class":242,"line":3582},[240,56267,56268],{"class":257},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[240,56270,56271,56273,56275],{"class":242,"line":3596},[240,56272,53715],{"class":257},[240,56274,56223],{"class":253},[240,56276,447],{"class":257},[240,56278,56279,56281,56283],{"class":242,"line":3601},[240,56280,452],{"class":257},[240,56282,55651],{"class":253},[240,56284,447],{"class":257},[240,56286,56287,56289,56291,56293,56295,56298,56300,56303,56305],{"class":242,"line":3607},[240,56288,452],{"class":257},[240,56290,55822],{"class":253},[240,56292,437],{"class":436},[240,56294,440],{"class":257},[240,56296,56297],{"class":443},"\"btn\"",[240,56299,55825],{"class":436},[240,56301,56302],{"class":257},">我已经阅读用户协议(5)\u003C\u002F",[240,56304,55822],{"class":253},[240,56306,447],{"class":257},[240,56308,56309,56311,56313],{"class":242,"line":3628},[240,56310,452],{"class":257},[240,56312,53751],{"class":253},[240,56314,447],{"class":257},[240,56316,56317],{"class":242,"line":3633},[240,56318,56319],{"class":246},"    \u002F\u002F 1. 获取元素\n",[240,56321,56322,56324,56327,56329,56332,56335,56337,56340],{"class":242,"line":3647},[240,56323,13172],{"class":288},[240,56325,56326],{"class":264}," btn",[240,56328,15514],{"class":288},[240,56330,56331],{"class":257}," document.",[240,56333,56334],{"class":436},"querySelector",[240,56336,789],{"class":257},[240,56338,56339],{"class":443},"'.btn'",[240,56341,2129],{"class":257},[240,56343,56344],{"class":242,"line":3652},[240,56345,56346],{"class":246},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[240,56348,56349],{"class":242,"line":3681},[240,56350,56351],{"class":246},"    \u002F\u002F 2. 倒计时\n",[240,56353,56354,56356,56358,56360],{"class":242,"line":3686},[240,56355,54155],{"class":288},[240,56357,11389],{"class":257},[240,56359,440],{"class":288},[240,56361,56362],{"class":264}," 5\n",[240,56364,56365],{"class":242,"line":3703},[240,56366,56367],{"class":246},"    \u002F\u002F 2.1 开启定时器\n",[240,56369,56370,56372,56375,56377,56380,56382,56385],{"class":242,"line":3708},[240,56371,54155],{"class":288},[240,56373,56374],{"class":257}," n ",[240,56376,440],{"class":288},[240,56378,56379],{"class":436}," setInterval",[240,56381,789],{"class":257},[240,56383,56384],{"class":288},"function",[240,56386,56387],{"class":257}," () {\n",[240,56389,56390,56393],{"class":242,"line":3713},[240,56391,56392],{"class":257},"      i",[240,56394,56395],{"class":288},"--\n",[240,56397,56398,56401,56403,56406,56408],{"class":242,"line":3718},[240,56399,56400],{"class":257},"      btn.innerHTML ",[240,56402,440],{"class":288},[240,56404,56405],{"class":443}," `我已经阅读用户协议(${",[240,56407,2541],{"class":257},[240,56409,56410],{"class":443},"})`\n",[240,56412,56413,56416,56419,56422,56424],{"class":242,"line":3732},[240,56414,56415],{"class":288},"      if",[240,56417,56418],{"class":257}," (i ",[240,56420,56421],{"class":288},"===",[240,56423,6045],{"class":264},[240,56425,14392],{"class":257},[240,56427,56428,56431,56434],{"class":242,"line":3737},[240,56429,56430],{"class":436},"        clearInterval",[240,56432,56433],{"class":257},"(n)  ",[240,56435,56436],{"class":246},"\u002F\u002F 关闭定时器\n",[240,56438,56439],{"class":242,"line":4530},[240,56440,56441],{"class":246},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[240,56443,56444,56447,56449],{"class":242,"line":4544},[240,56445,56446],{"class":257},"        btn.disabled ",[240,56448,440],{"class":288},[240,56450,56451],{"class":264}," false\n",[240,56453,56454,56457,56459],{"class":242,"line":4552},[240,56455,56456],{"class":257},"        btn.innerHTML ",[240,56458,440],{"class":288},[240,56460,56461],{"class":443}," '同意'\n",[240,56463,56464],{"class":242,"line":4557},[240,56465,54334],{"class":257},[240,56467,56468,56471,56473],{"class":242,"line":4563},[240,56469,56470],{"class":257},"    }, ",[240,56472,8361],{"class":264},[240,56474,2129],{"class":257},[240,56476,56477],{"class":242,"line":4569},[240,56478,4353],{"emptyLinePlaceholder":2051},[240,56480,56481,56483,56485],{"class":242,"line":4574},[240,56482,54353],{"class":257},[240,56484,53751],{"class":253},[240,56486,447],{"class":257},[240,56488,56489,56491,56493],{"class":242,"line":9899},[240,56490,592],{"class":257},[240,56492,53738],{"class":253},[240,56494,447],{"class":257},[240,56496,56497],{"class":242,"line":9923},[240,56498,4353],{"emptyLinePlaceholder":2051},[240,56500,56501,56503,56505],{"class":242,"line":9928},[240,56502,592],{"class":257},[240,56504,52581],{"class":253},[240,56506,447],{"class":257},[19,56508,56509],{},"不要一直想着用死循环,避免死循环",[19,56511,56512,56515],{},[23,56513,56514],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[23945,56517,56519],{"id":56518},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[1826,56521,56522],{},[1829,56523,56524],{},"法1",[231,56526,56528],{"className":52579,"code":56527,"language":52581,"meta":236,"style":236},"\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",[23,56529,56530,56540,56554,56558,56566,56580,56600,56612,56620,56626,56637,56648,56652,56656,56663,56674,56678,56682,56689,56701,56715,56728,56742,56746,56750,56757,56768,56779,56790,56802,56814,56826,56830,56834,56842,56852,56865,56877,56890,56894,56898,56905,56915,56927,56939,56950,56961,56971,56983,56995,56999,57003,57012,57024,57036,57063,57076,57080,57084,57091,57102,57106,57114,57122,57126,57134,57148,57163,57187,57195,57210,57223,57231,57252,57264,57276,57288,57300,57312,57324,57336,57345,57353,57361,57369,57381,57404,57423,57442,57461,57480,57499,57518,57538,57542,57562,57581,57601,57622,57633,57650,57660,57670,57680,57685,57690,57695,57700,57725,57738,57742,57765,57769,57777,57785,57793,57797],{"__ignoreMap":236},[240,56531,56532,56534,56536,56538],{"class":242,"line":243},[240,56533,53243],{"class":257},[240,56535,53246],{"class":253},[240,56537,53249],{"class":436},[240,56539,447],{"class":257},[240,56541,56542,56544,56546,56548,56550,56552],{"class":242,"line":250},[240,56543,431],{"class":257},[240,56545,52581],{"class":253},[240,56547,53260],{"class":436},[240,56549,440],{"class":257},[240,56551,53265],{"class":443},[240,56553,447],{"class":257},[240,56555,56556],{"class":242,"line":261},[240,56557,4353],{"emptyLinePlaceholder":2051},[240,56559,56560,56562,56564],{"class":242,"line":277},[240,56561,431],{"class":257},[240,56563,53278],{"class":253},[240,56565,447],{"class":257},[240,56567,56568,56570,56572,56574,56576,56578],{"class":242,"line":294},[240,56569,452],{"class":257},[240,56571,53288],{"class":253},[240,56573,53291],{"class":436},[240,56575,440],{"class":257},[240,56577,53296],{"class":443},[240,56579,447],{"class":257},[240,56581,56582,56584,56586,56588,56590,56592,56594,56596,56598],{"class":242,"line":309},[240,56583,452],{"class":257},[240,56585,53288],{"class":253},[240,56587,16869],{"class":436},[240,56589,440],{"class":257},[240,56591,53335],{"class":443},[240,56593,53315],{"class":436},[240,56595,440],{"class":257},[240,56597,53342],{"class":443},[240,56599,447],{"class":257},[240,56601,56602,56604,56606,56608,56610],{"class":242,"line":529},[240,56603,452],{"class":257},[240,56605,53351],{"class":253},[240,56607,53354],{"class":257},[240,56609,53351],{"class":253},[240,56611,447],{"class":257},[240,56613,56614,56616,56618],{"class":242,"line":549},[240,56615,452],{"class":257},[240,56617,2019],{"class":253},[240,56619,447],{"class":257},[240,56621,56622,56624],{"class":242,"line":569},[240,56623,8354],{"class":253},[240,56625,258],{"class":257},[240,56627,56628,56631,56633,56635],{"class":242,"line":589},[240,56629,56630],{"class":264},"      padding",[240,56632,268],{"class":257},[240,56634,1274],{"class":264},[240,56636,274],{"class":257},[240,56638,56639,56642,56644,56646],{"class":242,"line":715},[240,56640,56641],{"class":264},"      margin",[240,56643,268],{"class":257},[240,56645,1274],{"class":264},[240,56647,274],{"class":257},[240,56649,56650],{"class":242,"line":727},[240,56651,4140],{"class":257},[240,56653,56654],{"class":242,"line":1730},[240,56655,4353],{"emptyLinePlaceholder":2051},[240,56657,56658,56661],{"class":242,"line":3582},[240,56659,56660],{"class":253},"    li",[240,56662,258],{"class":257},[240,56664,56665,56668,56670,56672],{"class":242,"line":3596},[240,56666,56667],{"class":264},"      list-style",[240,56669,268],{"class":257},[240,56671,826],{"class":264},[240,56673,274],{"class":257},[240,56675,56676],{"class":242,"line":3601},[240,56677,4140],{"class":257},[240,56679,56680],{"class":242,"line":3607},[240,56681,4353],{"emptyLinePlaceholder":2051},[240,56683,56684,56687],{"class":242,"line":3628},[240,56685,56686],{"class":436},"    .box",[240,56688,258],{"class":257},[240,56690,56691,56694,56696,56699],{"class":242,"line":3633},[240,56692,56693],{"class":264},"      position",[240,56695,268],{"class":257},[240,56697,56698],{"class":264},"relative",[240,56700,274],{"class":257},[240,56702,56703,56706,56708,56711,56713],{"class":242,"line":3647},[240,56704,56705],{"class":264},"      width",[240,56707,268],{"class":257},[240,56709,56710],{"class":264},"976",[240,56712,289],{"class":288},[240,56714,274],{"class":257},[240,56716,56717,56720,56722,56724,56726],{"class":242,"line":3652},[240,56718,56719],{"class":264},"      height",[240,56721,268],{"class":257},[240,56723,3497],{"class":264},[240,56725,289],{"class":288},[240,56727,274],{"class":257},[240,56729,56730,56732,56734,56736,56738,56740],{"class":242,"line":3681},[240,56731,56641],{"class":264},[240,56733,268],{"class":257},[240,56735,285],{"class":264},[240,56737,289],{"class":288},[240,56739,53498],{"class":264},[240,56741,274],{"class":257},[240,56743,56744],{"class":242,"line":3686},[240,56745,4140],{"class":257},[240,56747,56748],{"class":242,"line":3703},[240,56749,4353],{"emptyLinePlaceholder":2051},[240,56751,56752,56755],{"class":242,"line":3708},[240,56753,56754],{"class":436},"    .slider-footer",[240,56756,258],{"class":257},[240,56758,56759,56761,56763,56766],{"class":242,"line":3713},[240,56760,56693],{"class":264},[240,56762,268],{"class":257},[240,56764,56765],{"class":264},"absolute",[240,56767,274],{"class":257},[240,56769,56770,56773,56775,56777],{"class":242,"line":3718},[240,56771,56772],{"class":264},"      left",[240,56774,268],{"class":257},[240,56776,1274],{"class":264},[240,56778,274],{"class":257},[240,56780,56781,56784,56786,56788],{"class":242,"line":3732},[240,56782,56783],{"class":264},"      bottom",[240,56785,268],{"class":257},[240,56787,1274],{"class":264},[240,56789,274],{"class":257},[240,56791,56792,56794,56796,56798,56800],{"class":242,"line":3737},[240,56793,56705],{"class":264},[240,56795,268],{"class":257},[240,56797,285],{"class":264},[240,56799,2429],{"class":288},[240,56801,274],{"class":257},[240,56803,56804,56806,56808,56810,56812],{"class":242,"line":4530},[240,56805,56719],{"class":264},[240,56807,268],{"class":257},[240,56809,2674],{"class":264},[240,56811,2429],{"class":288},[240,56813,274],{"class":257},[240,56815,56816,56819,56821,56824],{"class":242,"line":4544},[240,56817,56818],{"class":264},"      background-color",[240,56820,268],{"class":257},[240,56822,56823],{"class":264},"skyblue",[240,56825,274],{"class":257},[240,56827,56828],{"class":242,"line":4552},[240,56829,4140],{"class":257},[240,56831,56832],{"class":242,"line":4557},[240,56833,4353],{"emptyLinePlaceholder":2051},[240,56835,56836,56838,56840],{"class":242,"line":4563},[240,56837,56754],{"class":436},[240,56839,8776],{"class":253},[240,56841,258],{"class":257},[240,56843,56844,56846,56848,56850],{"class":242,"line":4569},[240,56845,56693],{"class":264},[240,56847,268],{"class":257},[240,56849,56765],{"class":264},[240,56851,274],{"class":257},[240,56853,56854,56857,56859,56861,56863],{"class":242,"line":4574},[240,56855,56856],{"class":264},"      font-size",[240,56858,268],{"class":257},[240,56860,2996],{"class":264},[240,56862,289],{"class":288},[240,56864,274],{"class":257},[240,56866,56867,56869,56871,56873,56875],{"class":242,"line":9899},[240,56868,56772],{"class":264},[240,56870,268],{"class":257},[240,56872,1000],{"class":264},[240,56874,289],{"class":288},[240,56876,274],{"class":257},[240,56878,56879,56882,56884,56886,56888],{"class":242,"line":9923},[240,56880,56881],{"class":264},"      top",[240,56883,268],{"class":257},[240,56885,1741],{"class":264},[240,56887,289],{"class":288},[240,56889,274],{"class":257},[240,56891,56892],{"class":242,"line":9928},[240,56893,4140],{"class":257},[240,56895,56896],{"class":242,"line":9934},[240,56897,4353],{"emptyLinePlaceholder":2051},[240,56899,56900,56903],{"class":242,"line":9961},[240,56901,56902],{"class":253},"    ul",[240,56904,258],{"class":257},[240,56906,56907,56909,56911,56913],{"class":242,"line":9966},[240,56908,56693],{"class":264},[240,56910,268],{"class":257},[240,56912,56765],{"class":264},[240,56914,274],{"class":257},[240,56916,56917,56919,56921,56923,56925],{"class":242,"line":9972},[240,56918,56881],{"class":264},[240,56920,268],{"class":257},[240,56922,2878],{"class":264},[240,56924,289],{"class":288},[240,56926,274],{"class":257},[240,56928,56929,56931,56933,56935,56937],{"class":242,"line":9984},[240,56930,56772],{"class":264},[240,56932,268],{"class":257},[240,56934,1000],{"class":264},[240,56936,289],{"class":288},[240,56938,274],{"class":257},[240,56940,56941,56944,56946,56948],{"class":242,"line":9996},[240,56942,56943],{"class":264},"      display",[240,56945,268],{"class":257},[240,56947,53420],{"class":264},[240,56949,274],{"class":257},[240,56951,56952,56955,56957,56959],{"class":242,"line":10008},[240,56953,56954],{"class":264},"      justify-content",[240,56956,268],{"class":257},[240,56958,53607],{"class":264},[240,56960,274],{"class":257},[240,56962,56963,56965,56967,56969],{"class":242,"line":11667},[240,56964,56693],{"class":264},[240,56966,268],{"class":257},[240,56968,56765],{"class":264},[240,56970,274],{"class":257},[240,56972,56973,56975,56977,56979,56981],{"class":242,"line":11692},[240,56974,56705],{"class":264},[240,56976,268],{"class":257},[240,56978,5944],{"class":264},[240,56980,289],{"class":288},[240,56982,274],{"class":257},[240,56984,56985,56987,56989,56991,56993],{"class":242,"line":11715},[240,56986,56719],{"class":264},[240,56988,268],{"class":257},[240,56990,1000],{"class":264},[240,56992,289],{"class":288},[240,56994,274],{"class":257},[240,56996,56997],{"class":242,"line":11739},[240,56998,4140],{"class":257},[240,57000,57001],{"class":242,"line":11744},[240,57002,4353],{"emptyLinePlaceholder":2051},[240,57004,57005,57007,57010],{"class":242,"line":11749},[240,57006,56902],{"class":253},[240,57008,57009],{"class":253}," li",[240,57011,258],{"class":257},[240,57013,57014,57016,57018,57020,57022],{"class":242,"line":11754},[240,57015,56705],{"class":264},[240,57017,268],{"class":257},[240,57019,1000],{"class":264},[240,57021,289],{"class":288},[240,57023,274],{"class":257},[240,57025,57026,57028,57030,57032,57034],{"class":242,"line":11763},[240,57027,56719],{"class":264},[240,57029,268],{"class":257},[240,57031,1000],{"class":264},[240,57033,289],{"class":288},[240,57035,274],{"class":257},[240,57037,57038,57040,57042,57044,57046,57048,57050,57052,57054,57056,57058,57061],{"class":242,"line":11768},[240,57039,56818],{"class":264},[240,57041,268],{"class":257},[240,57043,1269],{"class":264},[240,57045,789],{"class":257},[240,57047,1274],{"class":264},[240,57049,1277],{"class":257},[240,57051,1274],{"class":264},[240,57053,1277],{"class":257},[240,57055,1274],{"class":264},[240,57057,1277],{"class":257},[240,57059,57060],{"class":264},".4",[240,57062,796],{"class":257},[240,57064,57065,57068,57070,57072,57074],{"class":242,"line":11774},[240,57066,57067],{"class":264},"      border-radius",[240,57069,268],{"class":257},[240,57071,2546],{"class":264},[240,57073,289],{"class":288},[240,57075,274],{"class":257},[240,57077,57078],{"class":242,"line":11795},[240,57079,4140],{"class":257},[240,57081,57082],{"class":242,"line":11801},[240,57083,4353],{"emptyLinePlaceholder":2051},[240,57085,57086,57089],{"class":242,"line":11815},[240,57087,57088],{"class":436},"    .activate",[240,57090,258],{"class":257},[240,57092,57093,57095,57097,57100],{"class":242,"line":11821},[240,57094,56818],{"class":264},[240,57096,268],{"class":257},[240,57098,57099],{"class":264},"#f7f7f7",[240,57101,274],{"class":257},[240,57103,57104],{"class":242,"line":11848},[240,57105,4140],{"class":257},[240,57107,57108,57110,57112],{"class":242,"line":11857},[240,57109,54353],{"class":257},[240,57111,2019],{"class":253},[240,57113,447],{"class":257},[240,57115,57116,57118,57120],{"class":242,"line":11863},[240,57117,592],{"class":257},[240,57119,53278],{"class":253},[240,57121,447],{"class":257},[240,57123,57124],{"class":242,"line":11871},[240,57125,4353],{"emptyLinePlaceholder":2051},[240,57127,57128,57130,57132],{"class":242,"line":11876},[240,57129,431],{"class":257},[240,57131,53738],{"class":253},[240,57133,447],{"class":257},[240,57135,57136,57138,57140,57142,57144,57146],{"class":242,"line":18552},[240,57137,452],{"class":257},[240,57139,330],{"class":253},[240,57141,437],{"class":436},[240,57143,440],{"class":257},[240,57145,55426],{"class":443},[240,57147,447],{"class":257},[240,57149,57150,57152,57154,57156,57158,57161],{"class":242,"line":18558},[240,57151,53285],{"class":257},[240,57153,330],{"class":253},[240,57155,437],{"class":436},[240,57157,440],{"class":257},[240,57159,57160],{"class":443},"\"slider-wrapper\"",[240,57162,447],{"class":257},[240,57164,57165,57168,57170,57173,57175,57178,57181,57183,57185],{"class":242,"line":18581},[240,57166,57167],{"class":257},"      \u003C",[240,57169,219],{"class":253},[240,57171,57172],{"class":436}," src",[240,57174,440],{"class":257},[240,57176,57177],{"class":443},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[240,57179,57180],{"class":436}," alt",[240,57182,440],{"class":257},[240,57184,9603],{"class":443},[240,57186,447],{"class":257},[240,57188,57189,57191,57193],{"class":242,"line":18587},[240,57190,53715],{"class":257},[240,57192,330],{"class":253},[240,57194,447],{"class":257},[240,57196,57197,57199,57201,57203,57205,57208],{"class":242,"line":18610},[240,57198,53285],{"class":257},[240,57200,330],{"class":253},[240,57202,437],{"class":436},[240,57204,440],{"class":257},[240,57206,57207],{"class":443},"\"slider-footer\"",[240,57209,447],{"class":257},[240,57211,57212,57214,57216,57219,57221],{"class":242,"line":18624},[240,57213,57167],{"class":257},[240,57215,19],{"class":253},[240,57217,57218],{"class":257},">对人类来说会不会太超前了?\u003C\u002F",[240,57220,19],{"class":253},[240,57222,447],{"class":257},[240,57224,57225,57227,57229],{"class":242,"line":18644},[240,57226,57167],{"class":257},[240,57228,3100],{"class":253},[240,57230,447],{"class":257},[240,57232,57233,57236,57238,57240,57242,57245,57248,57250],{"class":242,"line":18650},[240,57234,57235],{"class":257},"        \u003C",[240,57237,1829],{"class":253},[240,57239,437],{"class":436},[240,57241,440],{"class":257},[240,57243,57244],{"class":443},"\"activate\"",[240,57246,57247],{"class":257},">\u003C\u002F",[240,57249,1829],{"class":253},[240,57251,447],{"class":257},[240,57253,57254,57256,57258,57260,57262],{"class":242,"line":18661},[240,57255,57235],{"class":257},[240,57257,1829],{"class":253},[240,57259,57247],{"class":257},[240,57261,1829],{"class":253},[240,57263,447],{"class":257},[240,57265,57266,57268,57270,57272,57274],{"class":242,"line":18684},[240,57267,57235],{"class":257},[240,57269,1829],{"class":253},[240,57271,57247],{"class":257},[240,57273,1829],{"class":253},[240,57275,447],{"class":257},[240,57277,57278,57280,57282,57284,57286],{"class":242,"line":18706},[240,57279,57235],{"class":257},[240,57281,1829],{"class":253},[240,57283,57247],{"class":257},[240,57285,1829],{"class":253},[240,57287,447],{"class":257},[240,57289,57290,57292,57294,57296,57298],{"class":242,"line":18711},[240,57291,57235],{"class":257},[240,57293,1829],{"class":253},[240,57295,57247],{"class":257},[240,57297,1829],{"class":253},[240,57299,447],{"class":257},[240,57301,57302,57304,57306,57308,57310],{"class":242,"line":18717},[240,57303,57235],{"class":257},[240,57305,1829],{"class":253},[240,57307,57247],{"class":257},[240,57309,1829],{"class":253},[240,57311,447],{"class":257},[240,57313,57314,57316,57318,57320,57322],{"class":242,"line":18731},[240,57315,57235],{"class":257},[240,57317,1829],{"class":253},[240,57319,57247],{"class":257},[240,57321,1829],{"class":253},[240,57323,447],{"class":257},[240,57325,57326,57328,57330,57332,57334],{"class":242,"line":18744},[240,57327,57235],{"class":257},[240,57329,1829],{"class":253},[240,57331,57247],{"class":257},[240,57333,1829],{"class":253},[240,57335,447],{"class":257},[240,57337,57338,57341,57343],{"class":242,"line":18749},[240,57339,57340],{"class":257},"      \u003C\u002F",[240,57342,3100],{"class":253},[240,57344,447],{"class":257},[240,57346,57347,57349,57351],{"class":242,"line":18763},[240,57348,53715],{"class":257},[240,57350,330],{"class":253},[240,57352,447],{"class":257},[240,57354,57355,57357,57359],{"class":242,"line":18768},[240,57356,54353],{"class":257},[240,57358,330],{"class":253},[240,57360,447],{"class":257},[240,57362,57363,57365,57367],{"class":242,"line":18774},[240,57364,452],{"class":257},[240,57366,53751],{"class":253},[240,57368,447],{"class":257},[240,57370,57371,57373,57376,57378],{"class":242,"line":18779},[240,57372,13172],{"class":288},[240,57374,57375],{"class":264}," arrImage",[240,57377,15514],{"class":288},[240,57379,57380],{"class":257}," [\n",[240,57382,57383,57386,57389,57392,57395,57398,57401],{"class":242,"line":18793},[240,57384,57385],{"class":257},"      { url: ",[240,57387,57388],{"class":443},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[240,57390,57391],{"class":257},", title: ",[240,57393,57394],{"class":443},"'对人类来说会不会太超前了?'",[240,57396,57397],{"class":257},", color: ",[240,57399,57400],{"class":443},"'rgba(100,67,68)'",[240,57402,57403],{"class":257}," },\n",[240,57405,57406,57408,57411,57413,57416,57418,57421],{"class":242,"line":18798},[240,57407,57385],{"class":257},[240,57409,57410],{"class":443},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[240,57412,57391],{"class":257},[240,57414,57415],{"class":443},"'开启剑与雪的黑暗传说!'",[240,57417,57397],{"class":257},[240,57419,57420],{"class":443},"'rgba(43,35,26)'",[240,57422,57403],{"class":257},[240,57424,57425,57427,57430,57432,57435,57437,57440],{"class":242,"line":18803},[240,57426,57385],{"class":257},[240,57428,57429],{"class":443},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[240,57431,57391],{"class":257},[240,57433,57434],{"class":443},"'真正的jo厨出现了!'",[240,57436,57397],{"class":257},[240,57438,57439],{"class":443},"'rgba(36,31,33)'",[240,57441,57403],{"class":257},[240,57443,57444,57446,57449,57451,57454,57456,57459],{"class":242,"line":18817},[240,57445,57385],{"class":257},[240,57447,57448],{"class":443},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[240,57450,57391],{"class":257},[240,57452,57453],{"class":443},"'李玉刚:让世界通过b站看到东方大国文化'",[240,57455,57397],{"class":257},[240,57457,57458],{"class":443},"'rgba(139,98,66)'",[240,57460,57403],{"class":257},[240,57462,57463,57465,57468,57470,57473,57475,57478],{"class":242,"line":18829},[240,57464,57385],{"class":257},[240,57466,57467],{"class":443},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[240,57469,57391],{"class":257},[240,57471,57472],{"class":443},"'快来分享你的寒假日常吧'",[240,57474,57397],{"class":257},[240,57476,57477],{"class":443},"'rgba(67,90,92)'",[240,57479,57403],{"class":257},[240,57481,57482,57484,57487,57489,57492,57494,57497],{"class":242,"line":18834},[240,57483,57385],{"class":257},[240,57485,57486],{"class":443},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[240,57488,57391],{"class":257},[240,57490,57491],{"class":443},"'哔哩哔哩小年YEAR'",[240,57493,57397],{"class":257},[240,57495,57496],{"class":443},"'rgba(166,131,143)'",[240,57498,57403],{"class":257},[240,57500,57501,57503,57506,57508,57511,57513,57516],{"class":242,"line":18847},[240,57502,57385],{"class":257},[240,57504,57505],{"class":443},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[240,57507,57391],{"class":257},[240,57509,57510],{"class":443},"'一站式解决你的电脑配置问题'",[240,57512,57397],{"class":257},[240,57514,57515],{"class":443},"'rgba(53,29,25)'",[240,57517,57403],{"class":257},[240,57519,57520,57522,57525,57527,57530,57532,57535],{"class":242,"line":18852},[240,57521,57385],{"class":257},[240,57523,57524],{"class":443},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[240,57526,57391],{"class":257},[240,57528,57529],{"class":443},"'谁不想和小猫咪贴贴呢?'",[240,57531,57397],{"class":257},[240,57533,57534],{"class":443},"'rgba(99,72,114)'",[240,57536,57537],{"class":257}," }\n",[240,57539,57540],{"class":242,"line":18857},[240,57541,55045],{"class":257},[240,57543,57544,57546,57549,57551,57553,57555,57557,57560],{"class":242,"line":18862},[240,57545,13172],{"class":288},[240,57547,57548],{"class":264}," img",[240,57550,15514],{"class":288},[240,57552,56331],{"class":257},[240,57554,56334],{"class":436},[240,57556,789],{"class":257},[240,57558,57559],{"class":443},"'.slider-wrapper img'",[240,57561,2129],{"class":257},[240,57563,57564,57566,57568,57570,57572,57574,57576,57579],{"class":242,"line":18875},[240,57565,13172],{"class":288},[240,57567,8776],{"class":264},[240,57569,15514],{"class":288},[240,57571,56331],{"class":257},[240,57573,56334],{"class":436},[240,57575,789],{"class":257},[240,57577,57578],{"class":443},"'.slider-footer p'",[240,57580,2129],{"class":257},[240,57582,57583,57585,57588,57590,57592,57594,57596,57599],{"class":242,"line":18880},[240,57584,13172],{"class":288},[240,57586,57587],{"class":264}," color",[240,57589,15514],{"class":288},[240,57591,56331],{"class":257},[240,57593,56334],{"class":436},[240,57595,789],{"class":257},[240,57597,57598],{"class":443},"'.slider-footer'",[240,57600,2129],{"class":257},[240,57602,57603,57605,57608,57610,57612,57615,57617,57620],{"class":242,"line":34579},[240,57604,13172],{"class":288},[240,57606,57607],{"class":264}," lis",[240,57609,15514],{"class":288},[240,57611,56331],{"class":257},[240,57613,57614],{"class":436},"querySelectorAll",[240,57616,789],{"class":257},[240,57618,57619],{"class":443},"'.slider-footer ul li'",[240,57621,2129],{"class":257},[240,57623,57624,57626,57628,57630],{"class":242,"line":34585},[240,57625,54155],{"class":288},[240,57627,11389],{"class":257},[240,57629,440],{"class":288},[240,57631,57632],{"class":264}," 1\n",[240,57634,57635,57637,57640,57642,57644,57646,57648],{"class":242,"line":34591},[240,57636,54155],{"class":288},[240,57638,57639],{"class":257}," timer ",[240,57641,440],{"class":288},[240,57643,56379],{"class":436},[240,57645,789],{"class":257},[240,57647,56384],{"class":288},[240,57649,56387],{"class":257},[240,57651,57652,57655,57657],{"class":242,"line":34597},[240,57653,57654],{"class":257},"      img.src ",[240,57656,440],{"class":288},[240,57658,57659],{"class":257}," arrImage[i].url\n",[240,57661,57662,57665,57667],{"class":242,"line":34603},[240,57663,57664],{"class":257},"      p.innerHTML ",[240,57666,440],{"class":288},[240,57668,57669],{"class":257}," arrImage[i].title\n",[240,57671,57672,57675,57677],{"class":242,"line":34614},[240,57673,57674],{"class":257},"      color.style.backgroundColor ",[240,57676,440],{"class":288},[240,57678,57679],{"class":257}," arrImage[i].color\n",[240,57681,57682],{"class":242,"line":34620},[240,57683,57684],{"class":246},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[240,57686,57687],{"class":242,"line":34640},[240,57688,57689],{"class":246},"      \u002F\u002F li.classList.add('activate')\n",[240,57691,57692],{"class":242,"line":34646},[240,57693,57694],{"class":246},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[240,57696,57697],{"class":242,"line":34657},[240,57698,57699],{"class":246},"      \u002F\u002F lis[i].classList.remove('activate')\n",[240,57701,57702,57705,57707,57709,57712,57715,57718,57720,57723],{"class":242,"line":34663},[240,57703,57704],{"class":257},"      document.",[240,57706,56334],{"class":436},[240,57708,789],{"class":257},[240,57710,57711],{"class":443},"'.activate'",[240,57713,57714],{"class":257},")?.classList.",[240,57716,57717],{"class":436},"toggle",[240,57719,789],{"class":257},[240,57721,57722],{"class":443},"'activate'",[240,57724,2129],{"class":257},[240,57726,57727,57730,57732,57734,57736],{"class":242,"line":34669},[240,57728,57729],{"class":257},"      lis[i].classList.",[240,57731,7285],{"class":436},[240,57733,789],{"class":257},[240,57735,57722],{"class":443},[240,57737,2129],{"class":257},[240,57739,57740],{"class":242,"line":34675},[240,57741,4353],{"emptyLinePlaceholder":2051},[240,57743,57744,57747,57749,57751,57753,57755,57757,57759,57762],{"class":242,"line":34681},[240,57745,57746],{"class":257},"      i ",[240,57748,440],{"class":288},[240,57750,56418],{"class":257},[240,57752,2580],{"class":288},[240,57754,27065],{"class":264},[240,57756,1230],{"class":257},[240,57758,2429],{"class":288},[240,57760,57761],{"class":257}," arrImage.",[240,57763,57764],{"class":264},"length\n",[240,57766,57767],{"class":242,"line":34687},[240,57768,4353],{"emptyLinePlaceholder":2051},[240,57770,57771,57773,57775],{"class":242,"line":34693},[240,57772,56470],{"class":257},[240,57774,8361],{"class":264},[240,57776,2129],{"class":257},[240,57778,57779,57781,57783],{"class":242,"line":34699},[240,57780,54353],{"class":257},[240,57782,53751],{"class":253},[240,57784,447],{"class":257},[240,57786,57787,57789,57791],{"class":242,"line":34719},[240,57788,592],{"class":257},[240,57790,53738],{"class":253},[240,57792,447],{"class":257},[240,57794,57795],{"class":242,"line":34725},[240,57796,4353],{"emptyLinePlaceholder":2051},[240,57798,57799,57801,57803],{"class":242,"line":34741},[240,57800,592],{"class":257},[240,57802,52581],{"class":253},[240,57804,447],{"class":257},[19,57806,57807],{},[219,57808],{"alt":236,"src":57809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[19,57811,57812],{},"?.就是短路保护,确保输出正常进行",[19,57814,57815],{},"不要忘记取余%,有时候可以用",[19,57817,57818],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[1826,57820,57821],{"start":250},[1829,57822,57823],{},"法2",[231,57825,57827],{"className":52579,"code":57826,"language":52581,"meta":236,"style":236},"\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",[23,57828,57829,57839,57853,57857,57865,57879,57899,57911,57919,57925,57935,57945,57949,57953,57959,57969,57973,57977,57983,57993,58005,58017,58031,58035,58039,58045,58055,58065,58075,58087,58099,58109,58113,58117,58125,58135,58147,58159,58171,58175,58179,58185,58195,58207,58219,58229,58239,58249,58261,58273,58277,58281,58289,58301,58313,58339,58351,58355,58359,58365,58375,58379,58387,58395,58399,58407,58421,58435,58455,58463,58477,58489,58497,58515,58527,58539,58551,58563,58575,58587,58599,58607,58615,58623,58631,58642,58658,58674,58690,58706,58722,58738,58754,58770,58774,58779,58797,58815,58825,58830,58835,58846,58852,58867,58876,58880,58885,58894,58899,58908,58913,58918,58923,58946,58976,58980,58988,58992,59000,59008,59012],{"__ignoreMap":236},[240,57830,57831,57833,57835,57837],{"class":242,"line":243},[240,57832,53243],{"class":257},[240,57834,53246],{"class":253},[240,57836,53249],{"class":436},[240,57838,447],{"class":257},[240,57840,57841,57843,57845,57847,57849,57851],{"class":242,"line":250},[240,57842,431],{"class":257},[240,57844,52581],{"class":253},[240,57846,53260],{"class":436},[240,57848,440],{"class":257},[240,57850,53265],{"class":443},[240,57852,447],{"class":257},[240,57854,57855],{"class":242,"line":261},[240,57856,4353],{"emptyLinePlaceholder":2051},[240,57858,57859,57861,57863],{"class":242,"line":277},[240,57860,431],{"class":257},[240,57862,53278],{"class":253},[240,57864,447],{"class":257},[240,57866,57867,57869,57871,57873,57875,57877],{"class":242,"line":294},[240,57868,452],{"class":257},[240,57870,53288],{"class":253},[240,57872,53291],{"class":436},[240,57874,440],{"class":257},[240,57876,53296],{"class":443},[240,57878,447],{"class":257},[240,57880,57881,57883,57885,57887,57889,57891,57893,57895,57897],{"class":242,"line":309},[240,57882,452],{"class":257},[240,57884,53288],{"class":253},[240,57886,16869],{"class":436},[240,57888,440],{"class":257},[240,57890,53335],{"class":443},[240,57892,53315],{"class":436},[240,57894,440],{"class":257},[240,57896,53342],{"class":443},[240,57898,447],{"class":257},[240,57900,57901,57903,57905,57907,57909],{"class":242,"line":529},[240,57902,452],{"class":257},[240,57904,53351],{"class":253},[240,57906,53354],{"class":257},[240,57908,53351],{"class":253},[240,57910,447],{"class":257},[240,57912,57913,57915,57917],{"class":242,"line":549},[240,57914,452],{"class":257},[240,57916,2019],{"class":253},[240,57918,447],{"class":257},[240,57920,57921,57923],{"class":242,"line":569},[240,57922,8354],{"class":253},[240,57924,258],{"class":257},[240,57926,57927,57929,57931,57933],{"class":242,"line":589},[240,57928,56630],{"class":264},[240,57930,268],{"class":257},[240,57932,1274],{"class":264},[240,57934,274],{"class":257},[240,57936,57937,57939,57941,57943],{"class":242,"line":715},[240,57938,56641],{"class":264},[240,57940,268],{"class":257},[240,57942,1274],{"class":264},[240,57944,274],{"class":257},[240,57946,57947],{"class":242,"line":727},[240,57948,4140],{"class":257},[240,57950,57951],{"class":242,"line":1730},[240,57952,4353],{"emptyLinePlaceholder":2051},[240,57954,57955,57957],{"class":242,"line":3582},[240,57956,56660],{"class":253},[240,57958,258],{"class":257},[240,57960,57961,57963,57965,57967],{"class":242,"line":3596},[240,57962,56667],{"class":264},[240,57964,268],{"class":257},[240,57966,826],{"class":264},[240,57968,274],{"class":257},[240,57970,57971],{"class":242,"line":3601},[240,57972,4140],{"class":257},[240,57974,57975],{"class":242,"line":3607},[240,57976,4353],{"emptyLinePlaceholder":2051},[240,57978,57979,57981],{"class":242,"line":3628},[240,57980,56686],{"class":436},[240,57982,258],{"class":257},[240,57984,57985,57987,57989,57991],{"class":242,"line":3633},[240,57986,56693],{"class":264},[240,57988,268],{"class":257},[240,57990,56698],{"class":264},[240,57992,274],{"class":257},[240,57994,57995,57997,57999,58001,58003],{"class":242,"line":3647},[240,57996,56705],{"class":264},[240,57998,268],{"class":257},[240,58000,56710],{"class":264},[240,58002,289],{"class":288},[240,58004,274],{"class":257},[240,58006,58007,58009,58011,58013,58015],{"class":242,"line":3652},[240,58008,56719],{"class":264},[240,58010,268],{"class":257},[240,58012,3497],{"class":264},[240,58014,289],{"class":288},[240,58016,274],{"class":257},[240,58018,58019,58021,58023,58025,58027,58029],{"class":242,"line":3681},[240,58020,56641],{"class":264},[240,58022,268],{"class":257},[240,58024,285],{"class":264},[240,58026,289],{"class":288},[240,58028,53498],{"class":264},[240,58030,274],{"class":257},[240,58032,58033],{"class":242,"line":3686},[240,58034,4140],{"class":257},[240,58036,58037],{"class":242,"line":3703},[240,58038,4353],{"emptyLinePlaceholder":2051},[240,58040,58041,58043],{"class":242,"line":3708},[240,58042,56754],{"class":436},[240,58044,258],{"class":257},[240,58046,58047,58049,58051,58053],{"class":242,"line":3713},[240,58048,56693],{"class":264},[240,58050,268],{"class":257},[240,58052,56765],{"class":264},[240,58054,274],{"class":257},[240,58056,58057,58059,58061,58063],{"class":242,"line":3718},[240,58058,56772],{"class":264},[240,58060,268],{"class":257},[240,58062,1274],{"class":264},[240,58064,274],{"class":257},[240,58066,58067,58069,58071,58073],{"class":242,"line":3732},[240,58068,56783],{"class":264},[240,58070,268],{"class":257},[240,58072,1274],{"class":264},[240,58074,274],{"class":257},[240,58076,58077,58079,58081,58083,58085],{"class":242,"line":3737},[240,58078,56705],{"class":264},[240,58080,268],{"class":257},[240,58082,285],{"class":264},[240,58084,2429],{"class":288},[240,58086,274],{"class":257},[240,58088,58089,58091,58093,58095,58097],{"class":242,"line":4530},[240,58090,56719],{"class":264},[240,58092,268],{"class":257},[240,58094,2674],{"class":264},[240,58096,2429],{"class":288},[240,58098,274],{"class":257},[240,58100,58101,58103,58105,58107],{"class":242,"line":4544},[240,58102,56818],{"class":264},[240,58104,268],{"class":257},[240,58106,56823],{"class":264},[240,58108,274],{"class":257},[240,58110,58111],{"class":242,"line":4552},[240,58112,4140],{"class":257},[240,58114,58115],{"class":242,"line":4557},[240,58116,4353],{"emptyLinePlaceholder":2051},[240,58118,58119,58121,58123],{"class":242,"line":4563},[240,58120,56754],{"class":436},[240,58122,8776],{"class":253},[240,58124,258],{"class":257},[240,58126,58127,58129,58131,58133],{"class":242,"line":4569},[240,58128,56693],{"class":264},[240,58130,268],{"class":257},[240,58132,56765],{"class":264},[240,58134,274],{"class":257},[240,58136,58137,58139,58141,58143,58145],{"class":242,"line":4574},[240,58138,56856],{"class":264},[240,58140,268],{"class":257},[240,58142,2996],{"class":264},[240,58144,289],{"class":288},[240,58146,274],{"class":257},[240,58148,58149,58151,58153,58155,58157],{"class":242,"line":9899},[240,58150,56772],{"class":264},[240,58152,268],{"class":257},[240,58154,1000],{"class":264},[240,58156,289],{"class":288},[240,58158,274],{"class":257},[240,58160,58161,58163,58165,58167,58169],{"class":242,"line":9923},[240,58162,56881],{"class":264},[240,58164,268],{"class":257},[240,58166,1741],{"class":264},[240,58168,289],{"class":288},[240,58170,274],{"class":257},[240,58172,58173],{"class":242,"line":9928},[240,58174,4140],{"class":257},[240,58176,58177],{"class":242,"line":9934},[240,58178,4353],{"emptyLinePlaceholder":2051},[240,58180,58181,58183],{"class":242,"line":9961},[240,58182,56902],{"class":253},[240,58184,258],{"class":257},[240,58186,58187,58189,58191,58193],{"class":242,"line":9966},[240,58188,56693],{"class":264},[240,58190,268],{"class":257},[240,58192,56765],{"class":264},[240,58194,274],{"class":257},[240,58196,58197,58199,58201,58203,58205],{"class":242,"line":9972},[240,58198,56881],{"class":264},[240,58200,268],{"class":257},[240,58202,2878],{"class":264},[240,58204,289],{"class":288},[240,58206,274],{"class":257},[240,58208,58209,58211,58213,58215,58217],{"class":242,"line":9984},[240,58210,56772],{"class":264},[240,58212,268],{"class":257},[240,58214,1000],{"class":264},[240,58216,289],{"class":288},[240,58218,274],{"class":257},[240,58220,58221,58223,58225,58227],{"class":242,"line":9996},[240,58222,56943],{"class":264},[240,58224,268],{"class":257},[240,58226,53420],{"class":264},[240,58228,274],{"class":257},[240,58230,58231,58233,58235,58237],{"class":242,"line":10008},[240,58232,56954],{"class":264},[240,58234,268],{"class":257},[240,58236,53607],{"class":264},[240,58238,274],{"class":257},[240,58240,58241,58243,58245,58247],{"class":242,"line":11667},[240,58242,56693],{"class":264},[240,58244,268],{"class":257},[240,58246,56765],{"class":264},[240,58248,274],{"class":257},[240,58250,58251,58253,58255,58257,58259],{"class":242,"line":11692},[240,58252,56705],{"class":264},[240,58254,268],{"class":257},[240,58256,5944],{"class":264},[240,58258,289],{"class":288},[240,58260,274],{"class":257},[240,58262,58263,58265,58267,58269,58271],{"class":242,"line":11715},[240,58264,56719],{"class":264},[240,58266,268],{"class":257},[240,58268,1000],{"class":264},[240,58270,289],{"class":288},[240,58272,274],{"class":257},[240,58274,58275],{"class":242,"line":11739},[240,58276,4140],{"class":257},[240,58278,58279],{"class":242,"line":11744},[240,58280,4353],{"emptyLinePlaceholder":2051},[240,58282,58283,58285,58287],{"class":242,"line":11749},[240,58284,56902],{"class":253},[240,58286,57009],{"class":253},[240,58288,258],{"class":257},[240,58290,58291,58293,58295,58297,58299],{"class":242,"line":11754},[240,58292,56705],{"class":264},[240,58294,268],{"class":257},[240,58296,1000],{"class":264},[240,58298,289],{"class":288},[240,58300,274],{"class":257},[240,58302,58303,58305,58307,58309,58311],{"class":242,"line":11763},[240,58304,56719],{"class":264},[240,58306,268],{"class":257},[240,58308,1000],{"class":264},[240,58310,289],{"class":288},[240,58312,274],{"class":257},[240,58314,58315,58317,58319,58321,58323,58325,58327,58329,58331,58333,58335,58337],{"class":242,"line":11768},[240,58316,56818],{"class":264},[240,58318,268],{"class":257},[240,58320,1269],{"class":264},[240,58322,789],{"class":257},[240,58324,1274],{"class":264},[240,58326,1277],{"class":257},[240,58328,1274],{"class":264},[240,58330,1277],{"class":257},[240,58332,1274],{"class":264},[240,58334,1277],{"class":257},[240,58336,57060],{"class":264},[240,58338,796],{"class":257},[240,58340,58341,58343,58345,58347,58349],{"class":242,"line":11774},[240,58342,57067],{"class":264},[240,58344,268],{"class":257},[240,58346,2546],{"class":264},[240,58348,289],{"class":288},[240,58350,274],{"class":257},[240,58352,58353],{"class":242,"line":11795},[240,58354,4140],{"class":257},[240,58356,58357],{"class":242,"line":11801},[240,58358,4353],{"emptyLinePlaceholder":2051},[240,58360,58361,58363],{"class":242,"line":11815},[240,58362,57088],{"class":436},[240,58364,258],{"class":257},[240,58366,58367,58369,58371,58373],{"class":242,"line":11821},[240,58368,56818],{"class":264},[240,58370,268],{"class":257},[240,58372,57099],{"class":264},[240,58374,274],{"class":257},[240,58376,58377],{"class":242,"line":11848},[240,58378,4140],{"class":257},[240,58380,58381,58383,58385],{"class":242,"line":11857},[240,58382,54353],{"class":257},[240,58384,2019],{"class":253},[240,58386,447],{"class":257},[240,58388,58389,58391,58393],{"class":242,"line":11863},[240,58390,592],{"class":257},[240,58392,53278],{"class":253},[240,58394,447],{"class":257},[240,58396,58397],{"class":242,"line":11871},[240,58398,4353],{"emptyLinePlaceholder":2051},[240,58400,58401,58403,58405],{"class":242,"line":11876},[240,58402,431],{"class":257},[240,58404,53738],{"class":253},[240,58406,447],{"class":257},[240,58408,58409,58411,58413,58415,58417,58419],{"class":242,"line":18552},[240,58410,452],{"class":257},[240,58412,330],{"class":253},[240,58414,437],{"class":436},[240,58416,440],{"class":257},[240,58418,55426],{"class":443},[240,58420,447],{"class":257},[240,58422,58423,58425,58427,58429,58431,58433],{"class":242,"line":18558},[240,58424,53285],{"class":257},[240,58426,330],{"class":253},[240,58428,437],{"class":436},[240,58430,440],{"class":257},[240,58432,57160],{"class":443},[240,58434,447],{"class":257},[240,58436,58437,58439,58441,58443,58445,58447,58449,58451,58453],{"class":242,"line":18581},[240,58438,57167],{"class":257},[240,58440,219],{"class":253},[240,58442,57172],{"class":436},[240,58444,440],{"class":257},[240,58446,57177],{"class":443},[240,58448,57180],{"class":436},[240,58450,440],{"class":257},[240,58452,9603],{"class":443},[240,58454,447],{"class":257},[240,58456,58457,58459,58461],{"class":242,"line":18587},[240,58458,53715],{"class":257},[240,58460,330],{"class":253},[240,58462,447],{"class":257},[240,58464,58465,58467,58469,58471,58473,58475],{"class":242,"line":18610},[240,58466,53285],{"class":257},[240,58468,330],{"class":253},[240,58470,437],{"class":436},[240,58472,440],{"class":257},[240,58474,57207],{"class":443},[240,58476,447],{"class":257},[240,58478,58479,58481,58483,58485,58487],{"class":242,"line":18624},[240,58480,57167],{"class":257},[240,58482,19],{"class":253},[240,58484,57218],{"class":257},[240,58486,19],{"class":253},[240,58488,447],{"class":257},[240,58490,58491,58493,58495],{"class":242,"line":18644},[240,58492,57167],{"class":257},[240,58494,3100],{"class":253},[240,58496,447],{"class":257},[240,58498,58499,58501,58503,58505,58507,58509,58511,58513],{"class":242,"line":18650},[240,58500,57235],{"class":257},[240,58502,1829],{"class":253},[240,58504,437],{"class":436},[240,58506,440],{"class":257},[240,58508,57244],{"class":443},[240,58510,57247],{"class":257},[240,58512,1829],{"class":253},[240,58514,447],{"class":257},[240,58516,58517,58519,58521,58523,58525],{"class":242,"line":18661},[240,58518,57235],{"class":257},[240,58520,1829],{"class":253},[240,58522,57247],{"class":257},[240,58524,1829],{"class":253},[240,58526,447],{"class":257},[240,58528,58529,58531,58533,58535,58537],{"class":242,"line":18684},[240,58530,57235],{"class":257},[240,58532,1829],{"class":253},[240,58534,57247],{"class":257},[240,58536,1829],{"class":253},[240,58538,447],{"class":257},[240,58540,58541,58543,58545,58547,58549],{"class":242,"line":18706},[240,58542,57235],{"class":257},[240,58544,1829],{"class":253},[240,58546,57247],{"class":257},[240,58548,1829],{"class":253},[240,58550,447],{"class":257},[240,58552,58553,58555,58557,58559,58561],{"class":242,"line":18711},[240,58554,57235],{"class":257},[240,58556,1829],{"class":253},[240,58558,57247],{"class":257},[240,58560,1829],{"class":253},[240,58562,447],{"class":257},[240,58564,58565,58567,58569,58571,58573],{"class":242,"line":18717},[240,58566,57235],{"class":257},[240,58568,1829],{"class":253},[240,58570,57247],{"class":257},[240,58572,1829],{"class":253},[240,58574,447],{"class":257},[240,58576,58577,58579,58581,58583,58585],{"class":242,"line":18731},[240,58578,57235],{"class":257},[240,58580,1829],{"class":253},[240,58582,57247],{"class":257},[240,58584,1829],{"class":253},[240,58586,447],{"class":257},[240,58588,58589,58591,58593,58595,58597],{"class":242,"line":18744},[240,58590,57235],{"class":257},[240,58592,1829],{"class":253},[240,58594,57247],{"class":257},[240,58596,1829],{"class":253},[240,58598,447],{"class":257},[240,58600,58601,58603,58605],{"class":242,"line":18749},[240,58602,57340],{"class":257},[240,58604,3100],{"class":253},[240,58606,447],{"class":257},[240,58608,58609,58611,58613],{"class":242,"line":18763},[240,58610,53715],{"class":257},[240,58612,330],{"class":253},[240,58614,447],{"class":257},[240,58616,58617,58619,58621],{"class":242,"line":18768},[240,58618,54353],{"class":257},[240,58620,330],{"class":253},[240,58622,447],{"class":257},[240,58624,58625,58627,58629],{"class":242,"line":18774},[240,58626,452],{"class":257},[240,58628,53751],{"class":253},[240,58630,447],{"class":257},[240,58632,58633,58635,58638,58640],{"class":242,"line":18779},[240,58634,13172],{"class":288},[240,58636,58637],{"class":264}," sliderData",[240,58639,15514],{"class":288},[240,58641,57380],{"class":257},[240,58643,58644,58646,58648,58650,58652,58654,58656],{"class":242,"line":18793},[240,58645,57385],{"class":257},[240,58647,57388],{"class":443},[240,58649,57391],{"class":257},[240,58651,57394],{"class":443},[240,58653,57397],{"class":257},[240,58655,57400],{"class":443},[240,58657,57403],{"class":257},[240,58659,58660,58662,58664,58666,58668,58670,58672],{"class":242,"line":18798},[240,58661,57385],{"class":257},[240,58663,57410],{"class":443},[240,58665,57391],{"class":257},[240,58667,57415],{"class":443},[240,58669,57397],{"class":257},[240,58671,57420],{"class":443},[240,58673,57403],{"class":257},[240,58675,58676,58678,58680,58682,58684,58686,58688],{"class":242,"line":18803},[240,58677,57385],{"class":257},[240,58679,57429],{"class":443},[240,58681,57391],{"class":257},[240,58683,57434],{"class":443},[240,58685,57397],{"class":257},[240,58687,57439],{"class":443},[240,58689,57403],{"class":257},[240,58691,58692,58694,58696,58698,58700,58702,58704],{"class":242,"line":18817},[240,58693,57385],{"class":257},[240,58695,57448],{"class":443},[240,58697,57391],{"class":257},[240,58699,57453],{"class":443},[240,58701,57397],{"class":257},[240,58703,57458],{"class":443},[240,58705,57403],{"class":257},[240,58707,58708,58710,58712,58714,58716,58718,58720],{"class":242,"line":18829},[240,58709,57385],{"class":257},[240,58711,57467],{"class":443},[240,58713,57391],{"class":257},[240,58715,57472],{"class":443},[240,58717,57397],{"class":257},[240,58719,57477],{"class":443},[240,58721,57403],{"class":257},[240,58723,58724,58726,58728,58730,58732,58734,58736],{"class":242,"line":18834},[240,58725,57385],{"class":257},[240,58727,57486],{"class":443},[240,58729,57391],{"class":257},[240,58731,57491],{"class":443},[240,58733,57397],{"class":257},[240,58735,57496],{"class":443},[240,58737,57403],{"class":257},[240,58739,58740,58742,58744,58746,58748,58750,58752],{"class":242,"line":18847},[240,58741,57385],{"class":257},[240,58743,57505],{"class":443},[240,58745,57391],{"class":257},[240,58747,57510],{"class":443},[240,58749,57397],{"class":257},[240,58751,57515],{"class":443},[240,58753,57403],{"class":257},[240,58755,58756,58758,58760,58762,58764,58766,58768],{"class":242,"line":18852},[240,58757,57385],{"class":257},[240,58759,57524],{"class":443},[240,58761,57391],{"class":257},[240,58763,57529],{"class":443},[240,58765,57397],{"class":257},[240,58767,57534],{"class":443},[240,58769,57537],{"class":257},[240,58771,58772],{"class":242,"line":18857},[240,58773,55045],{"class":257},[240,58775,58776],{"class":242,"line":18862},[240,58777,58778],{"class":246},"    \u002F\u002F 1.获取元素\n",[240,58780,58781,58783,58785,58787,58789,58791,58793,58795],{"class":242,"line":18875},[240,58782,13172],{"class":288},[240,58784,57548],{"class":264},[240,58786,15514],{"class":288},[240,58788,56331],{"class":257},[240,58790,56334],{"class":436},[240,58792,789],{"class":257},[240,58794,57559],{"class":443},[240,58796,2129],{"class":257},[240,58798,58799,58801,58803,58805,58807,58809,58811,58813],{"class":242,"line":18880},[240,58800,13172],{"class":288},[240,58802,8776],{"class":264},[240,58804,15514],{"class":288},[240,58806,56331],{"class":257},[240,58808,56334],{"class":436},[240,58810,789],{"class":257},[240,58812,57578],{"class":443},[240,58814,2129],{"class":257},[240,58816,58817,58819,58821,58823],{"class":242,"line":34579},[240,58818,54155],{"class":288},[240,58820,11389],{"class":257},[240,58822,440],{"class":288},[240,58824,49279],{"class":264},[240,58826,58827],{"class":242,"line":34585},[240,58828,58829],{"class":246},"    \u002F\u002F 2.开启定时器\n",[240,58831,58832],{"class":242,"line":34591},[240,58833,58834],{"class":246},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[240,58836,58837,58840,58842,58844],{"class":242,"line":34597},[240,58838,58839],{"class":436},"    setInterval",[240,58841,789],{"class":257},[240,58843,56384],{"class":288},[240,58845,56387],{"class":257},[240,58847,58848,58850],{"class":242,"line":34603},[240,58849,56392],{"class":257},[240,58851,4655],{"class":288},[240,58853,58854,58856,58858,58860,58863,58865],{"class":242,"line":34614},[240,58855,56415],{"class":288},[240,58857,56418],{"class":257},[240,58859,3664],{"class":288},[240,58861,58862],{"class":257}," sliderData.",[240,58864,1064],{"class":264},[240,58866,14392],{"class":257},[240,58868,58869,58872,58874],{"class":242,"line":34620},[240,58870,58871],{"class":257},"        i ",[240,58873,440],{"class":288},[240,58875,49279],{"class":264},[240,58877,58878],{"class":242,"line":34640},[240,58879,54334],{"class":257},[240,58881,58882],{"class":242,"line":34646},[240,58883,58884],{"class":246},"      \u002F\u002F 更换图片路径\n",[240,58886,58887,58889,58891],{"class":242,"line":34657},[240,58888,57654],{"class":257},[240,58890,440],{"class":288},[240,58892,58893],{"class":257}," sliderData[i].url\n",[240,58895,58896],{"class":242,"line":34663},[240,58897,58898],{"class":246},"      \u002F\u002F 把文字写到p里面\n",[240,58900,58901,58903,58905],{"class":242,"line":34669},[240,58902,57664],{"class":257},[240,58904,440],{"class":288},[240,58906,58907],{"class":257}," sliderData[i].title\n",[240,58909,58910],{"class":242,"line":34675},[240,58911,58912],{"class":246},"      \u002F\u002F 小圆点\n",[240,58914,58915],{"class":242,"line":34681},[240,58916,58917],{"class":246},"      \u002F\u002F 先删除以前的active\n",[240,58919,58920],{"class":242,"line":34687},[240,58921,58922],{"class":246},"      \u002F\u002F 只让当前li添加active\n",[240,58924,58925,58927,58929,58931,58934,58937,58940,58942,58944],{"class":242,"line":34693},[240,58926,57704],{"class":257},[240,58928,56334],{"class":436},[240,58930,789],{"class":257},[240,58932,58933],{"class":443},"'.slider-footer .activate'",[240,58935,58936],{"class":257},").classList.",[240,58938,58939],{"class":436},"remove",[240,58941,789],{"class":257},[240,58943,57722],{"class":443},[240,58945,2129],{"class":257},[240,58947,58948,58950,58952,58954,58957,58959,58961,58963,58966,58968,58970,58972,58974],{"class":242,"line":34699},[240,58949,57704],{"class":257},[240,58951,56334],{"class":436},[240,58953,789],{"class":257},[240,58955,58956],{"class":443},"`.slider-footer ul li:nth-child(${",[240,58958,2541],{"class":257},[240,58960,47512],{"class":288},[240,58962,27065],{"class":264},[240,58964,58965],{"class":443},"})`",[240,58967,58936],{"class":257},[240,58969,7285],{"class":436},[240,58971,789],{"class":257},[240,58973,57722],{"class":443},[240,58975,2129],{"class":257},[240,58977,58978],{"class":242,"line":34719},[240,58979,4353],{"emptyLinePlaceholder":2051},[240,58981,58982,58984,58986],{"class":242,"line":34725},[240,58983,56470],{"class":257},[240,58985,8361],{"class":264},[240,58987,2129],{"class":257},[240,58989,58990],{"class":242,"line":34741},[240,58991,4353],{"emptyLinePlaceholder":2051},[240,58993,58994,58996,58998],{"class":242,"line":34747},[240,58995,54353],{"class":257},[240,58997,53751],{"class":253},[240,58999,447],{"class":257},[240,59001,59002,59004,59006],{"class":242,"line":34761},[240,59003,592],{"class":257},[240,59005,53738],{"class":253},[240,59007,447],{"class":257},[240,59009,59010],{"class":242,"line":34767},[240,59011,4353],{"emptyLinePlaceholder":2051},[240,59013,59014,59016,59018],{"class":242,"line":34782},[240,59015,592],{"class":257},[240,59017,52581],{"class":253},[240,59019,447],{"class":257},[32,59021,59023],{"id":59022},"_317-重要知识点","3.1.7 重要知识点",[19,59025,59026,59027],{},"浏览器在渲染文本时， ",[68,59028,59029],{},"没有空格或换行符就没有“断行点”",[19,59031,59032],{},[219,59033],{"alt":236,"src":59034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[19,59036,59037],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[19,59039,59040],{},[219,59041],{"alt":236,"src":59042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[19,59044,59045],{},[219,59046],{"alt":236,"src":59047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[14,59049,59051],{"id":59050},"_32-dom事件基础","3.2 DOM事件基础",[32,59053,59055],{"id":59054},"_321-事件监听","3.2.1 事件监听",[19,59057,59058],{},[219,59059],{"alt":236,"src":59060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[19,59062,59063],{},"事件监听有响应的发生",[19,59065,59066],{},[219,59067],{"alt":236,"src":59068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[19,59070,59071],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[19,59073,59074],{},"对于有名函数,要执行的函数名后边不要加()",[32,59076,59078],{"id":59077},"_322-随机点名案例","3.2.2 随机点名案例",[231,59080,59082],{"className":52579,"code":59081,"language":52581,"meta":236,"style":236},"\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",[23,59083,59084,59094,59108,59112,59120,59134,59154,59166,59174,59180,59190,59200,59204,59208,59215,59226,59230,59234,59240,59252,59266,59276,59288,59301,59305,59309,59316,59320,59333,59345,59356,59360,59364,59368,59375,59385,59389,59393,59402,59414,59426,59440,59444,59452,59460,59464,59472,59485,59499,59512,59532,59540,59555,59575,59595,59603,59607,59615,59620,59656,59676,59681,59700,59705,59716,59721,59732,59737,59756,59771,59776,59802,59812,59821,59826,59842,59847,59852,59857,59872,59876,59880,59885,59904,59921,59929,59934,59949,59953,59957,59965,59973,59977],{"__ignoreMap":236},[240,59085,59086,59088,59090,59092],{"class":242,"line":243},[240,59087,53243],{"class":257},[240,59089,53246],{"class":253},[240,59091,53249],{"class":436},[240,59093,447],{"class":257},[240,59095,59096,59098,59100,59102,59104,59106],{"class":242,"line":250},[240,59097,431],{"class":257},[240,59099,52581],{"class":253},[240,59101,53260],{"class":436},[240,59103,440],{"class":257},[240,59105,53265],{"class":443},[240,59107,447],{"class":257},[240,59109,59110],{"class":242,"line":261},[240,59111,4353],{"emptyLinePlaceholder":2051},[240,59113,59114,59116,59118],{"class":242,"line":277},[240,59115,431],{"class":257},[240,59117,53278],{"class":253},[240,59119,447],{"class":257},[240,59121,59122,59124,59126,59128,59130,59132],{"class":242,"line":294},[240,59123,452],{"class":257},[240,59125,53288],{"class":253},[240,59127,53291],{"class":436},[240,59129,440],{"class":257},[240,59131,53296],{"class":443},[240,59133,447],{"class":257},[240,59135,59136,59138,59140,59142,59144,59146,59148,59150,59152],{"class":242,"line":309},[240,59137,452],{"class":257},[240,59139,53288],{"class":253},[240,59141,16869],{"class":436},[240,59143,440],{"class":257},[240,59145,53335],{"class":443},[240,59147,53315],{"class":436},[240,59149,440],{"class":257},[240,59151,53342],{"class":443},[240,59153,447],{"class":257},[240,59155,59156,59158,59160,59162,59164],{"class":242,"line":529},[240,59157,452],{"class":257},[240,59159,53351],{"class":253},[240,59161,53354],{"class":257},[240,59163,53351],{"class":253},[240,59165,447],{"class":257},[240,59167,59168,59170,59172],{"class":242,"line":549},[240,59169,452],{"class":257},[240,59171,2019],{"class":253},[240,59173,447],{"class":257},[240,59175,59176,59178],{"class":242,"line":569},[240,59177,8354],{"class":253},[240,59179,258],{"class":257},[240,59181,59182,59184,59186,59188],{"class":242,"line":589},[240,59183,56641],{"class":264},[240,59185,268],{"class":257},[240,59187,1274],{"class":264},[240,59189,274],{"class":257},[240,59191,59192,59194,59196,59198],{"class":242,"line":715},[240,59193,56630],{"class":264},[240,59195,268],{"class":257},[240,59197,1274],{"class":264},[240,59199,274],{"class":257},[240,59201,59202],{"class":242,"line":727},[240,59203,4140],{"class":257},[240,59205,59206],{"class":242,"line":1730},[240,59207,4353],{"emptyLinePlaceholder":2051},[240,59209,59210,59213],{"class":242,"line":3582},[240,59211,59212],{"class":253},"    h2",[240,59214,258],{"class":257},[240,59216,59217,59220,59222,59224],{"class":242,"line":3596},[240,59218,59219],{"class":264},"      text-align",[240,59221,268],{"class":257},[240,59223,971],{"class":264},[240,59225,274],{"class":257},[240,59227,59228],{"class":242,"line":3601},[240,59229,4140],{"class":257},[240,59231,59232],{"class":242,"line":3607},[240,59233,4353],{"emptyLinePlaceholder":2051},[240,59235,59236,59238],{"class":242,"line":3628},[240,59237,56686],{"class":436},[240,59239,258],{"class":257},[240,59241,59242,59244,59246,59248,59250],{"class":242,"line":3633},[240,59243,56705],{"class":264},[240,59245,268],{"class":257},[240,59247,3497],{"class":264},[240,59249,289],{"class":288},[240,59251,274],{"class":257},[240,59253,59254,59256,59258,59260,59262,59264],{"class":242,"line":3647},[240,59255,56641],{"class":264},[240,59257,268],{"class":257},[240,59259,2754],{"class":264},[240,59261,289],{"class":288},[240,59263,53498],{"class":264},[240,59265,274],{"class":257},[240,59267,59268,59270,59272,59274],{"class":242,"line":3652},[240,59269,56943],{"class":264},[240,59271,268],{"class":257},[240,59273,53420],{"class":264},[240,59275,274],{"class":257},[240,59277,59278,59280,59282,59284,59286],{"class":242,"line":3681},[240,59279,56856],{"class":264},[240,59281,268],{"class":257},[240,59283,2921],{"class":264},[240,59285,289],{"class":288},[240,59287,274],{"class":257},[240,59289,59290,59293,59295,59297,59299],{"class":242,"line":3686},[240,59291,59292],{"class":264},"      line-height",[240,59294,268],{"class":257},[240,59296,302],{"class":264},[240,59298,289],{"class":288},[240,59300,274],{"class":257},[240,59302,59303],{"class":242,"line":3703},[240,59304,4140],{"class":257},[240,59306,59307],{"class":242,"line":3708},[240,59308,4353],{"emptyLinePlaceholder":2051},[240,59310,59311,59314],{"class":242,"line":3713},[240,59312,59313],{"class":436},"    .qs",[240,59315,258],{"class":257},[240,59317,59318],{"class":242,"line":3718},[240,59319,4353],{"emptyLinePlaceholder":2051},[240,59321,59322,59324,59326,59329,59331],{"class":242,"line":3732},[240,59323,56705],{"class":264},[240,59325,268],{"class":257},[240,59327,59328],{"class":264},"450",[240,59330,289],{"class":288},[240,59332,274],{"class":257},[240,59334,59335,59337,59339,59341,59343],{"class":242,"line":3737},[240,59336,56719],{"class":264},[240,59338,268],{"class":257},[240,59340,302],{"class":264},[240,59342,289],{"class":288},[240,59344,274],{"class":257},[240,59346,59347,59350,59352,59354],{"class":242,"line":4530},[240,59348,59349],{"class":264},"      color",[240,59351,268],{"class":257},[240,59353,1953],{"class":264},[240,59355,274],{"class":257},[240,59357,59358],{"class":242,"line":4544},[240,59359,4353],{"emptyLinePlaceholder":2051},[240,59361,59362],{"class":242,"line":4552},[240,59363,4140],{"class":257},[240,59365,59366],{"class":242,"line":4557},[240,59367,4353],{"emptyLinePlaceholder":2051},[240,59369,59370,59373],{"class":242,"line":4563},[240,59371,59372],{"class":436},"    .btns",[240,59374,258],{"class":257},[240,59376,59377,59379,59381,59383],{"class":242,"line":4569},[240,59378,59219],{"class":264},[240,59380,268],{"class":257},[240,59382,971],{"class":264},[240,59384,274],{"class":257},[240,59386,59387],{"class":242,"line":4574},[240,59388,4140],{"class":257},[240,59390,59391],{"class":242,"line":9899},[240,59392,4353],{"emptyLinePlaceholder":2051},[240,59394,59395,59397,59400],{"class":242,"line":9923},[240,59396,59372],{"class":436},[240,59398,59399],{"class":253}," button",[240,59401,258],{"class":257},[240,59403,59404,59406,59408,59410,59412],{"class":242,"line":9928},[240,59405,56705],{"class":264},[240,59407,268],{"class":257},[240,59409,1575],{"class":264},[240,59411,289],{"class":288},[240,59413,274],{"class":257},[240,59415,59416,59418,59420,59422,59424],{"class":242,"line":9934},[240,59417,56719],{"class":264},[240,59419,268],{"class":257},[240,59421,2377],{"class":264},[240,59423,289],{"class":288},[240,59425,274],{"class":257},[240,59427,59428,59430,59432,59434,59436,59438],{"class":242,"line":9961},[240,59429,56641],{"class":264},[240,59431,268],{"class":257},[240,59433,1274],{"class":264},[240,59435,1005],{"class":264},[240,59437,289],{"class":288},[240,59439,274],{"class":257},[240,59441,59442],{"class":242,"line":9966},[240,59443,4140],{"class":257},[240,59445,59446,59448,59450],{"class":242,"line":9972},[240,59447,54353],{"class":257},[240,59449,2019],{"class":253},[240,59451,447],{"class":257},[240,59453,59454,59456,59458],{"class":242,"line":9984},[240,59455,592],{"class":257},[240,59457,53278],{"class":253},[240,59459,447],{"class":257},[240,59461,59462],{"class":242,"line":9996},[240,59463,4353],{"emptyLinePlaceholder":2051},[240,59465,59466,59468,59470],{"class":242,"line":10008},[240,59467,431],{"class":257},[240,59469,53738],{"class":253},[240,59471,447],{"class":257},[240,59473,59474,59476,59478,59481,59483],{"class":242,"line":11667},[240,59475,452],{"class":257},[240,59477,14],{"class":253},[240,59479,59480],{"class":257},">随机点名\u003C\u002F",[240,59482,14],{"class":253},[240,59484,447],{"class":257},[240,59486,59487,59489,59491,59493,59495,59497],{"class":242,"line":11692},[240,59488,452],{"class":257},[240,59490,330],{"class":253},[240,59492,437],{"class":436},[240,59494,440],{"class":257},[240,59496,55426],{"class":443},[240,59498,447],{"class":257},[240,59500,59501,59503,59505,59508,59510],{"class":242,"line":11715},[240,59502,53285],{"class":257},[240,59504,240],{"class":253},[240,59506,59507],{"class":257},">名字是：\u003C\u002F",[240,59509,240],{"class":253},[240,59511,447],{"class":257},[240,59513,59514,59516,59518,59520,59522,59525,59528,59530],{"class":242,"line":11739},[240,59515,53285],{"class":257},[240,59517,330],{"class":253},[240,59519,437],{"class":436},[240,59521,440],{"class":257},[240,59523,59524],{"class":443},"\"qs\"",[240,59526,59527],{"class":257},">这里显示姓名\u003C\u002F",[240,59529,330],{"class":253},[240,59531,447],{"class":257},[240,59533,59534,59536,59538],{"class":242,"line":11744},[240,59535,54353],{"class":257},[240,59537,330],{"class":253},[240,59539,447],{"class":257},[240,59541,59542,59544,59546,59548,59550,59553],{"class":242,"line":11749},[240,59543,452],{"class":257},[240,59545,330],{"class":253},[240,59547,437],{"class":436},[240,59549,440],{"class":257},[240,59551,59552],{"class":443},"\"btns\"",[240,59554,447],{"class":257},[240,59556,59557,59559,59561,59563,59565,59568,59571,59573],{"class":242,"line":11754},[240,59558,53285],{"class":257},[240,59560,55822],{"class":253},[240,59562,437],{"class":436},[240,59564,440],{"class":257},[240,59566,59567],{"class":443},"\"start\"",[240,59569,59570],{"class":257},">开始\u003C\u002F",[240,59572,55822],{"class":253},[240,59574,447],{"class":257},[240,59576,59577,59579,59581,59583,59585,59588,59591,59593],{"class":242,"line":11763},[240,59578,53285],{"class":257},[240,59580,55822],{"class":253},[240,59582,437],{"class":436},[240,59584,440],{"class":257},[240,59586,59587],{"class":443},"\"end\"",[240,59589,59590],{"class":257},">结束\u003C\u002F",[240,59592,55822],{"class":253},[240,59594,447],{"class":257},[240,59596,59597,59599,59601],{"class":242,"line":11768},[240,59598,54353],{"class":257},[240,59600,330],{"class":253},[240,59602,447],{"class":257},[240,59604,59605],{"class":242,"line":11774},[240,59606,4353],{"emptyLinePlaceholder":2051},[240,59608,59609,59611,59613],{"class":242,"line":11795},[240,59610,452],{"class":257},[240,59612,53751],{"class":253},[240,59614,447],{"class":257},[240,59616,59617],{"class":242,"line":11801},[240,59618,59619],{"class":246},"    \u002F\u002F 数据数组\n",[240,59621,59622,59624,59627,59629,59631,59634,59636,59639,59641,59644,59646,59649,59651,59654],{"class":242,"line":11815},[240,59623,13172],{"class":288},[240,59625,59626],{"class":264}," arr",[240,59628,15514],{"class":288},[240,59630,54162],{"class":257},[240,59632,59633],{"class":443},"'马超'",[240,59635,1277],{"class":257},[240,59637,59638],{"class":443},"'黄忠'",[240,59640,1277],{"class":257},[240,59642,59643],{"class":443},"'赵云'",[240,59645,1277],{"class":257},[240,59647,59648],{"class":443},"'关羽'",[240,59650,1277],{"class":257},[240,59652,59653],{"class":443},"'张飞'",[240,59655,35192],{"class":257},[240,59657,59658,59660,59663,59665,59667,59669,59671,59674],{"class":242,"line":11821},[240,59659,13172],{"class":288},[240,59661,59662],{"class":264}," qs",[240,59664,15514],{"class":288},[240,59666,56331],{"class":257},[240,59668,56334],{"class":436},[240,59670,789],{"class":257},[240,59672,59673],{"class":443},"'.qs'",[240,59675,2129],{"class":257},[240,59677,59678],{"class":242,"line":11848},[240,59679,59680],{"class":246},"    \u002F\u002F 1.业务1.开始按钮模块\n",[240,59682,59683,59685,59687,59689,59691,59693,59695,59698],{"class":242,"line":11857},[240,59684,13172],{"class":288},[240,59686,6136],{"class":264},[240,59688,15514],{"class":288},[240,59690,56331],{"class":257},[240,59692,56334],{"class":436},[240,59694,789],{"class":257},[240,59696,59697],{"class":443},"'.start'",[240,59699,2129],{"class":257},[240,59701,59702],{"class":242,"line":11863},[240,59703,59704],{"class":246},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[240,59706,59707,59709,59712,59714],{"class":242,"line":11871},[240,59708,54155],{"class":288},[240,59710,59711],{"class":257}," timerId ",[240,59713,440],{"class":288},[240,59715,49279],{"class":264},[240,59717,59718],{"class":242,"line":11876},[240,59719,59720],{"class":246},"    \u002F\u002F 随机号要全局变量\n",[240,59722,59723,59725,59728,59730],{"class":242,"line":18552},[240,59724,54155],{"class":288},[240,59726,59727],{"class":257}," random ",[240,59729,440],{"class":288},[240,59731,49279],{"class":264},[240,59733,59734],{"class":242,"line":18558},[240,59735,59736],{"class":246},"    \u002F\u002F 1.1 添加点击事件\n",[240,59738,59739,59742,59745,59747,59750,59752,59754],{"class":242,"line":18581},[240,59740,59741],{"class":257},"    start.",[240,59743,59744],{"class":436},"addEventListener",[240,59746,789],{"class":257},[240,59748,59749],{"class":443},"'click'",[240,59751,1277],{"class":257},[240,59753,56384],{"class":288},[240,59755,56387],{"class":257},[240,59757,59758,59761,59763,59765,59767,59769],{"class":242,"line":18587},[240,59759,59760],{"class":257},"      timerId ",[240,59762,440],{"class":288},[240,59764,56379],{"class":436},[240,59766,789],{"class":257},[240,59768,56384],{"class":288},[240,59770,56387],{"class":257},[240,59772,59773],{"class":242,"line":18610},[240,59774,59775],{"class":246},"        \u002F\u002F 随机数\n",[240,59777,59778,59781,59783,59786,59789,59792,59794,59796,59798,59800],{"class":242,"line":18624},[240,59779,59780],{"class":257},"        random ",[240,59782,440],{"class":288},[240,59784,59785],{"class":436}," parseInt",[240,59787,59788],{"class":257},"(Math.",[240,59790,59791],{"class":436},"random",[240,59793,15000],{"class":257},[240,59795,2554],{"class":288},[240,59797,53903],{"class":257},[240,59799,1064],{"class":264},[240,59801,2129],{"class":257},[240,59803,59804,59807,59809],{"class":242,"line":18644},[240,59805,59806],{"class":257},"        qs.innerHTML ",[240,59808,440],{"class":288},[240,59810,59811],{"class":257}," arr[random]\n",[240,59813,59814,59817,59819],{"class":242,"line":18650},[240,59815,59816],{"class":257},"      }, ",[240,59818,2377],{"class":264},[240,59820,2129],{"class":257},[240,59822,59823],{"class":242,"line":18661},[240,59824,59825],{"class":246},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[240,59827,59828,59830,59833,59835,59838,59840],{"class":242,"line":18684},[240,59829,56415],{"class":288},[240,59831,59832],{"class":257}," (arr.",[240,59834,1064],{"class":264},[240,59836,59837],{"class":288}," ===",[240,59839,27065],{"class":264},[240,59841,14392],{"class":257},[240,59843,59844],{"class":242,"line":18706},[240,59845,59846],{"class":246},"        \u002F\u002F start.disabled = true\n",[240,59848,59849],{"class":242,"line":18711},[240,59850,59851],{"class":246},"        \u002F\u002F end.disabled = true\n",[240,59853,59854],{"class":242,"line":18717},[240,59855,59856],{"class":246},"        \u002F\u002F 可以合起来写\n",[240,59858,59859,59862,59864,59867,59869],{"class":242,"line":18731},[240,59860,59861],{"class":257},"        start.disabled ",[240,59863,440],{"class":288},[240,59865,59866],{"class":257}," end.disabled ",[240,59868,440],{"class":288},[240,59870,59871],{"class":264}," true\n",[240,59873,59874],{"class":242,"line":18744},[240,59875,54334],{"class":257},[240,59877,59878],{"class":242,"line":18749},[240,59879,35407],{"class":257},[240,59881,59882],{"class":242,"line":18763},[240,59883,59884],{"class":246},"    \u002F\u002F 1.2 关闭按钮模块\n",[240,59886,59887,59889,59891,59893,59895,59897,59899,59902],{"class":242,"line":18768},[240,59888,13172],{"class":288},[240,59890,6152],{"class":264},[240,59892,15514],{"class":288},[240,59894,56331],{"class":257},[240,59896,56334],{"class":436},[240,59898,789],{"class":257},[240,59900,59901],{"class":443},"'.end'",[240,59903,2129],{"class":257},[240,59905,59906,59909,59911,59913,59915,59917,59919],{"class":242,"line":18774},[240,59907,59908],{"class":257},"    end.",[240,59910,59744],{"class":436},[240,59912,789],{"class":257},[240,59914,59749],{"class":443},[240,59916,1277],{"class":257},[240,59918,56384],{"class":288},[240,59920,56387],{"class":257},[240,59922,59923,59926],{"class":242,"line":18779},[240,59924,59925],{"class":436},"      clearInterval",[240,59927,59928],{"class":257},"(timerId)\n",[240,59930,59931],{"class":242,"line":18793},[240,59932,59933],{"class":246},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[240,59935,59936,59939,59942,59945,59947],{"class":242,"line":18798},[240,59937,59938],{"class":257},"      arr.",[240,59940,59941],{"class":436},"splice",[240,59943,59944],{"class":257},"(random, ",[240,59946,1643],{"class":264},[240,59948,2129],{"class":257},[240,59950,59951],{"class":242,"line":18803},[240,59952,35407],{"class":257},[240,59954,59955],{"class":242,"line":18817},[240,59956,4353],{"emptyLinePlaceholder":2051},[240,59958,59959,59961,59963],{"class":242,"line":18829},[240,59960,54353],{"class":257},[240,59962,53751],{"class":253},[240,59964,447],{"class":257},[240,59966,59967,59969,59971],{"class":242,"line":18834},[240,59968,592],{"class":257},[240,59970,53738],{"class":253},[240,59972,447],{"class":257},[240,59974,59975],{"class":242,"line":18847},[240,59976,4353],{"emptyLinePlaceholder":2051},[240,59978,59979,59981,59983],{"class":242,"line":18852},[240,59980,592],{"class":257},[240,59982,52581],{"class":253},[240,59984,447],{"class":257},[19,59986,59987],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[32,59989,59991],{"id":59990},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[231,59993,59995],{"className":52579,"code":59994,"language":52581,"meta":236,"style":236},"\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",[23,59996,59997,60007,60021,60025,60033,60047,60067,60079,60087,60091,60099,60111,60119,60138,60155,60171,60181,60185,60193,60201,60205],{"__ignoreMap":236},[240,59998,59999,60001,60003,60005],{"class":242,"line":243},[240,60000,53243],{"class":257},[240,60002,53246],{"class":253},[240,60004,53249],{"class":436},[240,60006,447],{"class":257},[240,60008,60009,60011,60013,60015,60017,60019],{"class":242,"line":250},[240,60010,431],{"class":257},[240,60012,52581],{"class":253},[240,60014,53260],{"class":436},[240,60016,440],{"class":257},[240,60018,53265],{"class":443},[240,60020,447],{"class":257},[240,60022,60023],{"class":242,"line":261},[240,60024,4353],{"emptyLinePlaceholder":2051},[240,60026,60027,60029,60031],{"class":242,"line":277},[240,60028,431],{"class":257},[240,60030,53278],{"class":253},[240,60032,447],{"class":257},[240,60034,60035,60037,60039,60041,60043,60045],{"class":242,"line":294},[240,60036,452],{"class":257},[240,60038,53288],{"class":253},[240,60040,53291],{"class":436},[240,60042,440],{"class":257},[240,60044,53296],{"class":443},[240,60046,447],{"class":257},[240,60048,60049,60051,60053,60055,60057,60059,60061,60063,60065],{"class":242,"line":309},[240,60050,452],{"class":257},[240,60052,53288],{"class":253},[240,60054,16869],{"class":436},[240,60056,440],{"class":257},[240,60058,53335],{"class":443},[240,60060,53315],{"class":436},[240,60062,440],{"class":257},[240,60064,53342],{"class":443},[240,60066,447],{"class":257},[240,60068,60069,60071,60073,60075,60077],{"class":242,"line":529},[240,60070,452],{"class":257},[240,60072,53351],{"class":253},[240,60074,53354],{"class":257},[240,60076,53351],{"class":253},[240,60078,447],{"class":257},[240,60080,60081,60083,60085],{"class":242,"line":549},[240,60082,592],{"class":257},[240,60084,53278],{"class":253},[240,60086,447],{"class":257},[240,60088,60089],{"class":242,"line":569},[240,60090,4353],{"emptyLinePlaceholder":2051},[240,60092,60093,60095,60097],{"class":242,"line":589},[240,60094,431],{"class":257},[240,60096,53738],{"class":253},[240,60098,447],{"class":257},[240,60100,60101,60103,60105,60107,60109],{"class":242,"line":715},[240,60102,452],{"class":257},[240,60104,55822],{"class":253},[240,60106,55828],{"class":257},[240,60108,55822],{"class":253},[240,60110,447],{"class":257},[240,60112,60113,60115,60117],{"class":242,"line":727},[240,60114,452],{"class":257},[240,60116,53751],{"class":253},[240,60118,447],{"class":257},[240,60120,60121,60123,60125,60127,60129,60131,60133,60136],{"class":242,"line":1730},[240,60122,13172],{"class":288},[240,60124,56326],{"class":264},[240,60126,15514],{"class":288},[240,60128,56331],{"class":257},[240,60130,56334],{"class":436},[240,60132,789],{"class":257},[240,60134,60135],{"class":443},"'button'",[240,60137,2129],{"class":257},[240,60139,60140,60143,60145,60147,60149,60151,60153],{"class":242,"line":3582},[240,60141,60142],{"class":257},"    btn.",[240,60144,59744],{"class":436},[240,60146,789],{"class":257},[240,60148,59749],{"class":443},[240,60150,1277],{"class":257},[240,60152,56384],{"class":288},[240,60154,56387],{"class":257},[240,60156,60157,60160,60162,60164,60167,60169],{"class":242,"line":3596},[240,60158,60159],{"class":288},"      const",[240,60161,4193],{"class":264},[240,60163,15514],{"class":288},[240,60165,60166],{"class":257}," Math.",[240,60168,59791],{"class":436},[240,60170,3929],{"class":257},[240,60172,60173,60176,60179],{"class":242,"line":3601},[240,60174,60175],{"class":257},"      console.",[240,60177,60178],{"class":436},"log",[240,60180,2136],{"class":257},[240,60182,60183],{"class":242,"line":3607},[240,60184,35407],{"class":257},[240,60186,60187,60189,60191],{"class":242,"line":3628},[240,60188,54353],{"class":257},[240,60190,53751],{"class":253},[240,60192,447],{"class":257},[240,60194,60195,60197,60199],{"class":242,"line":3633},[240,60196,592],{"class":257},[240,60198,53738],{"class":253},[240,60200,447],{"class":257},[240,60202,60203],{"class":242,"line":3647},[240,60204,4353],{"emptyLinePlaceholder":2051},[240,60206,60207,60209,60211],{"class":242,"line":3652},[240,60208,592],{"class":257},[240,60210,52581],{"class":253},[240,60212,447],{"class":257},[19,60214,60215],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[19,60217,60218],{},"常量不可以重新赋值",[19,60220,60221],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[231,60223,60225],{"className":52579,"code":60224,"language":52581,"meta":236,"style":236},"\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",[23,60226,60227,60237,60251,60255,60263,60277,60297,60309,60317,60321,60329,60341,60349,60360,60378,60394,60408,60416,60420,60428,60436,60440],{"__ignoreMap":236},[240,60228,60229,60231,60233,60235],{"class":242,"line":243},[240,60230,53243],{"class":257},[240,60232,53246],{"class":253},[240,60234,53249],{"class":436},[240,60236,447],{"class":257},[240,60238,60239,60241,60243,60245,60247,60249],{"class":242,"line":250},[240,60240,431],{"class":257},[240,60242,52581],{"class":253},[240,60244,53260],{"class":436},[240,60246,440],{"class":257},[240,60248,53265],{"class":443},[240,60250,447],{"class":257},[240,60252,60253],{"class":242,"line":261},[240,60254,4353],{"emptyLinePlaceholder":2051},[240,60256,60257,60259,60261],{"class":242,"line":277},[240,60258,431],{"class":257},[240,60260,53278],{"class":253},[240,60262,447],{"class":257},[240,60264,60265,60267,60269,60271,60273,60275],{"class":242,"line":294},[240,60266,452],{"class":257},[240,60268,53288],{"class":253},[240,60270,53291],{"class":436},[240,60272,440],{"class":257},[240,60274,53296],{"class":443},[240,60276,447],{"class":257},[240,60278,60279,60281,60283,60285,60287,60289,60291,60293,60295],{"class":242,"line":309},[240,60280,452],{"class":257},[240,60282,53288],{"class":253},[240,60284,16869],{"class":436},[240,60286,440],{"class":257},[240,60288,53335],{"class":443},[240,60290,53315],{"class":436},[240,60292,440],{"class":257},[240,60294,53342],{"class":443},[240,60296,447],{"class":257},[240,60298,60299,60301,60303,60305,60307],{"class":242,"line":529},[240,60300,452],{"class":257},[240,60302,53351],{"class":253},[240,60304,53354],{"class":257},[240,60306,53351],{"class":253},[240,60308,447],{"class":257},[240,60310,60311,60313,60315],{"class":242,"line":549},[240,60312,592],{"class":257},[240,60314,53278],{"class":253},[240,60316,447],{"class":257},[240,60318,60319],{"class":242,"line":569},[240,60320,4353],{"emptyLinePlaceholder":2051},[240,60322,60323,60325,60327],{"class":242,"line":589},[240,60324,431],{"class":257},[240,60326,53738],{"class":253},[240,60328,447],{"class":257},[240,60330,60331,60333,60335,60337,60339],{"class":242,"line":715},[240,60332,452],{"class":257},[240,60334,55822],{"class":253},[240,60336,55828],{"class":257},[240,60338,55822],{"class":253},[240,60340,447],{"class":257},[240,60342,60343,60345,60347],{"class":242,"line":727},[240,60344,452],{"class":257},[240,60346,53751],{"class":253},[240,60348,447],{"class":257},[240,60350,60351,60353,60355,60357],{"class":242,"line":1730},[240,60352,13172],{"class":288},[240,60354,4193],{"class":264},[240,60356,15514],{"class":288},[240,60358,60359],{"class":264}," 10\n",[240,60361,60362,60364,60366,60368,60370,60372,60374,60376],{"class":242,"line":3582},[240,60363,13172],{"class":288},[240,60365,56326],{"class":264},[240,60367,15514],{"class":288},[240,60369,56331],{"class":257},[240,60371,56334],{"class":436},[240,60373,789],{"class":257},[240,60375,60135],{"class":443},[240,60377,2129],{"class":257},[240,60379,60380,60382,60384,60386,60388,60390,60392],{"class":242,"line":3596},[240,60381,60142],{"class":257},[240,60383,59744],{"class":436},[240,60385,789],{"class":257},[240,60387,59749],{"class":443},[240,60389,1277],{"class":257},[240,60391,56384],{"class":288},[240,60393,56387],{"class":257},[240,60395,60396,60398,60400,60402,60404,60406],{"class":242,"line":3601},[240,60397,60159],{"class":288},[240,60399,4193],{"class":264},[240,60401,15514],{"class":288},[240,60403,60166],{"class":257},[240,60405,59791],{"class":436},[240,60407,3929],{"class":257},[240,60409,60410,60412,60414],{"class":242,"line":3607},[240,60411,60175],{"class":257},[240,60413,60178],{"class":436},[240,60415,2136],{"class":257},[240,60417,60418],{"class":242,"line":3628},[240,60419,35407],{"class":257},[240,60421,60422,60424,60426],{"class":242,"line":3633},[240,60423,54353],{"class":257},[240,60425,53751],{"class":253},[240,60427,447],{"class":257},[240,60429,60430,60432,60434],{"class":242,"line":3647},[240,60431,592],{"class":257},[240,60433,53738],{"class":253},[240,60435,447],{"class":257},[240,60437,60438],{"class":242,"line":3652},[240,60439,4353],{"emptyLinePlaceholder":2051},[240,60441,60442,60444,60446],{"class":242,"line":3681},[240,60443,592],{"class":257},[240,60445,52581],{"class":253},[240,60447,447],{"class":257},[19,60449,60450],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[231,60452,60454],{"className":52579,"code":60453,"language":52581,"meta":236,"style":236},"\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",[23,60455,60456,60466,60480,60484,60492,60506,60526,60538,60546,60550,60558,60570,60578,60588,60606,60622,60635,60643,60647,60655,60663,60667],{"__ignoreMap":236},[240,60457,60458,60460,60462,60464],{"class":242,"line":243},[240,60459,53243],{"class":257},[240,60461,53246],{"class":253},[240,60463,53249],{"class":436},[240,60465,447],{"class":257},[240,60467,60468,60470,60472,60474,60476,60478],{"class":242,"line":250},[240,60469,431],{"class":257},[240,60471,52581],{"class":253},[240,60473,53260],{"class":436},[240,60475,440],{"class":257},[240,60477,53265],{"class":443},[240,60479,447],{"class":257},[240,60481,60482],{"class":242,"line":261},[240,60483,4353],{"emptyLinePlaceholder":2051},[240,60485,60486,60488,60490],{"class":242,"line":277},[240,60487,431],{"class":257},[240,60489,53278],{"class":253},[240,60491,447],{"class":257},[240,60493,60494,60496,60498,60500,60502,60504],{"class":242,"line":294},[240,60495,452],{"class":257},[240,60497,53288],{"class":253},[240,60499,53291],{"class":436},[240,60501,440],{"class":257},[240,60503,53296],{"class":443},[240,60505,447],{"class":257},[240,60507,60508,60510,60512,60514,60516,60518,60520,60522,60524],{"class":242,"line":309},[240,60509,452],{"class":257},[240,60511,53288],{"class":253},[240,60513,16869],{"class":436},[240,60515,440],{"class":257},[240,60517,53335],{"class":443},[240,60519,53315],{"class":436},[240,60521,440],{"class":257},[240,60523,53342],{"class":443},[240,60525,447],{"class":257},[240,60527,60528,60530,60532,60534,60536],{"class":242,"line":529},[240,60529,452],{"class":257},[240,60531,53351],{"class":253},[240,60533,53354],{"class":257},[240,60535,53351],{"class":253},[240,60537,447],{"class":257},[240,60539,60540,60542,60544],{"class":242,"line":549},[240,60541,592],{"class":257},[240,60543,53278],{"class":253},[240,60545,447],{"class":257},[240,60547,60548],{"class":242,"line":569},[240,60549,4353],{"emptyLinePlaceholder":2051},[240,60551,60552,60554,60556],{"class":242,"line":589},[240,60553,431],{"class":257},[240,60555,53738],{"class":253},[240,60557,447],{"class":257},[240,60559,60560,60562,60564,60566,60568],{"class":242,"line":715},[240,60561,452],{"class":257},[240,60563,55822],{"class":253},[240,60565,55828],{"class":257},[240,60567,55822],{"class":253},[240,60569,447],{"class":257},[240,60571,60572,60574,60576],{"class":242,"line":727},[240,60573,452],{"class":257},[240,60575,53751],{"class":253},[240,60577,447],{"class":257},[240,60579,60580,60582,60584,60586],{"class":242,"line":1730},[240,60581,13172],{"class":288},[240,60583,4193],{"class":264},[240,60585,15514],{"class":288},[240,60587,60359],{"class":264},[240,60589,60590,60592,60594,60596,60598,60600,60602,60604],{"class":242,"line":3582},[240,60591,13172],{"class":288},[240,60593,56326],{"class":264},[240,60595,15514],{"class":288},[240,60597,56331],{"class":257},[240,60599,56334],{"class":436},[240,60601,789],{"class":257},[240,60603,60135],{"class":443},[240,60605,2129],{"class":257},[240,60607,60608,60610,60612,60614,60616,60618,60620],{"class":242,"line":3596},[240,60609,60142],{"class":257},[240,60611,59744],{"class":436},[240,60613,789],{"class":257},[240,60615,59749],{"class":443},[240,60617,1277],{"class":257},[240,60619,56384],{"class":288},[240,60621,56387],{"class":257},[240,60623,60624,60627,60629,60631,60633],{"class":242,"line":3601},[240,60625,60626],{"class":257},"      num ",[240,60628,440],{"class":288},[240,60630,60166],{"class":257},[240,60632,59791],{"class":436},[240,60634,3929],{"class":257},[240,60636,60637,60639,60641],{"class":242,"line":3607},[240,60638,60175],{"class":257},[240,60640,60178],{"class":436},[240,60642,2136],{"class":257},[240,60644,60645],{"class":242,"line":3628},[240,60646,35407],{"class":257},[240,60648,60649,60651,60653],{"class":242,"line":3633},[240,60650,54353],{"class":257},[240,60652,53751],{"class":253},[240,60654,447],{"class":257},[240,60656,60657,60659,60661],{"class":242,"line":3647},[240,60658,592],{"class":257},[240,60660,53738],{"class":253},[240,60662,447],{"class":257},[240,60664,60665],{"class":242,"line":3652},[240,60666,4353],{"emptyLinePlaceholder":2051},[240,60668,60669,60671,60673],{"class":242,"line":3681},[240,60670,592],{"class":257},[240,60672,52581],{"class":253},[240,60674,447],{"class":257},[19,60676,60677],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[32,60679,60681],{"id":60680},"_324-事件监听版本","3.2.4 事件监听版本",[19,60683,60684],{},[219,60685],{"alt":236,"src":60686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[19,60688,60689],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[19,60691,60692],{},"这种方式会覆盖前边的事件监听:",[231,60694,60696],{"className":52579,"code":60695,"language":52581,"meta":236,"style":236},"\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",[23,60697,60698,60708,60722,60726,60734,60748,60768,60780,60788,60792,60800,60812,60820,60838,60852,60863,60867,60879,60889,60893,60901,60909,60913],{"__ignoreMap":236},[240,60699,60700,60702,60704,60706],{"class":242,"line":243},[240,60701,53243],{"class":257},[240,60703,53246],{"class":253},[240,60705,53249],{"class":436},[240,60707,447],{"class":257},[240,60709,60710,60712,60714,60716,60718,60720],{"class":242,"line":250},[240,60711,431],{"class":257},[240,60713,52581],{"class":253},[240,60715,53260],{"class":436},[240,60717,440],{"class":257},[240,60719,53265],{"class":443},[240,60721,447],{"class":257},[240,60723,60724],{"class":242,"line":261},[240,60725,4353],{"emptyLinePlaceholder":2051},[240,60727,60728,60730,60732],{"class":242,"line":277},[240,60729,431],{"class":257},[240,60731,53278],{"class":253},[240,60733,447],{"class":257},[240,60735,60736,60738,60740,60742,60744,60746],{"class":242,"line":294},[240,60737,452],{"class":257},[240,60739,53288],{"class":253},[240,60741,53291],{"class":436},[240,60743,440],{"class":257},[240,60745,53296],{"class":443},[240,60747,447],{"class":257},[240,60749,60750,60752,60754,60756,60758,60760,60762,60764,60766],{"class":242,"line":309},[240,60751,452],{"class":257},[240,60753,53288],{"class":253},[240,60755,16869],{"class":436},[240,60757,440],{"class":257},[240,60759,53335],{"class":443},[240,60761,53315],{"class":436},[240,60763,440],{"class":257},[240,60765,53342],{"class":443},[240,60767,447],{"class":257},[240,60769,60770,60772,60774,60776,60778],{"class":242,"line":529},[240,60771,452],{"class":257},[240,60773,53351],{"class":253},[240,60775,53354],{"class":257},[240,60777,53351],{"class":253},[240,60779,447],{"class":257},[240,60781,60782,60784,60786],{"class":242,"line":549},[240,60783,592],{"class":257},[240,60785,53278],{"class":253},[240,60787,447],{"class":257},[240,60789,60790],{"class":242,"line":569},[240,60791,4353],{"emptyLinePlaceholder":2051},[240,60793,60794,60796,60798],{"class":242,"line":589},[240,60795,431],{"class":257},[240,60797,53738],{"class":253},[240,60799,447],{"class":257},[240,60801,60802,60804,60806,60808,60810],{"class":242,"line":715},[240,60803,452],{"class":257},[240,60805,55822],{"class":253},[240,60807,55828],{"class":257},[240,60809,55822],{"class":253},[240,60811,447],{"class":257},[240,60813,60814,60816,60818],{"class":242,"line":727},[240,60815,452],{"class":257},[240,60817,53751],{"class":253},[240,60819,447],{"class":257},[240,60821,60822,60824,60826,60828,60830,60832,60834,60836],{"class":242,"line":1730},[240,60823,13172],{"class":288},[240,60825,56326],{"class":264},[240,60827,15514],{"class":288},[240,60829,56331],{"class":257},[240,60831,56334],{"class":436},[240,60833,789],{"class":257},[240,60835,60135],{"class":443},[240,60837,2129],{"class":257},[240,60839,60840,60842,60845,60847,60850],{"class":242,"line":3582},[240,60841,60142],{"class":257},[240,60843,60844],{"class":436},"onclick",[240,60846,15514],{"class":288},[240,60848,60849],{"class":288}," function",[240,60851,56387],{"class":257},[240,60853,60854,60857,60859,60861],{"class":242,"line":3596},[240,60855,60856],{"class":436},"      alert",[240,60858,789],{"class":257},[240,60860,2571],{"class":264},[240,60862,2129],{"class":257},[240,60864,60865],{"class":242,"line":3601},[240,60866,4140],{"class":257},[240,60868,60869,60871,60873,60875,60877],{"class":242,"line":3607},[240,60870,60142],{"class":257},[240,60872,60844],{"class":436},[240,60874,15514],{"class":288},[240,60876,60849],{"class":288},[240,60878,56387],{"class":257},[240,60880,60881,60883,60885,60887],{"class":242,"line":3628},[240,60882,60856],{"class":436},[240,60884,789],{"class":257},[240,60886,2847],{"class":264},[240,60888,2129],{"class":257},[240,60890,60891],{"class":242,"line":3633},[240,60892,4140],{"class":257},[240,60894,60895,60897,60899],{"class":242,"line":3647},[240,60896,54353],{"class":257},[240,60898,53751],{"class":253},[240,60900,447],{"class":257},[240,60902,60903,60905,60907],{"class":242,"line":3652},[240,60904,592],{"class":257},[240,60906,53738],{"class":253},[240,60908,447],{"class":257},[240,60910,60911],{"class":242,"line":3681},[240,60912,4353],{"emptyLinePlaceholder":2051},[240,60914,60915,60917,60919],{"class":242,"line":3686},[240,60916,592],{"class":257},[240,60918,52581],{"class":253},[240,60920,447],{"class":257},[19,60922,60923],{},"只要点击就输出结果为22,前边11被覆盖了",[231,60925,60927],{"className":52579,"code":60926,"language":52581,"meta":236,"style":236},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[23,60928,60929,60934,60939,60943,60948,60953],{"__ignoreMap":236},[240,60930,60931],{"class":242,"line":243},[240,60932,60933],{"class":257},"  btn.addEventListener('click', function () {\n",[240,60935,60936],{"class":242,"line":250},[240,60937,60938],{"class":257},"      alert(11)\n",[240,60940,60941],{"class":242,"line":261},[240,60942,35407],{"class":257},[240,60944,60945],{"class":242,"line":277},[240,60946,60947],{"class":257},"    btn.addEventListener('click', function () {\n",[240,60949,60950],{"class":242,"line":294},[240,60951,60952],{"class":257},"      alert(22)\n",[240,60954,60955],{"class":242,"line":309},[240,60956,35407],{"class":257},[19,60958,60959],{},"点击第一次输出11,第二次点击为22",[32,60961,60963],{"id":60962},"_325-事件类型","3.2.5 事件类型",[19,60965,60966],{},[219,60967],{"alt":236,"src":60968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[23945,60970,60972],{"id":60971},"_3251-鼠标事件","3.2.5.1 鼠标事件",[19,60974,60975],{},"补充知识:",[19,60977,60978],{},"轮播图自动播放模块,可以使用",[19,60980,60981],{},"let timerId = setInterval(function () {",[19,60983,60984],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[19,60986,60987],{},"用js方法模拟进行点击事件,click必须加()",[19,60989,60990],{},"next.click()",[19,60992,60993],{},"}, 1000)",[19,60995,60996],{},[219,60997],{"alt":236,"src":60998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[231,61000,61002],{"className":55003,"code":61001,"language":55005,"meta":236,"style":236},"\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",[23,61003,61004,61008,61018,61032,61036,61044,61059,61079,61099,61112,61120,61125,61130,61134,61138,61143,61148,61153,61158,61162,61166,61171,61176,61181,61185,61189,61194,61198,61203,61208,61212,61216,61221,61226,61231,61236,61241,61245,61249,61254,61259,61264,61269,61274,61278,61282,61287,61292,61297,61302,61307,61312,61317,61322,61327,61332,61336,61340,61345,61350,61354,61358,61363,61368,61372,61377,61382,61386,61390,61395,61399,61404,61409,61413,61418,61422,61426,61431,61436,61441,61446,61451,61456,61461,61465,61469,61473,61478,61483,61488,61493,61497,61505,61513,61517,61525,61540,61554,61575,61583,61597,61610,61625,61644,61656,61668,61680,61692,61704,61716,61728,61736,61751,61775,61799,61807,61815,61823,61831,61836,61841,61846,61851,61856,61861,61866,61871,61876,61881,61885,61890,61895,61900,61905,61910,61915,61920,61925,61930,61934,61939,61944,61949,61954,61959,61964,61969,61974,61979,61984,61989,61994,61998,62002,62007,62012,62017,62021,62026,62031,62036,62041,62046,62050,62055,62059,62063,62067,62071,62075,62079,62084,62089,62094,62099,62104,62109,62114,62119,62124,62128,62132,62137,62142,62147,62152,62157,62161,62166,62171,62176,62181,62186,62191,62195,62199,62204,62208,62213,62217,62222,62227,62232,62237,62242,62247,62251,62259,62267,62271],{"__ignoreMap":236},[240,61005,61006],{"class":242,"line":243},[240,61007,4353],{"emptyLinePlaceholder":2051},[240,61009,61010,61012,61014,61016],{"class":242,"line":250},[240,61011,53243],{"class":257},[240,61013,53246],{"class":288},[240,61015,53249],{"class":264},[240,61017,447],{"class":257},[240,61019,61020,61022,61024,61026,61028,61030],{"class":242,"line":261},[240,61021,431],{"class":257},[240,61023,52581],{"class":253},[240,61025,53260],{"class":436},[240,61027,440],{"class":257},[240,61029,53265],{"class":443},[240,61031,447],{"class":257},[240,61033,61034],{"class":242,"line":277},[240,61035,4353],{"emptyLinePlaceholder":2051},[240,61037,61038,61040,61042],{"class":242,"line":294},[240,61039,431],{"class":257},[240,61041,53278],{"class":253},[240,61043,447],{"class":257},[240,61045,61046,61048,61050,61052,61054,61056],{"class":242,"line":309},[240,61047,452],{"class":257},[240,61049,53288],{"class":253},[240,61051,53291],{"class":436},[240,61053,440],{"class":257},[240,61055,53296],{"class":443},[240,61057,61058],{"class":257}," \u002F>\n",[240,61060,61061,61063,61065,61067,61069,61071,61073,61075,61077],{"class":242,"line":529},[240,61062,452],{"class":257},[240,61064,53288],{"class":253},[240,61066,53307],{"class":436},[240,61068,440],{"class":257},[240,61070,53312],{"class":443},[240,61072,53315],{"class":436},[240,61074,440],{"class":257},[240,61076,53320],{"class":443},[240,61078,61058],{"class":257},[240,61080,61081,61083,61085,61087,61089,61091,61093,61095,61097],{"class":242,"line":549},[240,61082,452],{"class":257},[240,61084,53288],{"class":253},[240,61086,16869],{"class":436},[240,61088,440],{"class":257},[240,61090,53335],{"class":443},[240,61092,53315],{"class":436},[240,61094,440],{"class":257},[240,61096,53342],{"class":443},[240,61098,61058],{"class":257},[240,61100,61101,61103,61105,61108,61110],{"class":242,"line":569},[240,61102,452],{"class":257},[240,61104,53351],{"class":253},[240,61106,61107],{"class":257},">轮播图点击切换\u003C\u002F",[240,61109,53351],{"class":253},[240,61111,447],{"class":257},[240,61113,61114,61116,61118],{"class":242,"line":589},[240,61115,452],{"class":257},[240,61117,2019],{"class":253},[240,61119,447],{"class":257},[240,61121,61122],{"class":242,"line":715},[240,61123,61124],{"class":257},"    * {\n",[240,61126,61127],{"class":242,"line":727},[240,61128,61129],{"class":257},"      box-sizing: border-box;\n",[240,61131,61132],{"class":242,"line":1730},[240,61133,4140],{"class":257},[240,61135,61136],{"class":242,"line":3582},[240,61137,4353],{"emptyLinePlaceholder":2051},[240,61139,61140],{"class":242,"line":3596},[240,61141,61142],{"class":257},"    .slider {\n",[240,61144,61145],{"class":242,"line":3601},[240,61146,61147],{"class":257},"      width: 560px;\n",[240,61149,61150],{"class":242,"line":3607},[240,61151,61152],{"class":257},"      height: 400px;\n",[240,61154,61155],{"class":242,"line":3628},[240,61156,61157],{"class":257},"      overflow: hidden;\n",[240,61159,61160],{"class":242,"line":3633},[240,61161,4140],{"class":257},[240,61163,61164],{"class":242,"line":3647},[240,61165,4353],{"emptyLinePlaceholder":2051},[240,61167,61168],{"class":242,"line":3652},[240,61169,61170],{"class":257},"    .slider-wrapper {\n",[240,61172,61173],{"class":242,"line":3681},[240,61174,61175],{"class":257},"      width: 100%;\n",[240,61177,61178],{"class":242,"line":3686},[240,61179,61180],{"class":257},"      height: 320px;\n",[240,61182,61183],{"class":242,"line":3703},[240,61184,4140],{"class":257},[240,61186,61187],{"class":242,"line":3708},[240,61188,4353],{"emptyLinePlaceholder":2051},[240,61190,61191],{"class":242,"line":3713},[240,61192,61193],{"class":257},"    .slider-wrapper img {\n",[240,61195,61196],{"class":242,"line":3718},[240,61197,61175],{"class":257},[240,61199,61200],{"class":242,"line":3732},[240,61201,61202],{"class":257},"      height: 100%;\n",[240,61204,61205],{"class":242,"line":3737},[240,61206,61207],{"class":257},"      display: block;\n",[240,61209,61210],{"class":242,"line":4530},[240,61211,4140],{"class":257},[240,61213,61214],{"class":242,"line":4544},[240,61215,4353],{"emptyLinePlaceholder":2051},[240,61217,61218],{"class":242,"line":4552},[240,61219,61220],{"class":257},"    .slider-footer {\n",[240,61222,61223],{"class":242,"line":4557},[240,61224,61225],{"class":257},"      height: 80px;\n",[240,61227,61228],{"class":242,"line":4563},[240,61229,61230],{"class":257},"      background-color: rgb(100, 67, 68);\n",[240,61232,61233],{"class":242,"line":4569},[240,61234,61235],{"class":257},"      padding: 12px 12px 0 12px;\n",[240,61237,61238],{"class":242,"line":4574},[240,61239,61240],{"class":257},"      position: relative;\n",[240,61242,61243],{"class":242,"line":9899},[240,61244,4140],{"class":257},[240,61246,61247],{"class":242,"line":9923},[240,61248,4353],{"emptyLinePlaceholder":2051},[240,61250,61251],{"class":242,"line":9928},[240,61252,61253],{"class":257},"    .slider-footer .toggle {\n",[240,61255,61256],{"class":242,"line":9934},[240,61257,61258],{"class":257},"      position: absolute;\n",[240,61260,61261],{"class":242,"line":9961},[240,61262,61263],{"class":257},"      right: 0;\n",[240,61265,61266],{"class":242,"line":9966},[240,61267,61268],{"class":257},"      top: 12px;\n",[240,61270,61271],{"class":242,"line":9972},[240,61272,61273],{"class":257},"      display: flex;\n",[240,61275,61276],{"class":242,"line":9984},[240,61277,4140],{"class":257},[240,61279,61280],{"class":242,"line":9996},[240,61281,4353],{"emptyLinePlaceholder":2051},[240,61283,61284],{"class":242,"line":10008},[240,61285,61286],{"class":257},"    .slider-footer .toggle button {\n",[240,61288,61289],{"class":242,"line":11667},[240,61290,61291],{"class":257},"      margin-right: 12px;\n",[240,61293,61294],{"class":242,"line":11692},[240,61295,61296],{"class":257},"      width: 28px;\n",[240,61298,61299],{"class":242,"line":11715},[240,61300,61301],{"class":257},"      height: 28px;\n",[240,61303,61304],{"class":242,"line":11739},[240,61305,61306],{"class":257},"      appearance: none;\n",[240,61308,61309],{"class":242,"line":11744},[240,61310,61311],{"class":257},"      border: none;\n",[240,61313,61314],{"class":242,"line":11749},[240,61315,61316],{"class":257},"      background: rgba(255, 255, 255, 0.1);\n",[240,61318,61319],{"class":242,"line":11754},[240,61320,61321],{"class":257},"      color: #fff;\n",[240,61323,61324],{"class":242,"line":11763},[240,61325,61326],{"class":257},"      border-radius: 4px;\n",[240,61328,61329],{"class":242,"line":11768},[240,61330,61331],{"class":257},"      cursor: pointer;\n",[240,61333,61334],{"class":242,"line":11774},[240,61335,4140],{"class":257},[240,61337,61338],{"class":242,"line":11795},[240,61339,4353],{"emptyLinePlaceholder":2051},[240,61341,61342],{"class":242,"line":11801},[240,61343,61344],{"class":257},"    .slider-footer .toggle button:hover {\n",[240,61346,61347],{"class":242,"line":11815},[240,61348,61349],{"class":257},"      background: rgba(255, 255, 255, 0.2);\n",[240,61351,61352],{"class":242,"line":11821},[240,61353,4140],{"class":257},[240,61355,61356],{"class":242,"line":11848},[240,61357,4353],{"emptyLinePlaceholder":2051},[240,61359,61360],{"class":242,"line":11857},[240,61361,61362],{"class":257},"    .slider-footer p {\n",[240,61364,61365],{"class":242,"line":11863},[240,61366,61367],{"class":257},"      margin: 0;\n",[240,61369,61370],{"class":242,"line":11871},[240,61371,61321],{"class":257},[240,61373,61374],{"class":242,"line":11876},[240,61375,61376],{"class":257},"      font-size: 18px;\n",[240,61378,61379],{"class":242,"line":18552},[240,61380,61381],{"class":257},"      margin-bottom: 10px;\n",[240,61383,61384],{"class":242,"line":18558},[240,61385,4140],{"class":257},[240,61387,61388],{"class":242,"line":18581},[240,61389,4353],{"emptyLinePlaceholder":2051},[240,61391,61392],{"class":242,"line":18587},[240,61393,61394],{"class":257},"    .slider-indicator {\n",[240,61396,61397],{"class":242,"line":18610},[240,61398,61367],{"class":257},[240,61400,61401],{"class":242,"line":18624},[240,61402,61403],{"class":257},"      padding: 0;\n",[240,61405,61406],{"class":242,"line":18644},[240,61407,61408],{"class":257},"      list-style: none;\n",[240,61410,61411],{"class":242,"line":18650},[240,61412,61273],{"class":257},[240,61414,61415],{"class":242,"line":18661},[240,61416,61417],{"class":257},"      align-items: center;\n",[240,61419,61420],{"class":242,"line":18684},[240,61421,4140],{"class":257},[240,61423,61424],{"class":242,"line":18706},[240,61425,4353],{"emptyLinePlaceholder":2051},[240,61427,61428],{"class":242,"line":18711},[240,61429,61430],{"class":257},"    .slider-indicator li {\n",[240,61432,61433],{"class":242,"line":18717},[240,61434,61435],{"class":257},"      width: 8px;\n",[240,61437,61438],{"class":242,"line":18731},[240,61439,61440],{"class":257},"      height: 8px;\n",[240,61442,61443],{"class":242,"line":18744},[240,61444,61445],{"class":257},"      margin: 4px;\n",[240,61447,61448],{"class":242,"line":18749},[240,61449,61450],{"class":257},"      border-radius: 50%;\n",[240,61452,61453],{"class":242,"line":18763},[240,61454,61455],{"class":257},"      background: #fff;\n",[240,61457,61458],{"class":242,"line":18768},[240,61459,61460],{"class":257},"      opacity: 0.4;\n",[240,61462,61463],{"class":242,"line":18774},[240,61464,61331],{"class":257},[240,61466,61467],{"class":242,"line":18779},[240,61468,4140],{"class":257},[240,61470,61471],{"class":242,"line":18793},[240,61472,4353],{"emptyLinePlaceholder":2051},[240,61474,61475],{"class":242,"line":18798},[240,61476,61477],{"class":257},"    .slider-indicator li.active {\n",[240,61479,61480],{"class":242,"line":18803},[240,61481,61482],{"class":257},"      width: 12px;\n",[240,61484,61485],{"class":242,"line":18817},[240,61486,61487],{"class":257},"      height: 12px;\n",[240,61489,61490],{"class":242,"line":18829},[240,61491,61492],{"class":257},"      opacity: 1;\n",[240,61494,61495],{"class":242,"line":18834},[240,61496,4140],{"class":257},[240,61498,61499,61501,61503],{"class":242,"line":18847},[240,61500,54353],{"class":257},[240,61502,2019],{"class":253},[240,61504,447],{"class":257},[240,61506,61507,61509,61511],{"class":242,"line":18852},[240,61508,592],{"class":257},[240,61510,53278],{"class":253},[240,61512,447],{"class":257},[240,61514,61515],{"class":242,"line":18857},[240,61516,4353],{"emptyLinePlaceholder":2051},[240,61518,61519,61521,61523],{"class":242,"line":18862},[240,61520,431],{"class":257},[240,61522,53738],{"class":253},[240,61524,447],{"class":257},[240,61526,61527,61529,61531,61533,61535,61538],{"class":242,"line":18875},[240,61528,452],{"class":257},[240,61530,330],{"class":253},[240,61532,437],{"class":436},[240,61534,440],{"class":257},[240,61536,61537],{"class":443},"\"slider\"",[240,61539,447],{"class":257},[240,61541,61542,61544,61546,61548,61550,61552],{"class":242,"line":18880},[240,61543,53285],{"class":257},[240,61545,330],{"class":253},[240,61547,437],{"class":436},[240,61549,440],{"class":257},[240,61551,57160],{"class":443},[240,61553,447],{"class":257},[240,61555,61556,61558,61560,61562,61564,61567,61569,61571,61573],{"class":242,"line":34579},[240,61557,57167],{"class":257},[240,61559,219],{"class":253},[240,61561,57172],{"class":436},[240,61563,440],{"class":257},[240,61565,61566],{"class":443},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[240,61568,57180],{"class":436},[240,61570,440],{"class":257},[240,61572,9603],{"class":443},[240,61574,61058],{"class":257},[240,61576,61577,61579,61581],{"class":242,"line":34585},[240,61578,53715],{"class":257},[240,61580,330],{"class":253},[240,61582,447],{"class":257},[240,61584,61585,61587,61589,61591,61593,61595],{"class":242,"line":34591},[240,61586,53285],{"class":257},[240,61588,330],{"class":253},[240,61590,437],{"class":436},[240,61592,440],{"class":257},[240,61594,57207],{"class":443},[240,61596,447],{"class":257},[240,61598,61599,61601,61603,61606,61608],{"class":242,"line":34597},[240,61600,57167],{"class":257},[240,61602,19],{"class":253},[240,61604,61605],{"class":257},">对人类来说会不会太超前了？\u003C\u002F",[240,61607,19],{"class":253},[240,61609,447],{"class":257},[240,61611,61612,61614,61616,61618,61620,61623],{"class":242,"line":34603},[240,61613,57167],{"class":257},[240,61615,3100],{"class":253},[240,61617,437],{"class":436},[240,61619,440],{"class":257},[240,61621,61622],{"class":443},"\"slider-indicator\"",[240,61624,447],{"class":257},[240,61626,61627,61629,61631,61633,61635,61638,61640,61642],{"class":242,"line":34614},[240,61628,57235],{"class":257},[240,61630,1829],{"class":253},[240,61632,437],{"class":436},[240,61634,440],{"class":257},[240,61636,61637],{"class":443},"\"active\"",[240,61639,57247],{"class":257},[240,61641,1829],{"class":253},[240,61643,447],{"class":257},[240,61645,61646,61648,61650,61652,61654],{"class":242,"line":34620},[240,61647,57235],{"class":257},[240,61649,1829],{"class":253},[240,61651,57247],{"class":257},[240,61653,1829],{"class":253},[240,61655,447],{"class":257},[240,61657,61658,61660,61662,61664,61666],{"class":242,"line":34640},[240,61659,57235],{"class":257},[240,61661,1829],{"class":253},[240,61663,57247],{"class":257},[240,61665,1829],{"class":253},[240,61667,447],{"class":257},[240,61669,61670,61672,61674,61676,61678],{"class":242,"line":34646},[240,61671,57235],{"class":257},[240,61673,1829],{"class":253},[240,61675,57247],{"class":257},[240,61677,1829],{"class":253},[240,61679,447],{"class":257},[240,61681,61682,61684,61686,61688,61690],{"class":242,"line":34657},[240,61683,57235],{"class":257},[240,61685,1829],{"class":253},[240,61687,57247],{"class":257},[240,61689,1829],{"class":253},[240,61691,447],{"class":257},[240,61693,61694,61696,61698,61700,61702],{"class":242,"line":34663},[240,61695,57235],{"class":257},[240,61697,1829],{"class":253},[240,61699,57247],{"class":257},[240,61701,1829],{"class":253},[240,61703,447],{"class":257},[240,61705,61706,61708,61710,61712,61714],{"class":242,"line":34669},[240,61707,57235],{"class":257},[240,61709,1829],{"class":253},[240,61711,57247],{"class":257},[240,61713,1829],{"class":253},[240,61715,447],{"class":257},[240,61717,61718,61720,61722,61724,61726],{"class":242,"line":34675},[240,61719,57235],{"class":257},[240,61721,1829],{"class":253},[240,61723,57247],{"class":257},[240,61725,1829],{"class":253},[240,61727,447],{"class":257},[240,61729,61730,61732,61734],{"class":242,"line":34681},[240,61731,57340],{"class":257},[240,61733,3100],{"class":253},[240,61735,447],{"class":257},[240,61737,61738,61740,61742,61744,61746,61749],{"class":242,"line":34687},[240,61739,57167],{"class":257},[240,61741,330],{"class":253},[240,61743,437],{"class":436},[240,61745,440],{"class":257},[240,61747,61748],{"class":443},"\"toggle\"",[240,61750,447],{"class":257},[240,61752,61753,61755,61757,61759,61761,61764,61766,61769,61771,61773],{"class":242,"line":34693},[240,61754,57235],{"class":257},[240,61756,55822],{"class":253},[240,61758,437],{"class":436},[240,61760,440],{"class":257},[240,61762,61763],{"class":443},"\"prev\"",[240,61765,3053],{"class":257},[240,61767,61768],{"class":264},"&lt;",[240,61770,592],{"class":257},[240,61772,55822],{"class":253},[240,61774,447],{"class":257},[240,61776,61777,61779,61781,61783,61785,61788,61790,61793,61795,61797],{"class":242,"line":34699},[240,61778,57235],{"class":257},[240,61780,55822],{"class":253},[240,61782,437],{"class":436},[240,61784,440],{"class":257},[240,61786,61787],{"class":443},"\"next\"",[240,61789,3053],{"class":257},[240,61791,61792],{"class":264},"&gt;",[240,61794,592],{"class":257},[240,61796,55822],{"class":253},[240,61798,447],{"class":257},[240,61800,61801,61803,61805],{"class":242,"line":34719},[240,61802,57340],{"class":257},[240,61804,330],{"class":253},[240,61806,447],{"class":257},[240,61808,61809,61811,61813],{"class":242,"line":34725},[240,61810,53715],{"class":257},[240,61812,330],{"class":253},[240,61814,447],{"class":257},[240,61816,61817,61819,61821],{"class":242,"line":34741},[240,61818,54353],{"class":257},[240,61820,330],{"class":253},[240,61822,447],{"class":257},[240,61824,61825,61827,61829],{"class":242,"line":34747},[240,61826,452],{"class":257},[240,61828,53751],{"class":253},[240,61830,447],{"class":257},[240,61832,61833],{"class":242,"line":34761},[240,61834,61835],{"class":257},"    \u002F\u002F 1. 初始数据\n",[240,61837,61838],{"class":242,"line":34767},[240,61839,61840],{"class":257},"    const data = [\n",[240,61842,61843],{"class":242,"line":34782},[240,61844,61845],{"class":257},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[240,61847,61848],{"class":242,"line":34788},[240,61849,61850],{"class":257},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[240,61852,61853],{"class":242,"line":34797},[240,61854,61855],{"class":257},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[240,61857,61858],{"class":242,"line":34803},[240,61859,61860],{"class":257},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[240,61862,61863],{"class":242,"line":34812},[240,61864,61865],{"class":257},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[240,61867,61868],{"class":242,"line":34818},[240,61869,61870],{"class":257},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[240,61872,61873],{"class":242,"line":34824},[240,61874,61875],{"class":257},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[240,61877,61878],{"class":242,"line":34833},[240,61879,61880],{"class":257},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[240,61882,61883],{"class":242,"line":34839},[240,61884,55045],{"class":257},[240,61886,61887],{"class":242,"line":34850},[240,61888,61889],{"class":257},"    \u002F\u002F 获取元素\n",[240,61891,61892],{"class":242,"line":34856},[240,61893,61894],{"class":257},"    const img = document.querySelector('.slider-wrapper img')\n",[240,61896,61897],{"class":242,"line":34875},[240,61898,61899],{"class":257},"    const p = document.querySelector('.slider-footer p')\n",[240,61901,61902],{"class":242,"line":34881},[240,61903,61904],{"class":257},"    const footer = document.querySelector('.slider-footer')\n",[240,61906,61907],{"class":242,"line":34892},[240,61908,61909],{"class":257},"    \u002F\u002F 1. 右按钮业务\n",[240,61911,61912],{"class":242,"line":34898},[240,61913,61914],{"class":257},"    \u002F\u002F 1.1 获取右侧按钮 \n",[240,61916,61917],{"class":242,"line":34918},[240,61918,61919],{"class":257},"    const next = document.querySelector('.next')\n",[240,61921,61922],{"class":242,"line":34934},[240,61923,61924],{"class":257},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[240,61926,61927],{"class":242,"line":34940},[240,61928,61929],{"class":257},"    \u002F\u002F 1.2 注册点击事件\n",[240,61931,61932],{"class":242,"line":34954},[240,61933,4353],{"emptyLinePlaceholder":2051},[240,61935,61936],{"class":242,"line":34960},[240,61937,61938],{"class":257},"    next.addEventListener('click', function () {\n",[240,61940,61941],{"class":242,"line":34966},[240,61942,61943],{"class":257},"      \u002F\u002F console.log(11)\n",[240,61945,61946],{"class":242,"line":34977},[240,61947,61948],{"class":257},"      i++\n",[240,61950,61951],{"class":242,"line":34983},[240,61952,61953],{"class":257},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[240,61955,61956],{"class":242,"line":34989},[240,61957,61958],{"class":257},"      \u002F\u002F if (i >= 8) {\n",[240,61960,61961],{"class":242,"line":34999},[240,61962,61963],{"class":257},"      \u002F\u002F   i = 0\n",[240,61965,61966],{"class":242,"line":35005},[240,61967,61968],{"class":257},"      \u002F\u002F }\n",[240,61970,61971],{"class":242,"line":35016},[240,61972,61973],{"class":257},"      i = i >= data.length ? 0 : i\n",[240,61975,61976],{"class":242,"line":35022},[240,61977,61978],{"class":257},"      \u002F\u002F 1.3 得到对应的对象\n",[240,61980,61981],{"class":242,"line":35032},[240,61982,61983],{"class":257},"      \u002F\u002F console.log(data[i])\n",[240,61985,61986],{"class":242,"line":35037},[240,61987,61988],{"class":257},"      \u002F\u002F 调用函数\n",[240,61990,61991],{"class":242,"line":35043},[240,61992,61993],{"class":257},"      toggle()\n",[240,61995,61996],{"class":242,"line":35092},[240,61997,35407],{"class":257},[240,61999,62000],{"class":242,"line":35139},[240,62001,4353],{"emptyLinePlaceholder":2051},[240,62003,62004],{"class":242,"line":35144},[240,62005,62006],{"class":257},"    \u002F\u002F 2. 左侧按钮业务\n",[240,62008,62009],{"class":242,"line":35150},[240,62010,62011],{"class":257},"    \u002F\u002F 2.1 获取左侧按钮 \n",[240,62013,62014],{"class":242,"line":35169},[240,62015,62016],{"class":257},"    const prev = document.querySelector('.prev')\n",[240,62018,62019],{"class":242,"line":35175},[240,62020,61929],{"class":257},[240,62022,62023],{"class":242,"line":35195},[240,62024,62025],{"class":257},"    prev.addEventListener('click', function () {\n",[240,62027,62028],{"class":242,"line":35201},[240,62029,62030],{"class":257},"      i--\n",[240,62032,62033],{"class":242,"line":35207},[240,62034,62035],{"class":257},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[240,62037,62038],{"class":242,"line":35217},[240,62039,62040],{"class":257},"      \u002F\u002F if (i \u003C 0) {\n",[240,62042,62043],{"class":242,"line":35222},[240,62044,62045],{"class":257},"      \u002F\u002F   i = 7\n",[240,62047,62048],{"class":242,"line":35228},[240,62049,61968],{"class":257},[240,62051,62052],{"class":242,"line":35244},[240,62053,62054],{"class":257},"      i = i \u003C 0 ? data.length - 1 : i\n",[240,62056,62057],{"class":242,"line":35289},[240,62058,61978],{"class":257},[240,62060,62061],{"class":242,"line":35295},[240,62062,61983],{"class":257},[240,62064,62065],{"class":242,"line":35301},[240,62066,61988],{"class":257},[240,62068,62069],{"class":242,"line":35307},[240,62070,61993],{"class":257},[240,62072,62073],{"class":242,"line":35318},[240,62074,35407],{"class":257},[240,62076,62077],{"class":242,"line":35324},[240,62078,4353],{"emptyLinePlaceholder":2051},[240,62080,62081],{"class":242,"line":35330},[240,62082,62083],{"class":257},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[240,62085,62086],{"class":242,"line":35336},[240,62087,62088],{"class":257},"    function toggle() {\n",[240,62090,62091],{"class":242,"line":35354},[240,62092,62093],{"class":257},"      \u002F\u002F 1.4 渲染对应的数据\n",[240,62095,62096],{"class":242,"line":35368},[240,62097,62098],{"class":257},"      img.src = data[i].url\n",[240,62100,62101],{"class":242,"line":35377},[240,62102,62103],{"class":257},"      p.innerHTML = data[i].title\n",[240,62105,62106],{"class":242,"line":35386},[240,62107,62108],{"class":257},"      footer.style.backgroundColor = data[i].color\n",[240,62110,62111],{"class":242,"line":35395},[240,62112,62113],{"class":257},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[240,62115,62116],{"class":242,"line":35404},[240,62117,62118],{"class":257},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[240,62120,62121],{"class":242,"line":35410},[240,62122,62123],{"class":257},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[240,62125,62126],{"class":242,"line":35416},[240,62127,4140],{"class":257},[240,62129,62130],{"class":242,"line":35424},[240,62131,4353],{"emptyLinePlaceholder":2051},[240,62133,62134],{"class":242,"line":35429},[240,62135,62136],{"class":257},"    \u002F\u002F 3. 自动播放模块\n",[240,62138,62139],{"class":242,"line":35435},[240,62140,62141],{"class":257},"    let timerId = setInterval(function () {\n",[240,62143,62144],{"class":242,"line":35446},[240,62145,62146],{"class":257},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[240,62148,62149],{"class":242,"line":35452},[240,62150,62151],{"class":257},"      next.click()\n",[240,62153,62154],{"class":242,"line":35472},[240,62155,62156],{"class":257},"    }, 1000)\n",[240,62158,62159],{"class":242,"line":35478},[240,62160,4353],{"emptyLinePlaceholder":2051},[240,62162,62163],{"class":242,"line":35484},[240,62164,62165],{"class":257},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[240,62167,62168],{"class":242,"line":35490},[240,62169,62170],{"class":257},"    const slider = document.querySelector('.slider')\n",[240,62172,62173],{"class":242,"line":35507},[240,62174,62175],{"class":257},"    \u002F\u002F 注册事件\n",[240,62177,62178],{"class":242,"line":35513},[240,62179,62180],{"class":257},"    slider.addEventListener('mouseenter', function () {\n",[240,62182,62183],{"class":242,"line":35519},[240,62184,62185],{"class":257},"      \u002F\u002F 停止定时器\n",[240,62187,62188],{"class":242,"line":35525},[240,62189,62190],{"class":257},"      clearInterval(timerId)\n",[240,62192,62193],{"class":242,"line":35531},[240,62194,35407],{"class":257},[240,62196,62197],{"class":242,"line":35537},[240,62198,4353],{"emptyLinePlaceholder":2051},[240,62200,62201],{"class":242,"line":35564},[240,62202,62203],{"class":257},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[240,62205,62206],{"class":242,"line":35588},[240,62207,62175],{"class":257},[240,62209,62210],{"class":242,"line":35594},[240,62211,62212],{"class":257},"    slider.addEventListener('mouseleave', function () {\n",[240,62214,62215],{"class":242,"line":35600},[240,62216,62185],{"class":257},[240,62218,62219],{"class":242,"line":35606},[240,62220,62221],{"class":257},"      if (timerId) clearInterval(timerId)\n",[240,62223,62224],{"class":242,"line":35617},[240,62225,62226],{"class":257},"      \u002F\u002F 开启定时器\n",[240,62228,62229],{"class":242,"line":35628},[240,62230,62231],{"class":257},"      timerId = setInterval(function () {\n",[240,62233,62234],{"class":242,"line":35634},[240,62235,62236],{"class":257},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[240,62238,62239],{"class":242,"line":35651},[240,62240,62241],{"class":257},"        next.click()\n",[240,62243,62244],{"class":242,"line":35674},[240,62245,62246],{"class":257},"      }, 1000)\n",[240,62248,62249],{"class":242,"line":35697},[240,62250,35407],{"class":257},[240,62252,62253,62255,62257],{"class":242,"line":35703},[240,62254,54353],{"class":257},[240,62256,53751],{"class":253},[240,62258,447],{"class":257},[240,62260,62261,62263,62265],{"class":242,"line":35708},[240,62262,592],{"class":257},[240,62264,53738],{"class":253},[240,62266,447],{"class":257},[240,62268,62269],{"class":242,"line":35717},[240,62270,4353],{"emptyLinePlaceholder":2051},[240,62272,62273,62275,62277],{"class":242,"line":35727},[240,62274,592],{"class":257},[240,62276,52581],{"class":253},[240,62278,447],{"class":257},[23945,62280,62282],{"id":62281},"_3252-焦点事件","3.2.5.2 焦点事件",[19,62284,62285],{},"小米搜索框案例：",[231,62287,62289],{"className":52579,"code":62288,"language":52581,"meta":236,"style":236},"\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",[23,62290,62291,62301,62315,62319,62327,62341,62361,62381,62393,62401,62407,62417,62427,62439,62443,62447,62454,62458,62469,62473,62477,62484,62495,62508,62522,62526,62530,62539,62551,62563,62577,62590,62603,62621,62632,62636,62640,62649,62666,62670,62674,62681,62691,62701,62712,62725,62737,62753,62764,62775,62779,62783,62791,62801,62818,62830,62842,62853,62857,62861,62871,62882,62886,62894,62898,62906,62910,62918,62933,62956,62971,63000,63027,63054,63081,63108,63135,63162,63171,63179,63187,63192,63212,63232,63237,63242,63260,63265,63275,63280,63294,63299,63304,63321,63330,63342,63346,63354,63362,63366],{"__ignoreMap":236},[240,62292,62293,62295,62297,62299],{"class":242,"line":243},[240,62294,53243],{"class":257},[240,62296,53246],{"class":253},[240,62298,53249],{"class":436},[240,62300,447],{"class":257},[240,62302,62303,62305,62307,62309,62311,62313],{"class":242,"line":250},[240,62304,431],{"class":257},[240,62306,52581],{"class":253},[240,62308,53260],{"class":436},[240,62310,440],{"class":257},[240,62312,53265],{"class":443},[240,62314,447],{"class":257},[240,62316,62317],{"class":242,"line":261},[240,62318,4353],{"emptyLinePlaceholder":2051},[240,62320,62321,62323,62325],{"class":242,"line":277},[240,62322,431],{"class":257},[240,62324,53278],{"class":253},[240,62326,447],{"class":257},[240,62328,62329,62331,62333,62335,62337,62339],{"class":242,"line":294},[240,62330,53285],{"class":257},[240,62332,53288],{"class":253},[240,62334,53291],{"class":436},[240,62336,440],{"class":257},[240,62338,53296],{"class":443},[240,62340,447],{"class":257},[240,62342,62343,62345,62347,62349,62351,62353,62355,62357,62359],{"class":242,"line":309},[240,62344,53285],{"class":257},[240,62346,53288],{"class":253},[240,62348,53307],{"class":436},[240,62350,440],{"class":257},[240,62352,53312],{"class":443},[240,62354,53315],{"class":436},[240,62356,440],{"class":257},[240,62358,53320],{"class":443},[240,62360,447],{"class":257},[240,62362,62363,62365,62367,62369,62371,62373,62375,62377,62379],{"class":242,"line":529},[240,62364,53285],{"class":257},[240,62366,53288],{"class":253},[240,62368,16869],{"class":436},[240,62370,440],{"class":257},[240,62372,53335],{"class":443},[240,62374,53315],{"class":436},[240,62376,440],{"class":257},[240,62378,53342],{"class":443},[240,62380,447],{"class":257},[240,62382,62383,62385,62387,62389,62391],{"class":242,"line":549},[240,62384,53285],{"class":257},[240,62386,53351],{"class":253},[240,62388,53354],{"class":257},[240,62390,53351],{"class":253},[240,62392,447],{"class":257},[240,62394,62395,62397,62399],{"class":242,"line":569},[240,62396,53285],{"class":257},[240,62398,2019],{"class":253},[240,62400,447],{"class":257},[240,62402,62403,62405],{"class":242,"line":589},[240,62404,53371],{"class":253},[240,62406,258],{"class":257},[240,62408,62409,62411,62413,62415],{"class":242,"line":715},[240,62410,53378],{"class":264},[240,62412,268],{"class":257},[240,62414,1274],{"class":264},[240,62416,274],{"class":257},[240,62418,62419,62421,62423,62425],{"class":242,"line":727},[240,62420,53389],{"class":264},[240,62422,268],{"class":257},[240,62424,1274],{"class":264},[240,62426,274],{"class":257},[240,62428,62429,62432,62434,62437],{"class":242,"line":1730},[240,62430,62431],{"class":264},"            box-sizing",[240,62433,268],{"class":257},[240,62435,62436],{"class":264},"border-box",[240,62438,274],{"class":257},[240,62440,62441],{"class":242,"line":3582},[240,62442,4482],{"class":257},[240,62444,62445],{"class":242,"line":3596},[240,62446,4353],{"emptyLinePlaceholder":2051},[240,62448,62449,62452],{"class":242,"line":3601},[240,62450,62451],{"class":253},"        ul",[240,62453,258],{"class":257},[240,62455,62456],{"class":242,"line":3607},[240,62457,4353],{"emptyLinePlaceholder":2051},[240,62459,62460,62463,62465,62467],{"class":242,"line":3628},[240,62461,62462],{"class":264},"            list-style",[240,62464,268],{"class":257},[240,62466,826],{"class":264},[240,62468,274],{"class":257},[240,62470,62471],{"class":242,"line":3633},[240,62472,4482],{"class":257},[240,62474,62475],{"class":242,"line":3647},[240,62476,4353],{"emptyLinePlaceholder":2051},[240,62478,62479,62482],{"class":242,"line":3652},[240,62480,62481],{"class":436},"        .mi",[240,62483,258],{"class":257},[240,62485,62486,62489,62491,62493],{"class":242,"line":3681},[240,62487,62488],{"class":264},"            position",[240,62490,268],{"class":257},[240,62492,56698],{"class":264},[240,62494,274],{"class":257},[240,62496,62497,62499,62501,62504,62506],{"class":242,"line":3686},[240,62498,53427],{"class":264},[240,62500,268],{"class":257},[240,62502,62503],{"class":264},"223",[240,62505,289],{"class":288},[240,62507,274],{"class":257},[240,62509,62510,62512,62514,62516,62518,62520],{"class":242,"line":3703},[240,62511,53378],{"class":264},[240,62513,268],{"class":257},[240,62515,285],{"class":264},[240,62517,289],{"class":288},[240,62519,53498],{"class":264},[240,62521,274],{"class":257},[240,62523,62524],{"class":242,"line":3708},[240,62525,4482],{"class":257},[240,62527,62528],{"class":242,"line":3713},[240,62529,4353],{"emptyLinePlaceholder":2051},[240,62531,62532,62534,62537],{"class":242,"line":3718},[240,62533,62481],{"class":436},[240,62535,62536],{"class":253}," input",[240,62538,258],{"class":257},[240,62540,62541,62543,62545,62547,62549],{"class":242,"line":3732},[240,62542,53427],{"class":264},[240,62544,268],{"class":257},[240,62546,62503],{"class":264},[240,62548,289],{"class":288},[240,62550,274],{"class":257},[240,62552,62553,62555,62557,62559,62561],{"class":242,"line":3737},[240,62554,53441],{"class":264},[240,62556,268],{"class":257},[240,62558,2706],{"class":264},[240,62560,289],{"class":288},[240,62562,274],{"class":257},[240,62564,62565,62567,62569,62571,62573,62575],{"class":242,"line":4530},[240,62566,53389],{"class":264},[240,62568,268],{"class":257},[240,62570,1274],{"class":264},[240,62572,3991],{"class":264},[240,62574,289],{"class":288},[240,62576,274],{"class":257},[240,62578,62579,62582,62584,62586,62588],{"class":242,"line":4544},[240,62580,62581],{"class":264},"            font-size",[240,62583,268],{"class":257},[240,62585,2648],{"class":264},[240,62587,289],{"class":288},[240,62589,274],{"class":257},[240,62591,62592,62595,62597,62599,62601],{"class":242,"line":4552},[240,62593,62594],{"class":264},"            line-height",[240,62596,268],{"class":257},[240,62598,2706],{"class":264},[240,62600,289],{"class":288},[240,62602,274],{"class":257},[240,62604,62605,62608,62610,62612,62614,62616,62619],{"class":242,"line":4557},[240,62606,62607],{"class":264},"            border",[240,62609,268],{"class":257},[240,62611,1643],{"class":264},[240,62613,289],{"class":288},[240,62615,53463],{"class":264},[240,62617,62618],{"class":264}," #e0e0e0",[240,62620,274],{"class":257},[240,62622,62623,62626,62628,62630],{"class":242,"line":4563},[240,62624,62625],{"class":264},"            outline",[240,62627,268],{"class":257},[240,62629,826],{"class":264},[240,62631,274],{"class":257},[240,62633,62634],{"class":242,"line":4569},[240,62635,4482],{"class":257},[240,62637,62638],{"class":242,"line":4574},[240,62639,4353],{"emptyLinePlaceholder":2051},[240,62641,62642,62644,62647],{"class":242,"line":9899},[240,62643,62481],{"class":436},[240,62645,62646],{"class":436}," .search",[240,62648,258],{"class":257},[240,62650,62651,62653,62655,62657,62659,62661,62664],{"class":242,"line":9923},[240,62652,62607],{"class":264},[240,62654,268],{"class":257},[240,62656,1643],{"class":264},[240,62658,289],{"class":288},[240,62660,53463],{"class":264},[240,62662,62663],{"class":264}," #ff6700",[240,62665,274],{"class":257},[240,62667,62668],{"class":242,"line":9928},[240,62669,4482],{"class":257},[240,62671,62672],{"class":242,"line":9934},[240,62673,4353],{"emptyLinePlaceholder":2051},[240,62675,62676,62679],{"class":242,"line":9961},[240,62677,62678],{"class":436},"        .result-list",[240,62680,258],{"class":257},[240,62682,62683,62685,62687,62689],{"class":242,"line":9966},[240,62684,53415],{"class":264},[240,62686,268],{"class":257},[240,62688,826],{"class":264},[240,62690,274],{"class":257},[240,62692,62693,62695,62697,62699],{"class":242,"line":9972},[240,62694,62488],{"class":264},[240,62696,268],{"class":257},[240,62698,56765],{"class":264},[240,62700,274],{"class":257},[240,62702,62703,62706,62708,62710],{"class":242,"line":9984},[240,62704,62705],{"class":264},"            left",[240,62707,268],{"class":257},[240,62709,1274],{"class":264},[240,62711,274],{"class":257},[240,62713,62714,62717,62719,62721,62723],{"class":242,"line":9996},[240,62715,62716],{"class":264},"            top",[240,62718,268],{"class":257},[240,62720,2706],{"class":264},[240,62722,289],{"class":288},[240,62724,274],{"class":257},[240,62726,62727,62729,62731,62733,62735],{"class":242,"line":10008},[240,62728,53427],{"class":264},[240,62730,268],{"class":257},[240,62732,62503],{"class":264},[240,62734,289],{"class":288},[240,62736,274],{"class":257},[240,62738,62739,62741,62743,62745,62747,62749,62751],{"class":242,"line":11667},[240,62740,62607],{"class":264},[240,62742,268],{"class":257},[240,62744,1643],{"class":264},[240,62746,289],{"class":288},[240,62748,53463],{"class":264},[240,62750,62663],{"class":264},[240,62752,274],{"class":257},[240,62754,62755,62758,62760,62762],{"class":242,"line":11692},[240,62756,62757],{"class":264},"            border-top",[240,62759,268],{"class":257},[240,62761,1274],{"class":264},[240,62763,274],{"class":257},[240,62765,62766,62769,62771,62773],{"class":242,"line":11715},[240,62767,62768],{"class":264},"            background",[240,62770,268],{"class":257},[240,62772,683],{"class":264},[240,62774,274],{"class":257},[240,62776,62777],{"class":242,"line":11739},[240,62778,4482],{"class":257},[240,62780,62781],{"class":242,"line":11744},[240,62782,4353],{"emptyLinePlaceholder":2051},[240,62784,62785,62787,62789],{"class":242,"line":11749},[240,62786,62678],{"class":436},[240,62788,609],{"class":253},[240,62790,258],{"class":257},[240,62792,62793,62795,62797,62799],{"class":242,"line":11754},[240,62794,53415],{"class":264},[240,62796,268],{"class":257},[240,62798,271],{"class":264},[240,62800,274],{"class":257},[240,62802,62803,62805,62807,62809,62811,62814,62816],{"class":242,"line":11763},[240,62804,53389],{"class":264},[240,62806,268],{"class":257},[240,62808,2445],{"class":264},[240,62810,289],{"class":288},[240,62812,62813],{"class":264}," 15",[240,62815,289],{"class":288},[240,62817,274],{"class":257},[240,62819,62820,62822,62824,62826,62828],{"class":242,"line":11768},[240,62821,62581],{"class":264},[240,62823,268],{"class":257},[240,62825,2597],{"class":264},[240,62827,289],{"class":288},[240,62829,274],{"class":257},[240,62831,62832,62835,62837,62840],{"class":242,"line":11774},[240,62833,62834],{"class":264},"            color",[240,62836,268],{"class":257},[240,62838,62839],{"class":264},"#424242",[240,62841,274],{"class":257},[240,62843,62844,62847,62849,62851],{"class":242,"line":11795},[240,62845,62846],{"class":264},"            text-decoration",[240,62848,268],{"class":257},[240,62850,826],{"class":264},[240,62852,274],{"class":257},[240,62854,62855],{"class":242,"line":11801},[240,62856,4482],{"class":257},[240,62858,62859],{"class":242,"line":11815},[240,62860,4353],{"emptyLinePlaceholder":2051},[240,62862,62863,62865,62867,62869],{"class":242,"line":11821},[240,62864,62678],{"class":436},[240,62866,609],{"class":253},[240,62868,710],{"class":436},[240,62870,258],{"class":257},[240,62872,62873,62875,62877,62880],{"class":242,"line":11848},[240,62874,53580],{"class":264},[240,62876,268],{"class":257},[240,62878,62879],{"class":264},"#eee",[240,62881,274],{"class":257},[240,62883,62884],{"class":242,"line":11857},[240,62885,4482],{"class":257},[240,62887,62888,62890,62892],{"class":242,"line":11863},[240,62889,53715],{"class":257},[240,62891,2019],{"class":253},[240,62893,447],{"class":257},[240,62895,62896],{"class":242,"line":11871},[240,62897,4353],{"emptyLinePlaceholder":2051},[240,62899,62900,62902,62904],{"class":242,"line":11876},[240,62901,592],{"class":257},[240,62903,53278],{"class":253},[240,62905,447],{"class":257},[240,62907,62908],{"class":242,"line":18552},[240,62909,4353],{"emptyLinePlaceholder":2051},[240,62911,62912,62914,62916],{"class":242,"line":18558},[240,62913,431],{"class":257},[240,62915,53738],{"class":253},[240,62917,447],{"class":257},[240,62919,62920,62922,62924,62926,62928,62931],{"class":242,"line":18581},[240,62921,53285],{"class":257},[240,62923,330],{"class":253},[240,62925,437],{"class":436},[240,62927,440],{"class":257},[240,62929,62930],{"class":443},"\"mi\"",[240,62932,447],{"class":257},[240,62934,62935,62937,62939,62941,62943,62946,62949,62951,62954],{"class":242,"line":18587},[240,62936,57235],{"class":257},[240,62938,55756],{"class":253},[240,62940,55759],{"class":436},[240,62942,440],{"class":257},[240,62944,62945],{"class":443},"\"search\"",[240,62947,62948],{"class":436}," placeholder",[240,62950,440],{"class":257},[240,62952,62953],{"class":443},"\"小米笔记本\"",[240,62955,447],{"class":257},[240,62957,62958,62960,62962,62964,62966,62969],{"class":242,"line":18610},[240,62959,57235],{"class":257},[240,62961,3100],{"class":253},[240,62963,437],{"class":436},[240,62965,440],{"class":257},[240,62967,62968],{"class":443},"\"result-list\"",[240,62970,447],{"class":257},[240,62972,62973,62976,62978,62981,62983,62985,62987,62989,62992,62994,62996,62998],{"class":242,"line":18624},[240,62974,62975],{"class":257},"            \u003C",[240,62977,1829],{"class":253},[240,62979,62980],{"class":257},">\u003C",[240,62982,254],{"class":253},[240,62984,457],{"class":436},[240,62986,440],{"class":257},[240,62988,462],{"class":443},[240,62990,62991],{"class":257},">全部商品\u003C\u002F",[240,62993,254],{"class":253},[240,62995,57247],{"class":257},[240,62997,1829],{"class":253},[240,62999,447],{"class":257},[240,63001,63002,63004,63006,63008,63010,63012,63014,63016,63019,63021,63023,63025],{"class":242,"line":18644},[240,63003,62975],{"class":257},[240,63005,1829],{"class":253},[240,63007,62980],{"class":257},[240,63009,254],{"class":253},[240,63011,457],{"class":436},[240,63013,440],{"class":257},[240,63015,462],{"class":443},[240,63017,63018],{"class":257},">小米11\u003C\u002F",[240,63020,254],{"class":253},[240,63022,57247],{"class":257},[240,63024,1829],{"class":253},[240,63026,447],{"class":257},[240,63028,63029,63031,63033,63035,63037,63039,63041,63043,63046,63048,63050,63052],{"class":242,"line":18650},[240,63030,62975],{"class":257},[240,63032,1829],{"class":253},[240,63034,62980],{"class":257},[240,63036,254],{"class":253},[240,63038,457],{"class":436},[240,63040,440],{"class":257},[240,63042,462],{"class":443},[240,63044,63045],{"class":257},">小米10S\u003C\u002F",[240,63047,254],{"class":253},[240,63049,57247],{"class":257},[240,63051,1829],{"class":253},[240,63053,447],{"class":257},[240,63055,63056,63058,63060,63062,63064,63066,63068,63070,63073,63075,63077,63079],{"class":242,"line":18661},[240,63057,62975],{"class":257},[240,63059,1829],{"class":253},[240,63061,62980],{"class":257},[240,63063,254],{"class":253},[240,63065,457],{"class":436},[240,63067,440],{"class":257},[240,63069,462],{"class":443},[240,63071,63072],{"class":257},">小米笔记本\u003C\u002F",[240,63074,254],{"class":253},[240,63076,57247],{"class":257},[240,63078,1829],{"class":253},[240,63080,447],{"class":257},[240,63082,63083,63085,63087,63089,63091,63093,63095,63097,63100,63102,63104,63106],{"class":242,"line":18684},[240,63084,62975],{"class":257},[240,63086,1829],{"class":253},[240,63088,62980],{"class":257},[240,63090,254],{"class":253},[240,63092,457],{"class":436},[240,63094,440],{"class":257},[240,63096,462],{"class":443},[240,63098,63099],{"class":257},">小米手机\u003C\u002F",[240,63101,254],{"class":253},[240,63103,57247],{"class":257},[240,63105,1829],{"class":253},[240,63107,447],{"class":257},[240,63109,63110,63112,63114,63116,63118,63120,63122,63124,63127,63129,63131,63133],{"class":242,"line":18706},[240,63111,62975],{"class":257},[240,63113,1829],{"class":253},[240,63115,62980],{"class":257},[240,63117,254],{"class":253},[240,63119,457],{"class":436},[240,63121,440],{"class":257},[240,63123,462],{"class":443},[240,63125,63126],{"class":257},">黑鲨4\u003C\u002F",[240,63128,254],{"class":253},[240,63130,57247],{"class":257},[240,63132,1829],{"class":253},[240,63134,447],{"class":257},[240,63136,63137,63139,63141,63143,63145,63147,63149,63151,63154,63156,63158,63160],{"class":242,"line":18711},[240,63138,62975],{"class":257},[240,63140,1829],{"class":253},[240,63142,62980],{"class":257},[240,63144,254],{"class":253},[240,63146,457],{"class":436},[240,63148,440],{"class":257},[240,63150,462],{"class":443},[240,63152,63153],{"class":257},">空调\u003C\u002F",[240,63155,254],{"class":253},[240,63157,57247],{"class":257},[240,63159,1829],{"class":253},[240,63161,447],{"class":257},[240,63163,63164,63167,63169],{"class":242,"line":18717},[240,63165,63166],{"class":257},"        \u003C\u002F",[240,63168,3100],{"class":253},[240,63170,447],{"class":257},[240,63172,63173,63175,63177],{"class":242,"line":18731},[240,63174,53715],{"class":257},[240,63176,330],{"class":253},[240,63178,447],{"class":257},[240,63180,63181,63183,63185],{"class":242,"line":18744},[240,63182,53285],{"class":257},[240,63184,53751],{"class":253},[240,63186,447],{"class":257},[240,63188,63189],{"class":242,"line":18749},[240,63190,63191],{"class":246},"        \u002F\u002F 1. 获取元素\n",[240,63193,63194,63197,63199,63201,63203,63205,63207,63210],{"class":242,"line":18763},[240,63195,63196],{"class":288},"        const",[240,63198,62536],{"class":264},[240,63200,15514],{"class":288},[240,63202,56331],{"class":257},[240,63204,56334],{"class":436},[240,63206,789],{"class":257},[240,63208,63209],{"class":443},"'[type=search]'",[240,63211,2129],{"class":257},[240,63213,63214,63216,63219,63221,63223,63225,63227,63230],{"class":242,"line":18768},[240,63215,63196],{"class":288},[240,63217,63218],{"class":264}," ul",[240,63220,15514],{"class":288},[240,63222,56331],{"class":257},[240,63224,56334],{"class":436},[240,63226,789],{"class":257},[240,63228,63229],{"class":443},"'.result-list'",[240,63231,2129],{"class":257},[240,63233,63234],{"class":242,"line":18774},[240,63235,63236],{"class":246},"        \u002F\u002F console.log(input)\n",[240,63238,63239],{"class":242,"line":18779},[240,63240,63241],{"class":246},"        \u002F\u002F 2. 监听事件 获得焦点\n",[240,63243,63244,63247,63249,63251,63254,63256,63258],{"class":242,"line":18793},[240,63245,63246],{"class":257},"        input.",[240,63248,59744],{"class":436},[240,63250,789],{"class":257},[240,63252,63253],{"class":443},"'focus'",[240,63255,1277],{"class":257},[240,63257,56384],{"class":288},[240,63259,56387],{"class":257},[240,63261,63262],{"class":242,"line":18798},[240,63263,63264],{"class":246},"            \u002F\u002F ul显示\n",[240,63266,63267,63270,63272],{"class":242,"line":18803},[240,63268,63269],{"class":257},"            ul.style.display ",[240,63271,440],{"class":288},[240,63273,63274],{"class":443}," 'block'\n",[240,63276,63277],{"class":242,"line":18817},[240,63278,63279],{"class":246},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[240,63281,63282,63285,63287,63289,63292],{"class":242,"line":18829},[240,63283,63284],{"class":257},"            input.classList.",[240,63286,7285],{"class":436},[240,63288,789],{"class":257},[240,63290,63291],{"class":443},"'search'",[240,63293,2129],{"class":257},[240,63295,63296],{"class":242,"line":18834},[240,63297,63298],{"class":257},"        })\n",[240,63300,63301],{"class":242,"line":18847},[240,63302,63303],{"class":246},"        \u002F\u002F 3. 监听事件 失去焦点\n",[240,63305,63306,63308,63310,63312,63315,63317,63319],{"class":242,"line":18852},[240,63307,63246],{"class":257},[240,63309,59744],{"class":436},[240,63311,789],{"class":257},[240,63313,63314],{"class":443},"'blur'",[240,63316,1277],{"class":257},[240,63318,56384],{"class":288},[240,63320,56387],{"class":257},[240,63322,63323,63325,63327],{"class":242,"line":18857},[240,63324,63269],{"class":257},[240,63326,440],{"class":288},[240,63328,63329],{"class":443}," 'none'\n",[240,63331,63332,63334,63336,63338,63340],{"class":242,"line":18862},[240,63333,63284],{"class":257},[240,63335,58939],{"class":436},[240,63337,789],{"class":257},[240,63339,63291],{"class":443},[240,63341,2129],{"class":257},[240,63343,63344],{"class":242,"line":18875},[240,63345,63298],{"class":257},[240,63347,63348,63350,63352],{"class":242,"line":18880},[240,63349,53715],{"class":257},[240,63351,53751],{"class":253},[240,63353,447],{"class":257},[240,63355,63356,63358,63360],{"class":242,"line":34579},[240,63357,592],{"class":257},[240,63359,53738],{"class":253},[240,63361,447],{"class":257},[240,63363,63364],{"class":242,"line":34585},[240,63365,4353],{"emptyLinePlaceholder":2051},[240,63367,63368,63370,63372],{"class":242,"line":34591},[240,63369,592],{"class":257},[240,63371,52581],{"class":253},[240,63373,447],{"class":257},[23945,63375,63377],{"id":63376},"_3253-键盘事件","3.2.5.3 键盘事件",[19,63379,63380],{},"评论字数统计案例",[19,63382,63383],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[19,63385,63386],{},"牢记focus伪类选择器",[53288,63388],{"charSet":63389},"UTF-8",[53288,63391],{"name":63392,"content":63393},"viewport","width=device-width, initial-scale=1.0",[53351,63395,63396],{},"Document",[2019,63398,63399],{},"\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",[55756,63401],{"type":7139},[3100,63403,63404,63407],{},[1829,63405,63406],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[1829,63408,63409],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[231,63411,63413],{"className":52579,"code":63412,"language":52581,"meta":236,"style":236},"\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",[23,63414,63415,63425,63439,63443,63451,63465,63485,63505,63518,63526,63533,63546,63560,63570,63580,63584,63588,63595,63607,63619,63631,63643,63670,63683,63687,63691,63700,63711,63723,63734,63745,63757,63768,63780,63796,63808,63812,63816,63827,63838,63848,63860,63864,63868,63876,63887,63897,63908,63920,63933,63945,63957,63961,63965,63974,63986,63997,64010,64021,64035,64039,64043,64050,64062,64074,64084,64088,64092,64101,64113,64123,64127,64131,64142,64152,64171,64184,64188,64192,64202,64212,64216,64220,64231,64242,64254,64266,64270,64274,64285,64295,64309,64313,64317,64328,64338,64350,64354,64362,64370,64374,64382,64397,64416,64456,64469,64477,64491,64511,64519,64534,64557,64575,64590,64610,64630,64650,64658,64666,64674,64682,64702,64722,64727,64744,64753,64757,64762,64778,64786,64790,64795,64812,64817,64842,64846,64850,64855,64860,64868,64876,64880],{"__ignoreMap":236},[240,63416,63417,63419,63421,63423],{"class":242,"line":243},[240,63418,53243],{"class":257},[240,63420,53246],{"class":253},[240,63422,53249],{"class":436},[240,63424,447],{"class":257},[240,63426,63427,63429,63431,63433,63435,63437],{"class":242,"line":250},[240,63428,431],{"class":257},[240,63430,52581],{"class":253},[240,63432,53260],{"class":436},[240,63434,440],{"class":257},[240,63436,53265],{"class":443},[240,63438,447],{"class":257},[240,63440,63441],{"class":242,"line":261},[240,63442,4353],{"emptyLinePlaceholder":2051},[240,63444,63445,63447,63449],{"class":242,"line":277},[240,63446,431],{"class":257},[240,63448,53278],{"class":253},[240,63450,447],{"class":257},[240,63452,63453,63455,63457,63459,63461,63463],{"class":242,"line":294},[240,63454,452],{"class":257},[240,63456,53288],{"class":253},[240,63458,53291],{"class":436},[240,63460,440],{"class":257},[240,63462,53296],{"class":443},[240,63464,447],{"class":257},[240,63466,63467,63469,63471,63473,63475,63477,63479,63481,63483],{"class":242,"line":309},[240,63468,452],{"class":257},[240,63470,53288],{"class":253},[240,63472,53307],{"class":436},[240,63474,440],{"class":257},[240,63476,53312],{"class":443},[240,63478,53315],{"class":436},[240,63480,440],{"class":257},[240,63482,53320],{"class":443},[240,63484,447],{"class":257},[240,63486,63487,63489,63491,63493,63495,63497,63499,63501,63503],{"class":242,"line":529},[240,63488,452],{"class":257},[240,63490,53288],{"class":253},[240,63492,16869],{"class":436},[240,63494,440],{"class":257},[240,63496,53335],{"class":443},[240,63498,53315],{"class":436},[240,63500,440],{"class":257},[240,63502,53342],{"class":443},[240,63504,447],{"class":257},[240,63506,63507,63509,63511,63514,63516],{"class":242,"line":549},[240,63508,452],{"class":257},[240,63510,53351],{"class":253},[240,63512,63513],{"class":257},">评论回车发布\u003C\u002F",[240,63515,53351],{"class":253},[240,63517,447],{"class":257},[240,63519,63520,63522,63524],{"class":242,"line":569},[240,63521,452],{"class":257},[240,63523,2019],{"class":253},[240,63525,447],{"class":257},[240,63527,63528,63531],{"class":242,"line":589},[240,63529,63530],{"class":436},"    .wrapper",[240,63532,258],{"class":257},[240,63534,63535,63538,63540,63542,63544],{"class":242,"line":715},[240,63536,63537],{"class":264},"      min-width",[240,63539,268],{"class":257},[240,63541,5939],{"class":264},[240,63543,289],{"class":288},[240,63545,274],{"class":257},[240,63547,63548,63551,63553,63556,63558],{"class":242,"line":727},[240,63549,63550],{"class":264},"      max-width",[240,63552,268],{"class":257},[240,63554,63555],{"class":264},"800",[240,63557,289],{"class":288},[240,63559,274],{"class":257},[240,63561,63562,63564,63566,63568],{"class":242,"line":1730},[240,63563,56943],{"class":264},[240,63565,268],{"class":257},[240,63567,53420],{"class":264},[240,63569,274],{"class":257},[240,63571,63572,63574,63576,63578],{"class":242,"line":3582},[240,63573,56954],{"class":264},[240,63575,268],{"class":257},[240,63577,53522],{"class":264},[240,63579,274],{"class":257},[240,63581,63582],{"class":242,"line":3596},[240,63583,4140],{"class":257},[240,63585,63586],{"class":242,"line":3601},[240,63587,4353],{"emptyLinePlaceholder":2051},[240,63589,63590,63593],{"class":242,"line":3607},[240,63591,63592],{"class":436},"    .avatar",[240,63594,258],{"class":257},[240,63596,63597,63599,63601,63603,63605],{"class":242,"line":3628},[240,63598,56705],{"class":264},[240,63600,268],{"class":257},[240,63602,2706],{"class":264},[240,63604,289],{"class":288},[240,63606,274],{"class":257},[240,63608,63609,63611,63613,63615,63617],{"class":242,"line":3633},[240,63610,56719],{"class":264},[240,63612,268],{"class":257},[240,63614,2706],{"class":264},[240,63616,289],{"class":288},[240,63618,274],{"class":257},[240,63620,63621,63623,63625,63627,63629],{"class":242,"line":3647},[240,63622,57067],{"class":264},[240,63624,268],{"class":257},[240,63626,2754],{"class":264},[240,63628,2429],{"class":288},[240,63630,274],{"class":257},[240,63632,63633,63636,63638,63641],{"class":242,"line":3652},[240,63634,63635],{"class":264},"      overflow",[240,63637,268],{"class":257},[240,63639,63640],{"class":264},"hidden",[240,63642,274],{"class":257},[240,63644,63645,63648,63650,63652,63654,63657,63659,63661,63663,63665,63668],{"class":242,"line":3681},[240,63646,63647],{"class":264},"      background",[240,63649,268],{"class":257},[240,63651,786],{"class":264},[240,63653,789],{"class":257},[240,63655,63656],{"class":792},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[240,63658,1230],{"class":257},[240,63660,892],{"class":264},[240,63662,1037],{"class":264},[240,63664,26925],{"class":257},[240,63666,63667],{"class":264},"cover",[240,63669,274],{"class":257},[240,63671,63672,63675,63677,63679,63681],{"class":242,"line":3686},[240,63673,63674],{"class":264},"      margin-right",[240,63676,268],{"class":257},[240,63678,1000],{"class":264},[240,63680,289],{"class":288},[240,63682,274],{"class":257},[240,63684,63685],{"class":242,"line":3703},[240,63686,4140],{"class":257},[240,63688,63689],{"class":242,"line":3708},[240,63690,4353],{"emptyLinePlaceholder":2051},[240,63692,63693,63695,63698],{"class":242,"line":3713},[240,63694,63530],{"class":436},[240,63696,63697],{"class":253}," textarea",[240,63699,258],{"class":257},[240,63701,63702,63705,63707,63709],{"class":242,"line":3718},[240,63703,63704],{"class":264},"      outline",[240,63706,268],{"class":257},[240,63708,826],{"class":264},[240,63710,274],{"class":257},[240,63712,63713,63716,63718,63721],{"class":242,"line":3732},[240,63714,63715],{"class":264},"      border-color",[240,63717,268],{"class":257},[240,63719,63720],{"class":264},"transparent",[240,63722,274],{"class":257},[240,63724,63725,63728,63730,63732],{"class":242,"line":3737},[240,63726,63727],{"class":264},"      resize",[240,63729,268],{"class":257},[240,63731,826],{"class":264},[240,63733,274],{"class":257},[240,63735,63736,63738,63740,63743],{"class":242,"line":4530},[240,63737,63647],{"class":264},[240,63739,268],{"class":257},[240,63741,63742],{"class":264},"#f5f5f5",[240,63744,274],{"class":257},[240,63746,63747,63749,63751,63753,63755],{"class":242,"line":4544},[240,63748,57067],{"class":264},[240,63750,268],{"class":257},[240,63752,1716],{"class":264},[240,63754,289],{"class":288},[240,63756,274],{"class":257},[240,63758,63759,63762,63764,63766],{"class":242,"line":4552},[240,63760,63761],{"class":264},"      flex",[240,63763,268],{"class":257},[240,63765,1643],{"class":264},[240,63767,274],{"class":257},[240,63769,63770,63772,63774,63776,63778],{"class":242,"line":4557},[240,63771,56630],{"class":264},[240,63773,268],{"class":257},[240,63775,2546],{"class":264},[240,63777,289],{"class":288},[240,63779,274],{"class":257},[240,63781,63782,63785,63787,63789,63792,63794],{"class":242,"line":4563},[240,63783,63784],{"class":264},"      transition",[240,63786,268],{"class":257},[240,63788,30067],{"class":264},[240,63790,63791],{"class":264}," 0.5",[240,63793,2793],{"class":288},[240,63795,274],{"class":257},[240,63797,63798,63800,63802,63804,63806],{"class":242,"line":4569},[240,63799,56719],{"class":264},[240,63801,268],{"class":257},[240,63803,399],{"class":264},[240,63805,289],{"class":288},[240,63807,274],{"class":257},[240,63809,63810],{"class":242,"line":4574},[240,63811,4140],{"class":257},[240,63813,63814],{"class":242,"line":9899},[240,63815,4353],{"emptyLinePlaceholder":2051},[240,63817,63818,63820,63822,63825],{"class":242,"line":9923},[240,63819,63530],{"class":436},[240,63821,63697],{"class":253},[240,63823,63824],{"class":436},":focus",[240,63826,258],{"class":257},[240,63828,63829,63831,63833,63836],{"class":242,"line":9928},[240,63830,63715],{"class":264},[240,63832,268],{"class":257},[240,63834,63835],{"class":264},"#e4e4e4",[240,63837,274],{"class":257},[240,63839,63840,63842,63844,63846],{"class":242,"line":9934},[240,63841,63647],{"class":264},[240,63843,268],{"class":257},[240,63845,683],{"class":264},[240,63847,274],{"class":257},[240,63849,63850,63852,63854,63856,63858],{"class":242,"line":9961},[240,63851,56719],{"class":264},[240,63853,268],{"class":257},[240,63855,2754],{"class":264},[240,63857,289],{"class":288},[240,63859,274],{"class":257},[240,63861,63862],{"class":242,"line":9966},[240,63863,4140],{"class":257},[240,63865,63866],{"class":242,"line":9972},[240,63867,4353],{"emptyLinePlaceholder":2051},[240,63869,63870,63872,63874],{"class":242,"line":9984},[240,63871,63530],{"class":436},[240,63873,59399],{"class":253},[240,63875,258],{"class":257},[240,63877,63878,63880,63882,63885],{"class":242,"line":9996},[240,63879,63647],{"class":264},[240,63881,268],{"class":257},[240,63883,63884],{"class":264},"#00aeec",[240,63886,274],{"class":257},[240,63888,63889,63891,63893,63895],{"class":242,"line":10008},[240,63890,59349],{"class":264},[240,63892,268],{"class":257},[240,63894,683],{"class":264},[240,63896,274],{"class":257},[240,63898,63899,63902,63904,63906],{"class":242,"line":11667},[240,63900,63901],{"class":264},"      border",[240,63903,268],{"class":257},[240,63905,826],{"class":264},[240,63907,274],{"class":257},[240,63909,63910,63912,63914,63916,63918],{"class":242,"line":11692},[240,63911,57067],{"class":264},[240,63913,268],{"class":257},[240,63915,1716],{"class":264},[240,63917,289],{"class":288},[240,63919,274],{"class":257},[240,63921,63922,63925,63927,63929,63931],{"class":242,"line":11715},[240,63923,63924],{"class":264},"      margin-left",[240,63926,268],{"class":257},[240,63928,2546],{"class":264},[240,63930,289],{"class":288},[240,63932,274],{"class":257},[240,63934,63935,63937,63939,63941,63943],{"class":242,"line":11739},[240,63936,56705],{"class":264},[240,63938,268],{"class":257},[240,63940,2457],{"class":264},[240,63942,289],{"class":288},[240,63944,274],{"class":257},[240,63946,63947,63950,63952,63955],{"class":242,"line":11744},[240,63948,63949],{"class":264},"      cursor",[240,63951,268],{"class":257},[240,63953,63954],{"class":264},"pointer",[240,63956,274],{"class":257},[240,63958,63959],{"class":242,"line":11749},[240,63960,4140],{"class":257},[240,63962,63963],{"class":242,"line":11754},[240,63964,4353],{"emptyLinePlaceholder":2051},[240,63966,63967,63969,63972],{"class":242,"line":11763},[240,63968,63530],{"class":436},[240,63970,63971],{"class":436}," .total",[240,63973,258],{"class":257},[240,63975,63976,63978,63980,63982,63984],{"class":242,"line":11768},[240,63977,63674],{"class":264},[240,63979,268],{"class":257},[240,63981,386],{"class":264},[240,63983,289],{"class":288},[240,63985,274],{"class":257},[240,63987,63988,63990,63992,63995],{"class":242,"line":11774},[240,63989,59349],{"class":264},[240,63991,268],{"class":257},[240,63993,63994],{"class":264},"#999",[240,63996,274],{"class":257},[240,63998,63999,64002,64004,64006,64008],{"class":242,"line":11795},[240,64000,64001],{"class":264},"      margin-top",[240,64003,268],{"class":257},[240,64005,1741],{"class":264},[240,64007,289],{"class":288},[240,64009,274],{"class":257},[240,64011,64012,64015,64017,64019],{"class":242,"line":11801},[240,64013,64014],{"class":264},"      opacity",[240,64016,268],{"class":257},[240,64018,1274],{"class":264},[240,64020,274],{"class":257},[240,64022,64023,64025,64027,64029,64031,64033],{"class":242,"line":11815},[240,64024,63784],{"class":264},[240,64026,268],{"class":257},[240,64028,30067],{"class":264},[240,64030,63791],{"class":264},[240,64032,2793],{"class":288},[240,64034,274],{"class":257},[240,64036,64037],{"class":242,"line":11821},[240,64038,4140],{"class":257},[240,64040,64041],{"class":242,"line":11848},[240,64042,4353],{"emptyLinePlaceholder":2051},[240,64044,64045,64048],{"class":242,"line":11857},[240,64046,64047],{"class":436},"    .list",[240,64049,258],{"class":257},[240,64051,64052,64054,64056,64058,64060],{"class":242,"line":11863},[240,64053,63537],{"class":264},[240,64055,268],{"class":257},[240,64057,5939],{"class":264},[240,64059,289],{"class":288},[240,64061,274],{"class":257},[240,64063,64064,64066,64068,64070,64072],{"class":242,"line":11871},[240,64065,63550],{"class":264},[240,64067,268],{"class":257},[240,64069,63555],{"class":264},[240,64071,289],{"class":288},[240,64073,274],{"class":257},[240,64075,64076,64078,64080,64082],{"class":242,"line":11876},[240,64077,56943],{"class":264},[240,64079,268],{"class":257},[240,64081,53420],{"class":264},[240,64083,274],{"class":257},[240,64085,64086],{"class":242,"line":18552},[240,64087,4140],{"class":257},[240,64089,64090],{"class":242,"line":18558},[240,64091,4353],{"emptyLinePlaceholder":2051},[240,64093,64094,64096,64099],{"class":242,"line":18581},[240,64095,64047],{"class":436},[240,64097,64098],{"class":436}," .item",[240,64100,258],{"class":257},[240,64102,64103,64105,64107,64109,64111],{"class":242,"line":18587},[240,64104,56705],{"class":264},[240,64106,268],{"class":257},[240,64108,285],{"class":264},[240,64110,2429],{"class":288},[240,64112,274],{"class":257},[240,64114,64115,64117,64119,64121],{"class":242,"line":18610},[240,64116,56943],{"class":264},[240,64118,268],{"class":257},[240,64120,53420],{"class":264},[240,64122,274],{"class":257},[240,64124,64125],{"class":242,"line":18624},[240,64126,4140],{"class":257},[240,64128,64129],{"class":242,"line":18644},[240,64130,4353],{"emptyLinePlaceholder":2051},[240,64132,64133,64135,64137,64140],{"class":242,"line":18650},[240,64134,64047],{"class":436},[240,64136,64098],{"class":436},[240,64138,64139],{"class":436}," .info",[240,64141,258],{"class":257},[240,64143,64144,64146,64148,64150],{"class":242,"line":18661},[240,64145,63761],{"class":264},[240,64147,268],{"class":257},[240,64149,1643],{"class":264},[240,64151,274],{"class":257},[240,64153,64154,64157,64159,64161,64163,64166,64169],{"class":242,"line":18684},[240,64155,64156],{"class":264},"      border-bottom",[240,64158,268],{"class":257},[240,64160,1643],{"class":264},[240,64162,289],{"class":288},[240,64164,64165],{"class":264}," dashed",[240,64167,64168],{"class":264}," #e4e4e4",[240,64170,274],{"class":257},[240,64172,64173,64176,64178,64180,64182],{"class":242,"line":18706},[240,64174,64175],{"class":264},"      padding-bottom",[240,64177,268],{"class":257},[240,64179,2546],{"class":264},[240,64181,289],{"class":288},[240,64183,274],{"class":257},[240,64185,64186],{"class":242,"line":18711},[240,64187,4140],{"class":257},[240,64189,64190],{"class":242,"line":18717},[240,64191,4353],{"emptyLinePlaceholder":2051},[240,64193,64194,64196,64198,64200],{"class":242,"line":18731},[240,64195,64047],{"class":436},[240,64197,64098],{"class":436},[240,64199,8776],{"class":253},[240,64201,258],{"class":257},[240,64203,64204,64206,64208,64210],{"class":242,"line":18744},[240,64205,56641],{"class":264},[240,64207,268],{"class":257},[240,64209,1274],{"class":264},[240,64211,274],{"class":257},[240,64213,64214],{"class":242,"line":18749},[240,64215,4140],{"class":257},[240,64217,64218],{"class":242,"line":18763},[240,64219,4353],{"emptyLinePlaceholder":2051},[240,64221,64222,64224,64226,64229],{"class":242,"line":18768},[240,64223,64047],{"class":436},[240,64225,64098],{"class":436},[240,64227,64228],{"class":436}," .name",[240,64230,258],{"class":257},[240,64232,64233,64235,64237,64240],{"class":242,"line":18774},[240,64234,59349],{"class":264},[240,64236,268],{"class":257},[240,64238,64239],{"class":264},"#FB7299",[240,64241,274],{"class":257},[240,64243,64244,64246,64248,64250,64252],{"class":242,"line":18779},[240,64245,56856],{"class":264},[240,64247,268],{"class":257},[240,64249,2648],{"class":264},[240,64251,289],{"class":288},[240,64253,274],{"class":257},[240,64255,64256,64259,64261,64264],{"class":242,"line":18793},[240,64257,64258],{"class":264},"      font-weight",[240,64260,268],{"class":257},[240,64262,64263],{"class":264},"bold",[240,64265,274],{"class":257},[240,64267,64268],{"class":242,"line":18798},[240,64269,4140],{"class":257},[240,64271,64272],{"class":242,"line":18803},[240,64273,4353],{"emptyLinePlaceholder":2051},[240,64275,64276,64278,64280,64283],{"class":242,"line":18817},[240,64277,64047],{"class":436},[240,64279,64098],{"class":436},[240,64281,64282],{"class":436}," .text",[240,64284,258],{"class":257},[240,64286,64287,64289,64291,64293],{"class":242,"line":18829},[240,64288,59349],{"class":264},[240,64290,268],{"class":257},[240,64292,1799],{"class":264},[240,64294,274],{"class":257},[240,64296,64297,64299,64301,64303,64305,64307],{"class":242,"line":18834},[240,64298,56630],{"class":264},[240,64300,268],{"class":257},[240,64302,2546],{"class":264},[240,64304,289],{"class":288},[240,64306,6045],{"class":264},[240,64308,274],{"class":257},[240,64310,64311],{"class":242,"line":18847},[240,64312,4140],{"class":257},[240,64314,64315],{"class":242,"line":18852},[240,64316,4353],{"emptyLinePlaceholder":2051},[240,64318,64319,64321,64323,64326],{"class":242,"line":18857},[240,64320,64047],{"class":436},[240,64322,64098],{"class":436},[240,64324,64325],{"class":436}," .time",[240,64327,258],{"class":257},[240,64329,64330,64332,64334,64336],{"class":242,"line":18862},[240,64331,59349],{"class":264},[240,64333,268],{"class":257},[240,64335,63994],{"class":264},[240,64337,274],{"class":257},[240,64339,64340,64342,64344,64346,64348],{"class":242,"line":18875},[240,64341,56856],{"class":264},[240,64343,268],{"class":257},[240,64345,2597],{"class":264},[240,64347,289],{"class":288},[240,64349,274],{"class":257},[240,64351,64352],{"class":242,"line":18880},[240,64353,4140],{"class":257},[240,64355,64356,64358,64360],{"class":242,"line":34579},[240,64357,54353],{"class":257},[240,64359,2019],{"class":253},[240,64361,447],{"class":257},[240,64363,64364,64366,64368],{"class":242,"line":34585},[240,64365,592],{"class":257},[240,64367,53278],{"class":253},[240,64369,447],{"class":257},[240,64371,64372],{"class":242,"line":34591},[240,64373,4353],{"emptyLinePlaceholder":2051},[240,64375,64376,64378,64380],{"class":242,"line":34597},[240,64377,431],{"class":257},[240,64379,53738],{"class":253},[240,64381,447],{"class":257},[240,64383,64384,64386,64388,64390,64392,64395],{"class":242,"line":34603},[240,64385,452],{"class":257},[240,64387,330],{"class":253},[240,64389,437],{"class":436},[240,64391,440],{"class":257},[240,64393,64394],{"class":443},"\"wrapper\"",[240,64396,447],{"class":257},[240,64398,64399,64401,64403,64405,64407,64410,64412,64414],{"class":242,"line":34614},[240,64400,53285],{"class":257},[240,64402,2541],{"class":253},[240,64404,437],{"class":436},[240,64406,440],{"class":257},[240,64408,64409],{"class":443},"\"avatar\"",[240,64411,57247],{"class":257},[240,64413,2541],{"class":253},[240,64415,447],{"class":257},[240,64417,64418,64420,64422,64424,64426,64429,64431,64433,64436,64438,64440,64442,64445,64447,64450,64452,64454],{"class":242,"line":34620},[240,64419,53285],{"class":257},[240,64421,56223],{"class":253},[240,64423,16908],{"class":436},[240,64425,440],{"class":257},[240,64427,64428],{"class":443},"\"tx\"",[240,64430,62948],{"class":436},[240,64432,440],{"class":257},[240,64434,64435],{"class":443},"\"发一条友善的评论\"",[240,64437,56246],{"class":436},[240,64439,440],{"class":257},[240,64441,5653],{"class":443},[240,64443,64444],{"class":436}," maxlength",[240,64446,440],{"class":257},[240,64448,64449],{"class":443},"\"200\"",[240,64451,57247],{"class":257},[240,64453,56223],{"class":253},[240,64455,447],{"class":257},[240,64457,64458,64460,64462,64465,64467],{"class":242,"line":34640},[240,64459,53285],{"class":257},[240,64461,55822],{"class":253},[240,64463,64464],{"class":257},">发布\u003C\u002F",[240,64466,55822],{"class":253},[240,64468,447],{"class":257},[240,64470,64471,64473,64475],{"class":242,"line":34646},[240,64472,54353],{"class":257},[240,64474,330],{"class":253},[240,64476,447],{"class":257},[240,64478,64479,64481,64483,64485,64487,64489],{"class":242,"line":34657},[240,64480,452],{"class":257},[240,64482,330],{"class":253},[240,64484,437],{"class":436},[240,64486,440],{"class":257},[240,64488,64394],{"class":443},[240,64490,447],{"class":257},[240,64492,64493,64495,64497,64499,64501,64504,64507,64509],{"class":242,"line":34663},[240,64494,53285],{"class":257},[240,64496,240],{"class":253},[240,64498,437],{"class":436},[240,64500,440],{"class":257},[240,64502,64503],{"class":443},"\"total\"",[240,64505,64506],{"class":257},">0\u002F200字\u003C\u002F",[240,64508,240],{"class":253},[240,64510,447],{"class":257},[240,64512,64513,64515,64517],{"class":242,"line":34669},[240,64514,54353],{"class":257},[240,64516,330],{"class":253},[240,64518,447],{"class":257},[240,64520,64521,64523,64525,64527,64529,64532],{"class":242,"line":34675},[240,64522,452],{"class":257},[240,64524,330],{"class":253},[240,64526,437],{"class":436},[240,64528,440],{"class":257},[240,64530,64531],{"class":443},"\"list\"",[240,64533,447],{"class":257},[240,64535,64536,64538,64540,64542,64544,64547,64550,64552,64555],{"class":242,"line":34681},[240,64537,53285],{"class":257},[240,64539,330],{"class":253},[240,64541,437],{"class":436},[240,64543,440],{"class":257},[240,64545,64546],{"class":443},"\"item\"",[240,64548,64549],{"class":436}," style",[240,64551,440],{"class":257},[240,64553,64554],{"class":443},"\"display: none;\"",[240,64556,447],{"class":257},[240,64558,64559,64561,64563,64565,64567,64569,64571,64573],{"class":242,"line":34687},[240,64560,57167],{"class":257},[240,64562,2541],{"class":253},[240,64564,437],{"class":436},[240,64566,440],{"class":257},[240,64568,64409],{"class":443},[240,64570,57247],{"class":257},[240,64572,2541],{"class":253},[240,64574,447],{"class":257},[240,64576,64577,64579,64581,64583,64585,64588],{"class":242,"line":34693},[240,64578,57167],{"class":257},[240,64580,330],{"class":253},[240,64582,437],{"class":436},[240,64584,440],{"class":257},[240,64586,64587],{"class":443},"\"info\"",[240,64589,447],{"class":257},[240,64591,64592,64594,64596,64598,64600,64603,64606,64608],{"class":242,"line":34699},[240,64593,57235],{"class":257},[240,64595,19],{"class":253},[240,64597,437],{"class":436},[240,64599,440],{"class":257},[240,64601,64602],{"class":443},"\"name\"",[240,64604,64605],{"class":257},">清风徐来\u003C\u002F",[240,64607,19],{"class":253},[240,64609,447],{"class":257},[240,64611,64612,64614,64616,64618,64620,64623,64626,64628],{"class":242,"line":34719},[240,64613,57235],{"class":257},[240,64615,19],{"class":253},[240,64617,437],{"class":436},[240,64619,440],{"class":257},[240,64621,64622],{"class":443},"\"text\"",[240,64624,64625],{"class":257},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[240,64627,19],{"class":253},[240,64629,447],{"class":257},[240,64631,64632,64634,64636,64638,64640,64643,64646,64648],{"class":242,"line":34725},[240,64633,57235],{"class":257},[240,64635,19],{"class":253},[240,64637,437],{"class":436},[240,64639,440],{"class":257},[240,64641,64642],{"class":443},"\"time\"",[240,64644,64645],{"class":257},">2022-10-10 20:29:21\u003C\u002F",[240,64647,19],{"class":253},[240,64649,447],{"class":257},[240,64651,64652,64654,64656],{"class":242,"line":34741},[240,64653,57340],{"class":257},[240,64655,330],{"class":253},[240,64657,447],{"class":257},[240,64659,64660,64662,64664],{"class":242,"line":34747},[240,64661,53715],{"class":257},[240,64663,330],{"class":253},[240,64665,447],{"class":257},[240,64667,64668,64670,64672],{"class":242,"line":34761},[240,64669,54353],{"class":257},[240,64671,330],{"class":253},[240,64673,447],{"class":257},[240,64675,64676,64678,64680],{"class":242,"line":34767},[240,64677,452],{"class":257},[240,64679,53751],{"class":253},[240,64681,447],{"class":257},[240,64683,64684,64686,64689,64691,64693,64695,64697,64700],{"class":242,"line":34782},[240,64685,13172],{"class":288},[240,64687,64688],{"class":264}," tx",[240,64690,15514],{"class":288},[240,64692,56331],{"class":257},[240,64694,56334],{"class":436},[240,64696,789],{"class":257},[240,64698,64699],{"class":443},"'#tx'",[240,64701,2129],{"class":257},[240,64703,64704,64706,64709,64711,64713,64715,64717,64720],{"class":242,"line":34788},[240,64705,13172],{"class":288},[240,64707,64708],{"class":264}," total",[240,64710,15514],{"class":288},[240,64712,56331],{"class":257},[240,64714,56334],{"class":436},[240,64716,789],{"class":257},[240,64718,64719],{"class":443},"'.total'",[240,64721,2129],{"class":257},[240,64723,64724],{"class":242,"line":34797},[240,64725,64726],{"class":246},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[240,64728,64729,64732,64734,64736,64738,64740,64742],{"class":242,"line":34803},[240,64730,64731],{"class":257},"    tx.",[240,64733,59744],{"class":436},[240,64735,789],{"class":257},[240,64737,63253],{"class":443},[240,64739,1277],{"class":257},[240,64741,56384],{"class":288},[240,64743,56387],{"class":257},[240,64745,64746,64749,64751],{"class":242,"line":34812},[240,64747,64748],{"class":257},"      total.style.opacity ",[240,64750,440],{"class":288},[240,64752,57632],{"class":264},[240,64754,64755],{"class":242,"line":34818},[240,64756,35407],{"class":257},[240,64758,64759],{"class":242,"line":34824},[240,64760,64761],{"class":246},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[240,64763,64764,64766,64768,64770,64772,64774,64776],{"class":242,"line":34833},[240,64765,64731],{"class":257},[240,64767,59744],{"class":436},[240,64769,789],{"class":257},[240,64771,63314],{"class":443},[240,64773,1277],{"class":257},[240,64775,56384],{"class":288},[240,64777,56387],{"class":257},[240,64779,64780,64782,64784],{"class":242,"line":34839},[240,64781,64748],{"class":257},[240,64783,440],{"class":288},[240,64785,49279],{"class":264},[240,64787,64788],{"class":242,"line":34850},[240,64789,35407],{"class":257},[240,64791,64792],{"class":242,"line":34856},[240,64793,64794],{"class":246},"    \u002F\u002F 3. 检测用户输入\n",[240,64796,64797,64799,64801,64803,64806,64808,64810],{"class":242,"line":34875},[240,64798,64731],{"class":257},[240,64800,59744],{"class":436},[240,64802,789],{"class":257},[240,64804,64805],{"class":443},"'input'",[240,64807,1277],{"class":257},[240,64809,56384],{"class":288},[240,64811,56387],{"class":257},[240,64813,64814],{"class":242,"line":34881},[240,64815,64816],{"class":246},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[240,64818,64819,64822,64824,64827,64830,64832,64835,64837,64839],{"class":242,"line":34892},[240,64820,64821],{"class":257},"      total.innerHTML ",[240,64823,440],{"class":288},[240,64825,64826],{"class":443}," `${",[240,64828,64829],{"class":257},"tx",[240,64831,2657],{"class":443},[240,64833,64834],{"class":257},"value",[240,64836,2657],{"class":443},[240,64838,1064],{"class":264},[240,64840,64841],{"class":443},"}\u002F200字`\n",[240,64843,64844],{"class":242,"line":34898},[240,64845,35407],{"class":257},[240,64847,64848],{"class":242,"line":34918},[240,64849,4353],{"emptyLinePlaceholder":2051},[240,64851,64852],{"class":242,"line":34934},[240,64853,64854],{"class":246},"    \u002F\u002F const str = 'andy'\n",[240,64856,64857],{"class":242,"line":34940},[240,64858,64859],{"class":246},"    \u002F\u002F console.log(str.length)\n",[240,64861,64862,64864,64866],{"class":242,"line":34954},[240,64863,54353],{"class":257},[240,64865,53751],{"class":253},[240,64867,447],{"class":257},[240,64869,64870,64872,64874],{"class":242,"line":34960},[240,64871,592],{"class":257},[240,64873,53738],{"class":253},[240,64875,447],{"class":257},[240,64877,64878],{"class":242,"line":34966},[240,64879,4353],{"emptyLinePlaceholder":2051},[240,64881,64882,64884,64886],{"class":242,"line":34977},[240,64883,592],{"class":257},[240,64885,52581],{"class":253},[240,64887,447],{"class":257},[23945,64889,64891],{"id":64890},"_3254-change事件","3.2.5.4 change事件",[19,64893,64894],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[19,64896,64897],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[19,64899,64900],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[231,64902,64904],{"className":52579,"code":64903,"language":52581,"meta":236,"style":236},"\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",[23,64905,64906,64916,64930,64934,64942,64956,64976,64988,64996,65000,65008,65022,65030,65048,65066,65078,65082,65090,65098,65102],{"__ignoreMap":236},[240,64907,64908,64910,64912,64914],{"class":242,"line":243},[240,64909,53243],{"class":257},[240,64911,53246],{"class":253},[240,64913,53249],{"class":436},[240,64915,447],{"class":257},[240,64917,64918,64920,64922,64924,64926,64928],{"class":242,"line":250},[240,64919,431],{"class":257},[240,64921,52581],{"class":253},[240,64923,53260],{"class":436},[240,64925,440],{"class":257},[240,64927,53265],{"class":443},[240,64929,447],{"class":257},[240,64931,64932],{"class":242,"line":261},[240,64933,4353],{"emptyLinePlaceholder":2051},[240,64935,64936,64938,64940],{"class":242,"line":277},[240,64937,431],{"class":257},[240,64939,53278],{"class":253},[240,64941,447],{"class":257},[240,64943,64944,64946,64948,64950,64952,64954],{"class":242,"line":294},[240,64945,452],{"class":257},[240,64947,53288],{"class":253},[240,64949,53291],{"class":436},[240,64951,440],{"class":257},[240,64953,53296],{"class":443},[240,64955,447],{"class":257},[240,64957,64958,64960,64962,64964,64966,64968,64970,64972,64974],{"class":242,"line":309},[240,64959,452],{"class":257},[240,64961,53288],{"class":253},[240,64963,16869],{"class":436},[240,64965,440],{"class":257},[240,64967,53335],{"class":443},[240,64969,53315],{"class":436},[240,64971,440],{"class":257},[240,64973,53342],{"class":443},[240,64975,447],{"class":257},[240,64977,64978,64980,64982,64984,64986],{"class":242,"line":529},[240,64979,452],{"class":257},[240,64981,53351],{"class":253},[240,64983,53354],{"class":257},[240,64985,53351],{"class":253},[240,64987,447],{"class":257},[240,64989,64990,64992,64994],{"class":242,"line":549},[240,64991,592],{"class":257},[240,64993,53278],{"class":253},[240,64995,447],{"class":257},[240,64997,64998],{"class":242,"line":569},[240,64999,4353],{"emptyLinePlaceholder":2051},[240,65001,65002,65004,65006],{"class":242,"line":589},[240,65003,431],{"class":257},[240,65005,53738],{"class":253},[240,65007,447],{"class":257},[240,65009,65010,65012,65014,65016,65018,65020],{"class":242,"line":715},[240,65011,452],{"class":257},[240,65013,55756],{"class":253},[240,65015,55759],{"class":436},[240,65017,440],{"class":257},[240,65019,64622],{"class":443},[240,65021,447],{"class":257},[240,65023,65024,65026,65028],{"class":242,"line":727},[240,65025,452],{"class":257},[240,65027,53751],{"class":253},[240,65029,447],{"class":257},[240,65031,65032,65034,65036,65038,65040,65042,65044,65046],{"class":242,"line":1730},[240,65033,13172],{"class":288},[240,65035,62536],{"class":264},[240,65037,15514],{"class":288},[240,65039,56331],{"class":257},[240,65041,56334],{"class":436},[240,65043,789],{"class":257},[240,65045,64805],{"class":443},[240,65047,2129],{"class":257},[240,65049,65050,65053,65055,65057,65060,65062,65064],{"class":242,"line":3582},[240,65051,65052],{"class":257},"    input.",[240,65054,59744],{"class":436},[240,65056,789],{"class":257},[240,65058,65059],{"class":443},"'change'",[240,65061,1277],{"class":257},[240,65063,56384],{"class":288},[240,65065,56387],{"class":257},[240,65067,65068,65070,65072,65074,65076],{"class":242,"line":3596},[240,65069,60175],{"class":257},[240,65071,60178],{"class":436},[240,65073,789],{"class":257},[240,65075,2692],{"class":264},[240,65077,2129],{"class":257},[240,65079,65080],{"class":242,"line":3601},[240,65081,35407],{"class":257},[240,65083,65084,65086,65088],{"class":242,"line":3607},[240,65085,54353],{"class":257},[240,65087,53751],{"class":253},[240,65089,447],{"class":257},[240,65091,65092,65094,65096],{"class":242,"line":3628},[240,65093,592],{"class":257},[240,65095,53738],{"class":253},[240,65097,447],{"class":257},[240,65099,65100],{"class":242,"line":3633},[240,65101,4353],{"emptyLinePlaceholder":2051},[240,65103,65104,65106,65108],{"class":242,"line":3647},[240,65105,592],{"class":257},[240,65107,52581],{"class":253},[240,65109,447],{"class":257},[19,65111,65112],{},"总结：内容发生改变才回去触发",[32,65114,65116],{"id":65115},"_326-事件对象","3.2.6 事件对象",[23945,65118,65120],{"id":65119},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[19,65122,65123],{},[219,65124],{"alt":236,"src":65125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[19,65127,65128],{},[219,65129],{"alt":236,"src":65130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[19,65132,65133],{},"点击一次，就输出了事件对象，它是个对象",[19,65135,65136],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[19,65138,65139],{},[219,65140],{"alt":236,"src":65141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[23945,65143,65145],{"id":65144},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[19,65147,65148],{},[219,65149],{"alt":236,"src":65150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[19,65152,65153],{},"实现按特殊字符才是实现打印输出效果：",[231,65155,65157],{"className":55003,"code":65156,"language":55005,"meta":236,"style":236},"\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",[23,65158,65159,65167,65172,65186,65194,65199,65204,65209,65214,65219,65224,65229,65234,65239,65243,65247,65255],{"__ignoreMap":236},[240,65160,65161,65163,65165],{"class":242,"line":243},[240,65162,431],{"class":257},[240,65164,53738],{"class":253},[240,65166,447],{"class":257},[240,65168,65169],{"class":242,"line":250},[240,65170,65171],{"class":246},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[240,65173,65174,65176,65178,65180,65182,65184],{"class":242,"line":261},[240,65175,452],{"class":257},[240,65177,55756],{"class":253},[240,65179,55759],{"class":436},[240,65181,440],{"class":257},[240,65183,64622],{"class":443},[240,65185,447],{"class":257},[240,65187,65188,65190,65192],{"class":242,"line":277},[240,65189,452],{"class":257},[240,65191,53751],{"class":253},[240,65193,447],{"class":257},[240,65195,65196],{"class":242,"line":294},[240,65197,65198],{"class":257},"    \u002F\u002F const btn = document.querySelector('button')\n",[240,65200,65201],{"class":242,"line":309},[240,65202,65203],{"class":257},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[240,65205,65206],{"class":242,"line":529},[240,65207,65208],{"class":257},"    \u002F\u002F   console.log(e);\n",[240,65210,65211],{"class":242,"line":549},[240,65212,65213],{"class":257},"    \u002F\u002F })\n",[240,65215,65216],{"class":242,"line":569},[240,65217,65218],{"class":257},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[240,65220,65221],{"class":242,"line":589},[240,65222,65223],{"class":257},"    const input = document.querySelector('input')\n",[240,65225,65226],{"class":242,"line":715},[240,65227,65228],{"class":257},"    input.addEventListener('keyup', function (e) {\n",[240,65230,65231],{"class":242,"line":727},[240,65232,65233],{"class":257},"      if (e.key === 'Enter') {\n",[240,65235,65236],{"class":242,"line":1730},[240,65237,65238],{"class":257},"        console.log('我按下了回车键')\n",[240,65240,65241],{"class":242,"line":3582},[240,65242,54334],{"class":257},[240,65244,65245],{"class":242,"line":3596},[240,65246,35407],{"class":257},[240,65248,65249,65251,65253],{"class":242,"line":3601},[240,65250,54353],{"class":257},[240,65252,53751],{"class":253},[240,65254,447],{"class":257},[240,65256,65257,65259,65261],{"class":242,"line":3607},[240,65258,592],{"class":257},[240,65260,53738],{"class":253},[240,65262,447],{"class":257},[23945,65264,65266],{"id":65265},"_3263-trim方法","3.2.6.3 trim方法",[19,65268,65269],{},[219,65270],{"alt":236,"src":65271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[19,65273,65274],{},[219,65275],{"alt":236,"src":65276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[19,65278,65279],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[19,65281,65282],{},"str.trim()",[32,65284,65286],{"id":65285},"_327-环境对象","3.2.7 环境对象",[19,65288,65289],{},[219,65290],{"alt":236,"src":65291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[19,65293,65294],{},[219,65295],{"alt":236,"src":65296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[19,65298,65299],{},[219,65300],{"alt":236,"src":65301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[19,65303,65304],{},"实际函数调用是window.fn()",[19,65306,65307],{},"普通函数里面this指向的是window",[3100,65309,65310,65313,65316],{},[1829,65311,65312],{},"在普通函数下，this指向的是window",[1829,65314,65315],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[1829,65317,65318],{},"箭头函数没有this",[19,65320,65321],{},"粗略记法就是：谁调用，this就指向谁",[19,65323,65324],{},[219,65325],{"alt":236,"src":65326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[19,65328,65329],{},[219,65330],{"alt":236,"src":65331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[19,65333,65334],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[19,65336,65337],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[231,65339,65341],{"className":55003,"code":65340,"language":55005,"meta":236,"style":236},"\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",[23,65342,65343,65351,65363,65371,65376,65381,65386,65391,65395,65403],{"__ignoreMap":236},[240,65344,65345,65347,65349],{"class":242,"line":243},[240,65346,431],{"class":257},[240,65348,53738],{"class":253},[240,65350,447],{"class":257},[240,65352,65353,65355,65357,65359,65361],{"class":242,"line":250},[240,65354,452],{"class":257},[240,65356,55822],{"class":253},[240,65358,55828],{"class":257},[240,65360,55822],{"class":253},[240,65362,447],{"class":257},[240,65364,65365,65367,65369],{"class":242,"line":261},[240,65366,452],{"class":257},[240,65368,53751],{"class":253},[240,65370,447],{"class":257},[240,65372,65373],{"class":242,"line":277},[240,65374,65375],{"class":257},"    const button = document.querySelector('button')\n",[240,65377,65378],{"class":242,"line":294},[240,65379,65380],{"class":257},"    button.addEventListener('click', function () {\n",[240,65382,65383],{"class":242,"line":309},[240,65384,65385],{"class":257},"      \u002F\u002F console.log(this);\n",[240,65387,65388],{"class":242,"line":529},[240,65389,65390],{"class":257},"      this.style.color = 'pink'\n",[240,65392,65393],{"class":242,"line":549},[240,65394,35407],{"class":257},[240,65396,65397,65399,65401],{"class":242,"line":569},[240,65398,54353],{"class":257},[240,65400,53751],{"class":253},[240,65402,447],{"class":257},[240,65404,65405,65407,65409],{"class":242,"line":589},[240,65406,592],{"class":257},[240,65408,53738],{"class":253},[240,65410,447],{"class":257},[32,65412,65414],{"id":65413},"_328-回调函数","3.2.8 回调函数",[19,65416,65417],{},[219,65418],{"alt":236,"src":65419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[19,65421,65422],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[19,65424,13283],{},[3100,65426,65427,65430,65433],{},[1829,65428,65429],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[1829,65431,65432],{},"回调函数本质还是函数，只不过把它当成参数使用",[1829,65434,65435],{},"使用匿名函数做为回调函数比较常见",[32,65437,65439],{"id":65438},"_329-tab栏切换","3.2.9 tab栏切换",[19,65441,65442],{},[219,65443],{"alt":236,"src":65444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[231,65446,65448],{"className":52579,"code":65447,"language":52581,"meta":236,"style":236},"\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",[23,65449,65450,65460,65474,65478,65486,65500,65520,65540,65553,65561,65567,65577,65587,65591,65595,65602,65615,65628,65640,65656,65660,65664,65671,65683,65695,65707,65717,65727,65731,65735,65744,65756,65767,65779,65783,65787,65795,65805,65815,65825,65829,65833,65843,65857,65869,65873,65877,65889,65900,65917,65927,65931,65935,65950,65961,65971,65975,65979,65986,66001,66005,66009,66017,66027,66031,66035,66044,66054,66058,66066,66074,66078,66086,66101,66116,66129,66137,66171,66198,66225,66252,66279,66287,66295,66310,66347,66382,66417,66452,66487,66495,66503,66511,66516,66521,66541,66546,66575,66580,66585,66603,66608,66613,66618,66640,66645,66661,66665,66670,66675,66696,66701,66730,66734,66739,66743,66751,66759,66763],{"__ignoreMap":236},[240,65451,65452,65454,65456,65458],{"class":242,"line":243},[240,65453,53243],{"class":257},[240,65455,53246],{"class":253},[240,65457,53249],{"class":436},[240,65459,447],{"class":257},[240,65461,65462,65464,65466,65468,65470,65472],{"class":242,"line":250},[240,65463,431],{"class":257},[240,65465,52581],{"class":253},[240,65467,53260],{"class":436},[240,65469,440],{"class":257},[240,65471,53265],{"class":443},[240,65473,447],{"class":257},[240,65475,65476],{"class":242,"line":261},[240,65477,4353],{"emptyLinePlaceholder":2051},[240,65479,65480,65482,65484],{"class":242,"line":277},[240,65481,431],{"class":257},[240,65483,53278],{"class":253},[240,65485,447],{"class":257},[240,65487,65488,65490,65492,65494,65496,65498],{"class":242,"line":294},[240,65489,452],{"class":257},[240,65491,53288],{"class":253},[240,65493,53291],{"class":436},[240,65495,440],{"class":257},[240,65497,53296],{"class":443},[240,65499,61058],{"class":257},[240,65501,65502,65504,65506,65508,65510,65512,65514,65516,65518],{"class":242,"line":309},[240,65503,452],{"class":257},[240,65505,53288],{"class":253},[240,65507,53307],{"class":436},[240,65509,440],{"class":257},[240,65511,53312],{"class":443},[240,65513,53315],{"class":436},[240,65515,440],{"class":257},[240,65517,53320],{"class":443},[240,65519,61058],{"class":257},[240,65521,65522,65524,65526,65528,65530,65532,65534,65536,65538],{"class":242,"line":529},[240,65523,452],{"class":257},[240,65525,53288],{"class":253},[240,65527,16869],{"class":436},[240,65529,440],{"class":257},[240,65531,53335],{"class":443},[240,65533,53315],{"class":436},[240,65535,440],{"class":257},[240,65537,53342],{"class":443},[240,65539,61058],{"class":257},[240,65541,65542,65544,65546,65549,65551],{"class":242,"line":549},[240,65543,452],{"class":257},[240,65545,53351],{"class":253},[240,65547,65548],{"class":257},">tab栏切换\u003C\u002F",[240,65550,53351],{"class":253},[240,65552,447],{"class":257},[240,65554,65555,65557,65559],{"class":242,"line":569},[240,65556,452],{"class":257},[240,65558,2019],{"class":253},[240,65560,447],{"class":257},[240,65562,65563,65565],{"class":242,"line":589},[240,65564,8354],{"class":253},[240,65566,258],{"class":257},[240,65568,65569,65571,65573,65575],{"class":242,"line":715},[240,65570,56641],{"class":264},[240,65572,268],{"class":257},[240,65574,1274],{"class":264},[240,65576,274],{"class":257},[240,65578,65579,65581,65583,65585],{"class":242,"line":727},[240,65580,56630],{"class":264},[240,65582,268],{"class":257},[240,65584,1274],{"class":264},[240,65586,274],{"class":257},[240,65588,65589],{"class":242,"line":1730},[240,65590,4140],{"class":257},[240,65592,65593],{"class":242,"line":3582},[240,65594,4353],{"emptyLinePlaceholder":2051},[240,65596,65597,65600],{"class":242,"line":3596},[240,65598,65599],{"class":436},"    .tab",[240,65601,258],{"class":257},[240,65603,65604,65606,65608,65611,65613],{"class":242,"line":3601},[240,65605,56705],{"class":264},[240,65607,268],{"class":257},[240,65609,65610],{"class":264},"590",[240,65612,289],{"class":288},[240,65614,274],{"class":257},[240,65616,65617,65619,65621,65624,65626],{"class":242,"line":3607},[240,65618,56719],{"class":264},[240,65620,268],{"class":257},[240,65622,65623],{"class":264},"340",[240,65625,289],{"class":288},[240,65627,274],{"class":257},[240,65629,65630,65632,65634,65636,65638],{"class":242,"line":3628},[240,65631,56641],{"class":264},[240,65633,268],{"class":257},[240,65635,1000],{"class":264},[240,65637,289],{"class":288},[240,65639,274],{"class":257},[240,65641,65642,65644,65646,65648,65650,65652,65654],{"class":242,"line":3633},[240,65643,63901],{"class":264},[240,65645,268],{"class":257},[240,65647,1643],{"class":264},[240,65649,289],{"class":288},[240,65651,53463],{"class":264},[240,65653,64168],{"class":264},[240,65655,274],{"class":257},[240,65657,65658],{"class":242,"line":3647},[240,65659,4140],{"class":257},[240,65661,65662],{"class":242,"line":3652},[240,65663,4353],{"emptyLinePlaceholder":2051},[240,65665,65666,65669],{"class":242,"line":3681},[240,65667,65668],{"class":436},"    .tab-nav",[240,65670,258],{"class":257},[240,65672,65673,65675,65677,65679,65681],{"class":242,"line":3686},[240,65674,56705],{"class":264},[240,65676,268],{"class":257},[240,65678,285],{"class":264},[240,65680,2429],{"class":288},[240,65682,274],{"class":257},[240,65684,65685,65687,65689,65691,65693],{"class":242,"line":3703},[240,65686,56719],{"class":264},[240,65688,268],{"class":257},[240,65690,3002],{"class":264},[240,65692,289],{"class":288},[240,65694,274],{"class":257},[240,65696,65697,65699,65701,65703,65705],{"class":242,"line":3708},[240,65698,59292],{"class":264},[240,65700,268],{"class":257},[240,65702,3002],{"class":264},[240,65704,289],{"class":288},[240,65706,274],{"class":257},[240,65708,65709,65711,65713,65715],{"class":242,"line":3713},[240,65710,56943],{"class":264},[240,65712,268],{"class":257},[240,65714,53420],{"class":264},[240,65716,274],{"class":257},[240,65718,65719,65721,65723,65725],{"class":242,"line":3718},[240,65720,56954],{"class":264},[240,65722,268],{"class":257},[240,65724,53607],{"class":264},[240,65726,274],{"class":257},[240,65728,65729],{"class":242,"line":3732},[240,65730,4140],{"class":257},[240,65732,65733],{"class":242,"line":3737},[240,65734,4353],{"emptyLinePlaceholder":2051},[240,65736,65737,65739,65742],{"class":242,"line":4530},[240,65738,65668],{"class":436},[240,65740,65741],{"class":253}," h3",[240,65743,258],{"class":257},[240,65745,65746,65748,65750,65752,65754],{"class":242,"line":4544},[240,65747,56856],{"class":264},[240,65749,268],{"class":257},[240,65751,2897],{"class":264},[240,65753,289],{"class":288},[240,65755,274],{"class":257},[240,65757,65758,65760,65762,65765],{"class":242,"line":4552},[240,65759,64258],{"class":264},[240,65761,268],{"class":257},[240,65763,65764],{"class":264},"normal",[240,65766,274],{"class":257},[240,65768,65769,65771,65773,65775,65777],{"class":242,"line":4557},[240,65770,63924],{"class":264},[240,65772,268],{"class":257},[240,65774,1000],{"class":264},[240,65776,289],{"class":288},[240,65778,274],{"class":257},[240,65780,65781],{"class":242,"line":4563},[240,65782,4140],{"class":257},[240,65784,65785],{"class":242,"line":4569},[240,65786,4353],{"emptyLinePlaceholder":2051},[240,65788,65789,65791,65793],{"class":242,"line":4574},[240,65790,65668],{"class":436},[240,65792,63218],{"class":253},[240,65794,258],{"class":257},[240,65796,65797,65799,65801,65803],{"class":242,"line":9899},[240,65798,56667],{"class":264},[240,65800,268],{"class":257},[240,65802,826],{"class":264},[240,65804,274],{"class":257},[240,65806,65807,65809,65811,65813],{"class":242,"line":9923},[240,65808,56943],{"class":264},[240,65810,268],{"class":257},[240,65812,53420],{"class":264},[240,65814,274],{"class":257},[240,65816,65817,65819,65821,65823],{"class":242,"line":9928},[240,65818,56954],{"class":264},[240,65820,268],{"class":257},[240,65822,53522],{"class":264},[240,65824,274],{"class":257},[240,65826,65827],{"class":242,"line":9934},[240,65828,4140],{"class":257},[240,65830,65831],{"class":242,"line":9961},[240,65832,4353],{"emptyLinePlaceholder":2051},[240,65834,65835,65837,65839,65841],{"class":242,"line":9966},[240,65836,65668],{"class":436},[240,65838,63218],{"class":253},[240,65840,57009],{"class":253},[240,65842,258],{"class":257},[240,65844,65845,65847,65849,65851,65853,65855],{"class":242,"line":9972},[240,65846,56641],{"class":264},[240,65848,268],{"class":257},[240,65850,1274],{"class":264},[240,65852,10901],{"class":264},[240,65854,289],{"class":288},[240,65856,274],{"class":257},[240,65858,65859,65861,65863,65865,65867],{"class":242,"line":9984},[240,65860,56856],{"class":264},[240,65862,268],{"class":257},[240,65864,2648],{"class":264},[240,65866,289],{"class":288},[240,65868,274],{"class":257},[240,65870,65871],{"class":242,"line":9996},[240,65872,4140],{"class":257},[240,65874,65875],{"class":242,"line":10008},[240,65876,4353],{"emptyLinePlaceholder":2051},[240,65878,65879,65881,65883,65885,65887],{"class":242,"line":11667},[240,65880,65668],{"class":436},[240,65882,63218],{"class":253},[240,65884,57009],{"class":253},[240,65886,609],{"class":253},[240,65888,258],{"class":257},[240,65890,65891,65894,65896,65898],{"class":242,"line":11692},[240,65892,65893],{"class":264},"      text-decoration",[240,65895,268],{"class":257},[240,65897,826],{"class":264},[240,65899,274],{"class":257},[240,65901,65902,65904,65906,65908,65910,65912,65915],{"class":242,"line":11715},[240,65903,64156],{"class":264},[240,65905,268],{"class":257},[240,65907,1668],{"class":264},[240,65909,289],{"class":288},[240,65911,53463],{"class":264},[240,65913,65914],{"class":264}," transparent",[240,65916,274],{"class":257},[240,65918,65919,65921,65923,65925],{"class":242,"line":11739},[240,65920,59349],{"class":264},[240,65922,268],{"class":257},[240,65924,1799],{"class":264},[240,65926,274],{"class":257},[240,65928,65929],{"class":242,"line":11744},[240,65930,4140],{"class":257},[240,65932,65933],{"class":242,"line":11749},[240,65934,4353],{"emptyLinePlaceholder":2051},[240,65936,65937,65939,65941,65943,65945,65948],{"class":242,"line":11754},[240,65938,65668],{"class":436},[240,65940,63218],{"class":253},[240,65942,57009],{"class":253},[240,65944,609],{"class":253},[240,65946,65947],{"class":436},".active",[240,65949,258],{"class":257},[240,65951,65952,65954,65956,65959],{"class":242,"line":11763},[240,65953,63715],{"class":264},[240,65955,268],{"class":257},[240,65957,65958],{"class":264},"#e1251b",[240,65960,274],{"class":257},[240,65962,65963,65965,65967,65969],{"class":242,"line":11768},[240,65964,59349],{"class":264},[240,65966,268],{"class":257},[240,65968,65958],{"class":264},[240,65970,274],{"class":257},[240,65972,65973],{"class":242,"line":11774},[240,65974,4140],{"class":257},[240,65976,65977],{"class":242,"line":11795},[240,65978,4353],{"emptyLinePlaceholder":2051},[240,65980,65981,65984],{"class":242,"line":11801},[240,65982,65983],{"class":436},"    .tab-content",[240,65985,258],{"class":257},[240,65987,65988,65990,65992,65994,65997,65999],{"class":242,"line":11815},[240,65989,56630],{"class":264},[240,65991,268],{"class":257},[240,65993,1274],{"class":264},[240,65995,65996],{"class":264}," 16",[240,65998,289],{"class":288},[240,66000,274],{"class":257},[240,66002,66003],{"class":242,"line":11821},[240,66004,4140],{"class":257},[240,66006,66007],{"class":242,"line":11848},[240,66008,4353],{"emptyLinePlaceholder":2051},[240,66010,66011,66013,66015],{"class":242,"line":11857},[240,66012,65983],{"class":436},[240,66014,64098],{"class":436},[240,66016,258],{"class":257},[240,66018,66019,66021,66023,66025],{"class":242,"line":11863},[240,66020,56943],{"class":264},[240,66022,268],{"class":257},[240,66024,826],{"class":264},[240,66026,274],{"class":257},[240,66028,66029],{"class":242,"line":11871},[240,66030,4140],{"class":257},[240,66032,66033],{"class":242,"line":11876},[240,66034,4353],{"emptyLinePlaceholder":2051},[240,66036,66037,66039,66042],{"class":242,"line":18552},[240,66038,65983],{"class":436},[240,66040,66041],{"class":436}," .item.active",[240,66043,258],{"class":257},[240,66045,66046,66048,66050,66052],{"class":242,"line":18558},[240,66047,56943],{"class":264},[240,66049,268],{"class":257},[240,66051,271],{"class":264},[240,66053,274],{"class":257},[240,66055,66056],{"class":242,"line":18581},[240,66057,4140],{"class":257},[240,66059,66060,66062,66064],{"class":242,"line":18587},[240,66061,54353],{"class":257},[240,66063,2019],{"class":253},[240,66065,447],{"class":257},[240,66067,66068,66070,66072],{"class":242,"line":18610},[240,66069,592],{"class":257},[240,66071,53278],{"class":253},[240,66073,447],{"class":257},[240,66075,66076],{"class":242,"line":18624},[240,66077,4353],{"emptyLinePlaceholder":2051},[240,66079,66080,66082,66084],{"class":242,"line":18644},[240,66081,431],{"class":257},[240,66083,53738],{"class":253},[240,66085,447],{"class":257},[240,66087,66088,66090,66092,66094,66096,66099],{"class":242,"line":18650},[240,66089,452],{"class":257},[240,66091,330],{"class":253},[240,66093,437],{"class":436},[240,66095,440],{"class":257},[240,66097,66098],{"class":443},"\"tab\"",[240,66100,447],{"class":257},[240,66102,66103,66105,66107,66109,66111,66114],{"class":242,"line":18661},[240,66104,53285],{"class":257},[240,66106,330],{"class":253},[240,66108,437],{"class":436},[240,66110,440],{"class":257},[240,66112,66113],{"class":443},"\"tab-nav\"",[240,66115,447],{"class":257},[240,66117,66118,66120,66122,66125,66127],{"class":242,"line":18684},[240,66119,57167],{"class":257},[240,66121,32],{"class":253},[240,66123,66124],{"class":257},">每日特价\u003C\u002F",[240,66126,32],{"class":253},[240,66128,447],{"class":257},[240,66130,66131,66133,66135],{"class":242,"line":18706},[240,66132,57167],{"class":257},[240,66134,3100],{"class":253},[240,66136,447],{"class":257},[240,66138,66139,66141,66143,66145,66147,66149,66151,66153,66155,66157,66160,66163,66165,66167,66169],{"class":242,"line":18711},[240,66140,57235],{"class":257},[240,66142,1829],{"class":253},[240,66144,62980],{"class":257},[240,66146,254],{"class":253},[240,66148,437],{"class":436},[240,66150,440],{"class":257},[240,66152,61637],{"class":443},[240,66154,457],{"class":436},[240,66156,440],{"class":257},[240,66158,66159],{"class":443},"\"javascript:;\"",[240,66161,66162],{"class":257},">精选\u003C\u002F",[240,66164,254],{"class":253},[240,66166,57247],{"class":257},[240,66168,1829],{"class":253},[240,66170,447],{"class":257},[240,66172,66173,66175,66177,66179,66181,66183,66185,66187,66190,66192,66194,66196],{"class":242,"line":18717},[240,66174,57235],{"class":257},[240,66176,1829],{"class":253},[240,66178,62980],{"class":257},[240,66180,254],{"class":253},[240,66182,457],{"class":436},[240,66184,440],{"class":257},[240,66186,66159],{"class":443},[240,66188,66189],{"class":257},">美食\u003C\u002F",[240,66191,254],{"class":253},[240,66193,57247],{"class":257},[240,66195,1829],{"class":253},[240,66197,447],{"class":257},[240,66199,66200,66202,66204,66206,66208,66210,66212,66214,66217,66219,66221,66223],{"class":242,"line":18731},[240,66201,57235],{"class":257},[240,66203,1829],{"class":253},[240,66205,62980],{"class":257},[240,66207,254],{"class":253},[240,66209,457],{"class":436},[240,66211,440],{"class":257},[240,66213,66159],{"class":443},[240,66215,66216],{"class":257},">百货\u003C\u002F",[240,66218,254],{"class":253},[240,66220,57247],{"class":257},[240,66222,1829],{"class":253},[240,66224,447],{"class":257},[240,66226,66227,66229,66231,66233,66235,66237,66239,66241,66244,66246,66248,66250],{"class":242,"line":18744},[240,66228,57235],{"class":257},[240,66230,1829],{"class":253},[240,66232,62980],{"class":257},[240,66234,254],{"class":253},[240,66236,457],{"class":436},[240,66238,440],{"class":257},[240,66240,66159],{"class":443},[240,66242,66243],{"class":257},">个护\u003C\u002F",[240,66245,254],{"class":253},[240,66247,57247],{"class":257},[240,66249,1829],{"class":253},[240,66251,447],{"class":257},[240,66253,66254,66256,66258,66260,66262,66264,66266,66268,66271,66273,66275,66277],{"class":242,"line":18749},[240,66255,57235],{"class":257},[240,66257,1829],{"class":253},[240,66259,62980],{"class":257},[240,66261,254],{"class":253},[240,66263,457],{"class":436},[240,66265,440],{"class":257},[240,66267,66159],{"class":443},[240,66269,66270],{"class":257},">预告\u003C\u002F",[240,66272,254],{"class":253},[240,66274,57247],{"class":257},[240,66276,1829],{"class":253},[240,66278,447],{"class":257},[240,66280,66281,66283,66285],{"class":242,"line":18763},[240,66282,57340],{"class":257},[240,66284,3100],{"class":253},[240,66286,447],{"class":257},[240,66288,66289,66291,66293],{"class":242,"line":18768},[240,66290,53715],{"class":257},[240,66292,330],{"class":253},[240,66294,447],{"class":257},[240,66296,66297,66299,66301,66303,66305,66308],{"class":242,"line":18774},[240,66298,53285],{"class":257},[240,66300,330],{"class":253},[240,66302,437],{"class":436},[240,66304,440],{"class":257},[240,66306,66307],{"class":443},"\"tab-content\"",[240,66309,447],{"class":257},[240,66311,66312,66314,66316,66318,66320,66323,66325,66327,66329,66331,66334,66336,66338,66340,66343,66345],{"class":242,"line":18779},[240,66313,57167],{"class":257},[240,66315,330],{"class":253},[240,66317,437],{"class":436},[240,66319,440],{"class":257},[240,66321,66322],{"class":443},"\"item active\"",[240,66324,62980],{"class":257},[240,66326,219],{"class":253},[240,66328,57172],{"class":436},[240,66330,440],{"class":257},[240,66332,66333],{"class":443},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[240,66335,57180],{"class":436},[240,66337,440],{"class":257},[240,66339,9603],{"class":443},[240,66341,66342],{"class":257}," \u002F>\u003C\u002F",[240,66344,330],{"class":253},[240,66346,447],{"class":257},[240,66348,66349,66351,66353,66355,66357,66359,66361,66363,66365,66367,66370,66372,66374,66376,66378,66380],{"class":242,"line":18793},[240,66350,57167],{"class":257},[240,66352,330],{"class":253},[240,66354,437],{"class":436},[240,66356,440],{"class":257},[240,66358,64546],{"class":443},[240,66360,62980],{"class":257},[240,66362,219],{"class":253},[240,66364,57172],{"class":436},[240,66366,440],{"class":257},[240,66368,66369],{"class":443},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[240,66371,57180],{"class":436},[240,66373,440],{"class":257},[240,66375,9603],{"class":443},[240,66377,66342],{"class":257},[240,66379,330],{"class":253},[240,66381,447],{"class":257},[240,66383,66384,66386,66388,66390,66392,66394,66396,66398,66400,66402,66405,66407,66409,66411,66413,66415],{"class":242,"line":18798},[240,66385,57167],{"class":257},[240,66387,330],{"class":253},[240,66389,437],{"class":436},[240,66391,440],{"class":257},[240,66393,64546],{"class":443},[240,66395,62980],{"class":257},[240,66397,219],{"class":253},[240,66399,57172],{"class":436},[240,66401,440],{"class":257},[240,66403,66404],{"class":443},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[240,66406,57180],{"class":436},[240,66408,440],{"class":257},[240,66410,9603],{"class":443},[240,66412,66342],{"class":257},[240,66414,330],{"class":253},[240,66416,447],{"class":257},[240,66418,66419,66421,66423,66425,66427,66429,66431,66433,66435,66437,66440,66442,66444,66446,66448,66450],{"class":242,"line":18803},[240,66420,57167],{"class":257},[240,66422,330],{"class":253},[240,66424,437],{"class":436},[240,66426,440],{"class":257},[240,66428,64546],{"class":443},[240,66430,62980],{"class":257},[240,66432,219],{"class":253},[240,66434,57172],{"class":436},[240,66436,440],{"class":257},[240,66438,66439],{"class":443},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[240,66441,57180],{"class":436},[240,66443,440],{"class":257},[240,66445,9603],{"class":443},[240,66447,66342],{"class":257},[240,66449,330],{"class":253},[240,66451,447],{"class":257},[240,66453,66454,66456,66458,66460,66462,66464,66466,66468,66470,66472,66475,66477,66479,66481,66483,66485],{"class":242,"line":18817},[240,66455,57167],{"class":257},[240,66457,330],{"class":253},[240,66459,437],{"class":436},[240,66461,440],{"class":257},[240,66463,64546],{"class":443},[240,66465,62980],{"class":257},[240,66467,219],{"class":253},[240,66469,57172],{"class":436},[240,66471,440],{"class":257},[240,66473,66474],{"class":443},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[240,66476,57180],{"class":436},[240,66478,440],{"class":257},[240,66480,9603],{"class":443},[240,66482,66342],{"class":257},[240,66484,330],{"class":253},[240,66486,447],{"class":257},[240,66488,66489,66491,66493],{"class":242,"line":18829},[240,66490,53715],{"class":257},[240,66492,330],{"class":253},[240,66494,447],{"class":257},[240,66496,66497,66499,66501],{"class":242,"line":18834},[240,66498,54353],{"class":257},[240,66500,330],{"class":253},[240,66502,447],{"class":257},[240,66504,66505,66507,66509],{"class":242,"line":18847},[240,66506,452],{"class":257},[240,66508,53751],{"class":253},[240,66510,447],{"class":257},[240,66512,66513],{"class":242,"line":18852},[240,66514,66515],{"class":246},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[240,66517,66518],{"class":242,"line":18857},[240,66519,66520],{"class":246},"    \u002F\u002F 1.1 获取 a 元素 \n",[240,66522,66523,66525,66528,66530,66532,66534,66536,66539],{"class":242,"line":18862},[240,66524,13172],{"class":288},[240,66526,66527],{"class":264}," as",[240,66529,15514],{"class":288},[240,66531,56331],{"class":257},[240,66533,57614],{"class":436},[240,66535,789],{"class":257},[240,66537,66538],{"class":443},"'.tab-nav a'",[240,66540,2129],{"class":257},[240,66542,66543],{"class":242,"line":18875},[240,66544,66545],{"class":246},"    \u002F\u002F console.log(as) \n",[240,66547,66548,66550,66552,66554,66556,66558,66560,66562,66564,66567,66569,66571,66573],{"class":242,"line":18880},[240,66549,5153],{"class":288},[240,66551,3612],{"class":257},[240,66553,53785],{"class":288},[240,66555,11389],{"class":257},[240,66557,440],{"class":288},[240,66559,6045],{"class":264},[240,66561,11396],{"class":257},[240,66563,431],{"class":288},[240,66565,66566],{"class":257}," as.",[240,66568,1064],{"class":264},[240,66570,5166],{"class":257},[240,66572,4245],{"class":288},[240,66574,14392],{"class":257},[240,66576,66577],{"class":242,"line":34579},[240,66578,66579],{"class":246},"      \u002F\u002F console.log(as[i])\n",[240,66581,66582],{"class":242,"line":34585},[240,66583,66584],{"class":246},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[240,66586,66587,66590,66592,66594,66597,66599,66601],{"class":242,"line":34591},[240,66588,66589],{"class":257},"      as[i].",[240,66591,59744],{"class":436},[240,66593,789],{"class":257},[240,66595,66596],{"class":443},"'mouseenter'",[240,66598,1277],{"class":257},[240,66600,56384],{"class":288},[240,66602,56387],{"class":257},[240,66604,66605],{"class":242,"line":34597},[240,66606,66607],{"class":246},"        \u002F\u002F console.log('鼠标经过')\n",[240,66609,66610],{"class":242,"line":34603},[240,66611,66612],{"class":246},"        \u002F\u002F 排他思想  \n",[240,66614,66615],{"class":242,"line":34614},[240,66616,66617],{"class":246},"        \u002F\u002F 干掉别人 移除类active\n",[240,66619,66620,66622,66624,66626,66629,66631,66633,66635,66638],{"class":242,"line":34620},[240,66621,53863],{"class":257},[240,66623,56334],{"class":436},[240,66625,789],{"class":257},[240,66627,66628],{"class":443},"'.tab-nav .active'",[240,66630,58936],{"class":257},[240,66632,58939],{"class":436},[240,66634,789],{"class":257},[240,66636,66637],{"class":443},"'active'",[240,66639,2129],{"class":257},[240,66641,66642],{"class":242,"line":34640},[240,66643,66644],{"class":246},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[240,66646,66647,66650,66653,66655,66657,66659],{"class":242,"line":34646},[240,66648,66649],{"class":264},"        this",[240,66651,66652],{"class":257},".classList.",[240,66654,7285],{"class":436},[240,66656,789],{"class":257},[240,66658,66637],{"class":443},[240,66660,2129],{"class":257},[240,66662,66663],{"class":242,"line":34657},[240,66664,4353],{"emptyLinePlaceholder":2051},[240,66666,66667],{"class":242,"line":34663},[240,66668,66669],{"class":246},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[240,66671,66672],{"class":242,"line":34669},[240,66673,66674],{"class":246},"        \u002F\u002F 干掉别人\n",[240,66676,66677,66679,66681,66683,66686,66688,66690,66692,66694],{"class":242,"line":34675},[240,66678,53863],{"class":257},[240,66680,56334],{"class":436},[240,66682,789],{"class":257},[240,66684,66685],{"class":443},"'.tab-content .active'",[240,66687,58936],{"class":257},[240,66689,58939],{"class":436},[240,66691,789],{"class":257},[240,66693,66637],{"class":443},[240,66695,2129],{"class":257},[240,66697,66698],{"class":242,"line":34681},[240,66699,66700],{"class":246},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[240,66702,66703,66705,66707,66709,66712,66714,66716,66718,66720,66722,66724,66726,66728],{"class":242,"line":34687},[240,66704,53863],{"class":257},[240,66706,56334],{"class":436},[240,66708,789],{"class":257},[240,66710,66711],{"class":443},"`.tab-content .item:nth-child(${",[240,66713,2541],{"class":257},[240,66715,47512],{"class":288},[240,66717,27065],{"class":264},[240,66719,58965],{"class":443},[240,66721,58936],{"class":257},[240,66723,7285],{"class":436},[240,66725,789],{"class":257},[240,66727,66637],{"class":443},[240,66729,2129],{"class":257},[240,66731,66732],{"class":242,"line":34693},[240,66733,4353],{"emptyLinePlaceholder":2051},[240,66735,66736],{"class":242,"line":34699},[240,66737,66738],{"class":257},"      })\n",[240,66740,66741],{"class":242,"line":34719},[240,66742,4140],{"class":257},[240,66744,66745,66747,66749],{"class":242,"line":34725},[240,66746,54353],{"class":257},[240,66748,53751],{"class":253},[240,66750,447],{"class":257},[240,66752,66753,66755,66757],{"class":242,"line":34741},[240,66754,592],{"class":257},[240,66756,53738],{"class":253},[240,66758,447],{"class":257},[240,66760,66761],{"class":242,"line":34747},[240,66762,4353],{"emptyLinePlaceholder":2051},[240,66764,66765,66767,66769],{"class":242,"line":34761},[240,66766,592],{"class":257},[240,66768,52581],{"class":253},[240,66770,447],{"class":257},[19,66772,66773],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[19,66775,66776],{},"在监听事件中，this指向的就是他的调用者",[19,66778,66779],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[19,66781,55655],{},[19,66783,66784],{},"(function () {",[19,66786,66787],{},"const list = document.querySelector('.xtx-elevator-list')",[19,66789,66790],{},"list.addEventListener('click', function (e) {",[19,66792,66793],{},"if (e.target.tagName === 'A') {",[19,66795,66796],{},"\u002F\u002F 排他思想",[19,66798,66799],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[19,66801,66802],{},"const old = document.querySelector('.xtx-elevator-list .active')",[19,66804,66805],{},"\u002F\u002F console.log(old);",[19,66807,66808],{},"\u002F\u002F 判断",[19,66810,66811],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[19,66813,66814],{},"if (old) old.classList.remove('active')",[19,66816,66817],{},"e.target.classList.add('active')",[19,66819,3040],{},[19,66821,54400],{},[19,66823,66824],{},"})();",[32,66826,66828],{"id":66827},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[231,66830,66832],{"className":52579,"code":66831,"language":52581,"meta":236,"style":236},"\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",[23,66833,66834,66844,66848,66856,66860,66874,66888,66900,66908,66914,66924,66934,66938,66942,66949,66961,66972,66989,67002,67016,67026,67030,67034,67041,67052,67070,67080,67092,67096,67100,67107,67124,67135,67147,67151,67155,67162,67174,67178,67186,67194,67198,67206,67214,67222,67237,67281,67289,67302,67315,67328,67336,67344,67352,67380,67388,67400,67413,67426,67434,67442,67450,67476,67484,67497,67509,67522,67530,67538,67546,67572,67580,67593,67605,67618,67626,67634,67642,67647,67667,67672,67692,67697,67714,67719,67727,67732,67761,67774,67778,67782,67787,67791,67819,67824,67841,67846,67851,67856,67861,67887,67891,67895,67903,67911,67915],{"__ignoreMap":236},[240,66835,66836,66838,66840,66842],{"class":242,"line":243},[240,66837,53243],{"class":257},[240,66839,53246],{"class":253},[240,66841,53249],{"class":436},[240,66843,447],{"class":257},[240,66845,66846],{"class":242,"line":250},[240,66847,4353],{"emptyLinePlaceholder":2051},[240,66849,66850,66852,66854],{"class":242,"line":261},[240,66851,431],{"class":257},[240,66853,52581],{"class":253},[240,66855,447],{"class":257},[240,66857,66858],{"class":242,"line":277},[240,66859,4353],{"emptyLinePlaceholder":2051},[240,66861,66862,66864,66866,66868,66870,66872],{"class":242,"line":294},[240,66863,431],{"class":257},[240,66865,53278],{"class":253},[240,66867,53260],{"class":436},[240,66869,440],{"class":257},[240,66871,53265],{"class":443},[240,66873,447],{"class":257},[240,66875,66876,66878,66880,66882,66884,66886],{"class":242,"line":309},[240,66877,452],{"class":257},[240,66879,53288],{"class":253},[240,66881,53291],{"class":436},[240,66883,440],{"class":257},[240,66885,53296],{"class":443},[240,66887,447],{"class":257},[240,66889,66890,66892,66894,66896,66898],{"class":242,"line":529},[240,66891,452],{"class":257},[240,66893,53351],{"class":253},[240,66895,57247],{"class":257},[240,66897,53351],{"class":253},[240,66899,447],{"class":257},[240,66901,66902,66904,66906],{"class":242,"line":549},[240,66903,452],{"class":257},[240,66905,2019],{"class":253},[240,66907,447],{"class":257},[240,66909,66910,66912],{"class":242,"line":569},[240,66911,8354],{"class":253},[240,66913,258],{"class":257},[240,66915,66916,66918,66920,66922],{"class":242,"line":589},[240,66917,56641],{"class":264},[240,66919,268],{"class":257},[240,66921,1274],{"class":264},[240,66923,274],{"class":257},[240,66925,66926,66928,66930,66932],{"class":242,"line":715},[240,66927,56630],{"class":264},[240,66929,268],{"class":257},[240,66931,1274],{"class":264},[240,66933,274],{"class":257},[240,66935,66936],{"class":242,"line":727},[240,66937,4140],{"class":257},[240,66939,66940],{"class":242,"line":1730},[240,66941,4353],{"emptyLinePlaceholder":2051},[240,66943,66944,66947],{"class":242,"line":3582},[240,66945,66946],{"class":253},"    table",[240,66948,258],{"class":257},[240,66950,66951,66954,66956,66959],{"class":242,"line":3596},[240,66952,66953],{"class":264},"      border-collapse",[240,66955,268],{"class":257},[240,66957,66958],{"class":264},"collapse",[240,66960,274],{"class":257},[240,66962,66963,66966,66968,66970],{"class":242,"line":3601},[240,66964,66965],{"class":264},"      border-spacing",[240,66967,268],{"class":257},[240,66969,1274],{"class":264},[240,66971,274],{"class":257},[240,66973,66974,66976,66978,66980,66982,66984,66987],{"class":242,"line":3607},[240,66975,63901],{"class":264},[240,66977,268],{"class":257},[240,66979,1643],{"class":264},[240,66981,289],{"class":288},[240,66983,53463],{"class":264},[240,66985,66986],{"class":264}," #c0c0c0",[240,66988,274],{"class":257},[240,66990,66991,66993,66995,66998,67000],{"class":242,"line":3628},[240,66992,56705],{"class":264},[240,66994,268],{"class":257},[240,66996,66997],{"class":264},"500",[240,66999,289],{"class":288},[240,67001,274],{"class":257},[240,67003,67004,67006,67008,67010,67012,67014],{"class":242,"line":3633},[240,67005,56641],{"class":264},[240,67007,268],{"class":257},[240,67009,285],{"class":264},[240,67011,289],{"class":288},[240,67013,53498],{"class":264},[240,67015,274],{"class":257},[240,67017,67018,67020,67022,67024],{"class":242,"line":3647},[240,67019,59219],{"class":264},[240,67021,268],{"class":257},[240,67023,971],{"class":264},[240,67025,274],{"class":257},[240,67027,67028],{"class":242,"line":3652},[240,67029,4140],{"class":257},[240,67031,67032],{"class":242,"line":3681},[240,67033,4353],{"emptyLinePlaceholder":2051},[240,67035,67036,67039],{"class":242,"line":3686},[240,67037,67038],{"class":253},"    th",[240,67040,258],{"class":257},[240,67042,67043,67045,67047,67050],{"class":242,"line":3703},[240,67044,56818],{"class":264},[240,67046,268],{"class":257},[240,67048,67049],{"class":264},"#09c",[240,67051,274],{"class":257},[240,67053,67054,67057,67059,67061,67063,67065,67068],{"class":242,"line":3708},[240,67055,67056],{"class":264},"      font",[240,67058,268],{"class":257},[240,67060,64263],{"class":264},[240,67062,65996],{"class":264},[240,67064,289],{"class":288},[240,67066,67067],{"class":443}," \"微软雅黑\"",[240,67069,274],{"class":257},[240,67071,67072,67074,67076,67078],{"class":242,"line":3713},[240,67073,59349],{"class":264},[240,67075,268],{"class":257},[240,67077,683],{"class":264},[240,67079,274],{"class":257},[240,67081,67082,67084,67086,67088,67090],{"class":242,"line":3718},[240,67083,56719],{"class":264},[240,67085,268],{"class":257},[240,67087,2897],{"class":264},[240,67089,289],{"class":288},[240,67091,274],{"class":257},[240,67093,67094],{"class":242,"line":3732},[240,67095,4140],{"class":257},[240,67097,67098],{"class":242,"line":3737},[240,67099,4353],{"emptyLinePlaceholder":2051},[240,67101,67102,67105],{"class":242,"line":4530},[240,67103,67104],{"class":253},"    td",[240,67106,258],{"class":257},[240,67108,67109,67111,67113,67115,67117,67119,67122],{"class":242,"line":4544},[240,67110,63901],{"class":264},[240,67112,268],{"class":257},[240,67114,1643],{"class":264},[240,67116,289],{"class":288},[240,67118,53463],{"class":264},[240,67120,67121],{"class":264}," #d0d0d0",[240,67123,274],{"class":257},[240,67125,67126,67128,67130,67133],{"class":242,"line":4552},[240,67127,59349],{"class":264},[240,67129,268],{"class":257},[240,67131,67132],{"class":264},"#404060",[240,67134,274],{"class":257},[240,67136,67137,67139,67141,67143,67145],{"class":242,"line":4557},[240,67138,56630],{"class":264},[240,67140,268],{"class":257},[240,67142,2546],{"class":264},[240,67144,289],{"class":288},[240,67146,274],{"class":257},[240,67148,67149],{"class":242,"line":4563},[240,67150,4140],{"class":257},[240,67152,67153],{"class":242,"line":4569},[240,67154,4353],{"emptyLinePlaceholder":2051},[240,67156,67157,67160],{"class":242,"line":4574},[240,67158,67159],{"class":436},"    .allCheck",[240,67161,258],{"class":257},[240,67163,67164,67166,67168,67170,67172],{"class":242,"line":9899},[240,67165,56705],{"class":264},[240,67167,268],{"class":257},[240,67169,386],{"class":264},[240,67171,289],{"class":288},[240,67173,274],{"class":257},[240,67175,67176],{"class":242,"line":9923},[240,67177,4140],{"class":257},[240,67179,67180,67182,67184],{"class":242,"line":9928},[240,67181,54353],{"class":257},[240,67183,2019],{"class":253},[240,67185,447],{"class":257},[240,67187,67188,67190,67192],{"class":242,"line":9934},[240,67189,592],{"class":257},[240,67191,53278],{"class":253},[240,67193,447],{"class":257},[240,67195,67196],{"class":242,"line":9961},[240,67197,4353],{"emptyLinePlaceholder":2051},[240,67199,67200,67202,67204],{"class":242,"line":9966},[240,67201,431],{"class":257},[240,67203,53738],{"class":253},[240,67205,447],{"class":257},[240,67207,67208,67210,67212],{"class":242,"line":9972},[240,67209,452],{"class":257},[240,67211,802],{"class":253},[240,67213,447],{"class":257},[240,67215,67216,67218,67220],{"class":242,"line":9984},[240,67217,53285],{"class":257},[240,67219,808],{"class":253},[240,67221,447],{"class":257},[240,67223,67224,67226,67228,67230,67232,67235],{"class":242,"line":9996},[240,67225,57167],{"class":257},[240,67227,811],{"class":253},[240,67229,437],{"class":436},[240,67231,440],{"class":257},[240,67233,67234],{"class":443},"\"allCheck\"",[240,67236,447],{"class":257},[240,67238,67239,67241,67243,67245,67247,67249,67251,67253,67255,67257,67259,67262,67265,67267,67269,67271,67274,67277,67279],{"class":242,"line":10008},[240,67240,57235],{"class":257},[240,67242,55756],{"class":253},[240,67244,55759],{"class":436},[240,67246,440],{"class":257},[240,67248,55764],{"class":443},[240,67250,16869],{"class":436},[240,67252,440],{"class":257},[240,67254,9603],{"class":443},[240,67256,16908],{"class":436},[240,67258,440],{"class":257},[240,67260,67261],{"class":443},"\"checkAll\"",[240,67263,67264],{"class":257},"> \u003C",[240,67266,240],{"class":253},[240,67268,437],{"class":436},[240,67270,440],{"class":257},[240,67272,67273],{"class":443},"\"all\"",[240,67275,67276],{"class":257},">全选\u003C\u002F",[240,67278,240],{"class":253},[240,67280,447],{"class":257},[240,67282,67283,67285,67287],{"class":242,"line":11667},[240,67284,57340],{"class":257},[240,67286,811],{"class":253},[240,67288,447],{"class":257},[240,67290,67291,67293,67295,67298,67300],{"class":242,"line":11692},[240,67292,57167],{"class":257},[240,67294,811],{"class":253},[240,67296,67297],{"class":257},">商品\u003C\u002F",[240,67299,811],{"class":253},[240,67301,447],{"class":257},[240,67303,67304,67306,67308,67311,67313],{"class":242,"line":11715},[240,67305,57167],{"class":257},[240,67307,811],{"class":253},[240,67309,67310],{"class":257},">商家\u003C\u002F",[240,67312,811],{"class":253},[240,67314,447],{"class":257},[240,67316,67317,67319,67321,67324,67326],{"class":242,"line":11739},[240,67318,57167],{"class":257},[240,67320,811],{"class":253},[240,67322,67323],{"class":257},">价格\u003C\u002F",[240,67325,811],{"class":253},[240,67327,447],{"class":257},[240,67329,67330,67332,67334],{"class":242,"line":11744},[240,67331,53715],{"class":257},[240,67333,808],{"class":253},[240,67335,447],{"class":257},[240,67337,67338,67340,67342],{"class":242,"line":11749},[240,67339,53285],{"class":257},[240,67341,808],{"class":253},[240,67343,447],{"class":257},[240,67345,67346,67348,67350],{"class":242,"line":11754},[240,67347,57167],{"class":257},[240,67349,824],{"class":253},[240,67351,447],{"class":257},[240,67353,67354,67356,67358,67360,67362,67364,67366,67368,67371,67373,67375,67378],{"class":242,"line":11763},[240,67355,57235],{"class":257},[240,67357,55756],{"class":253},[240,67359,55759],{"class":436},[240,67361,440],{"class":257},[240,67363,55764],{"class":443},[240,67365,16869],{"class":436},[240,67367,440],{"class":257},[240,67369,67370],{"class":443},"\"check\"",[240,67372,437],{"class":436},[240,67374,440],{"class":257},[240,67376,67377],{"class":443},"\"ck\"",[240,67379,447],{"class":257},[240,67381,67382,67384,67386],{"class":242,"line":11768},[240,67383,57340],{"class":257},[240,67385,824],{"class":253},[240,67387,447],{"class":257},[240,67389,67390,67392,67394,67396,67398],{"class":242,"line":11774},[240,67391,57167],{"class":257},[240,67393,824],{"class":253},[240,67395,63099],{"class":257},[240,67397,824],{"class":253},[240,67399,447],{"class":257},[240,67401,67402,67404,67406,67409,67411],{"class":242,"line":11795},[240,67403,57167],{"class":257},[240,67405,824],{"class":253},[240,67407,67408],{"class":257},">小米\u003C\u002F",[240,67410,824],{"class":253},[240,67412,447],{"class":257},[240,67414,67415,67417,67419,67422,67424],{"class":242,"line":11801},[240,67416,57167],{"class":257},[240,67418,824],{"class":253},[240,67420,67421],{"class":257},">￥1999\u003C\u002F",[240,67423,824],{"class":253},[240,67425,447],{"class":257},[240,67427,67428,67430,67432],{"class":242,"line":11815},[240,67429,53715],{"class":257},[240,67431,808],{"class":253},[240,67433,447],{"class":257},[240,67435,67436,67438,67440],{"class":242,"line":11821},[240,67437,53285],{"class":257},[240,67439,808],{"class":253},[240,67441,447],{"class":257},[240,67443,67444,67446,67448],{"class":242,"line":11848},[240,67445,57167],{"class":257},[240,67447,824],{"class":253},[240,67449,447],{"class":257},[240,67451,67452,67454,67456,67458,67460,67462,67464,67466,67468,67470,67472,67474],{"class":242,"line":11857},[240,67453,57235],{"class":257},[240,67455,55756],{"class":253},[240,67457,55759],{"class":436},[240,67459,440],{"class":257},[240,67461,55764],{"class":443},[240,67463,16869],{"class":436},[240,67465,440],{"class":257},[240,67467,67370],{"class":443},[240,67469,437],{"class":436},[240,67471,440],{"class":257},[240,67473,67377],{"class":443},[240,67475,447],{"class":257},[240,67477,67478,67480,67482],{"class":242,"line":11863},[240,67479,57340],{"class":257},[240,67481,824],{"class":253},[240,67483,447],{"class":257},[240,67485,67486,67488,67490,67493,67495],{"class":242,"line":11871},[240,67487,57167],{"class":257},[240,67489,824],{"class":253},[240,67491,67492],{"class":257},">小米净水器\u003C\u002F",[240,67494,824],{"class":253},[240,67496,447],{"class":257},[240,67498,67499,67501,67503,67505,67507],{"class":242,"line":11876},[240,67500,57167],{"class":257},[240,67502,824],{"class":253},[240,67504,67408],{"class":257},[240,67506,824],{"class":253},[240,67508,447],{"class":257},[240,67510,67511,67513,67515,67518,67520],{"class":242,"line":18552},[240,67512,57167],{"class":257},[240,67514,824],{"class":253},[240,67516,67517],{"class":257},">￥4999\u003C\u002F",[240,67519,824],{"class":253},[240,67521,447],{"class":257},[240,67523,67524,67526,67528],{"class":242,"line":18558},[240,67525,53715],{"class":257},[240,67527,808],{"class":253},[240,67529,447],{"class":257},[240,67531,67532,67534,67536],{"class":242,"line":18581},[240,67533,53285],{"class":257},[240,67535,808],{"class":253},[240,67537,447],{"class":257},[240,67539,67540,67542,67544],{"class":242,"line":18587},[240,67541,57167],{"class":257},[240,67543,824],{"class":253},[240,67545,447],{"class":257},[240,67547,67548,67550,67552,67554,67556,67558,67560,67562,67564,67566,67568,67570],{"class":242,"line":18610},[240,67549,57235],{"class":257},[240,67551,55756],{"class":253},[240,67553,55759],{"class":436},[240,67555,440],{"class":257},[240,67557,55764],{"class":443},[240,67559,16869],{"class":436},[240,67561,440],{"class":257},[240,67563,67370],{"class":443},[240,67565,437],{"class":436},[240,67567,440],{"class":257},[240,67569,67377],{"class":443},[240,67571,447],{"class":257},[240,67573,67574,67576,67578],{"class":242,"line":18624},[240,67575,57340],{"class":257},[240,67577,824],{"class":253},[240,67579,447],{"class":257},[240,67581,67582,67584,67586,67589,67591],{"class":242,"line":18644},[240,67583,57167],{"class":257},[240,67585,824],{"class":253},[240,67587,67588],{"class":257},">小米电视\u003C\u002F",[240,67590,824],{"class":253},[240,67592,447],{"class":257},[240,67594,67595,67597,67599,67601,67603],{"class":242,"line":18650},[240,67596,57167],{"class":257},[240,67598,824],{"class":253},[240,67600,67408],{"class":257},[240,67602,824],{"class":253},[240,67604,447],{"class":257},[240,67606,67607,67609,67611,67614,67616],{"class":242,"line":18661},[240,67608,57167],{"class":257},[240,67610,824],{"class":253},[240,67612,67613],{"class":257},">￥5999\u003C\u002F",[240,67615,824],{"class":253},[240,67617,447],{"class":257},[240,67619,67620,67622,67624],{"class":242,"line":18684},[240,67621,53715],{"class":257},[240,67623,808],{"class":253},[240,67625,447],{"class":257},[240,67627,67628,67630,67632],{"class":242,"line":18706},[240,67629,54353],{"class":257},[240,67631,802],{"class":253},[240,67633,447],{"class":257},[240,67635,67636,67638,67640],{"class":242,"line":18711},[240,67637,452],{"class":257},[240,67639,53751],{"class":253},[240,67641,447],{"class":257},[240,67643,67644],{"class":242,"line":18717},[240,67645,67646],{"class":246},"    \u002F\u002F 1. 获取大复选框\n",[240,67648,67649,67651,67654,67656,67658,67660,67662,67665],{"class":242,"line":18731},[240,67650,13172],{"class":288},[240,67652,67653],{"class":264}," checkAll",[240,67655,15514],{"class":288},[240,67657,56331],{"class":257},[240,67659,56334],{"class":436},[240,67661,789],{"class":257},[240,67663,67664],{"class":443},"'#checkAll'",[240,67666,2129],{"class":257},[240,67668,67669],{"class":242,"line":18744},[240,67670,67671],{"class":246},"    \u002F\u002F 2. 获取所有的小复选框\n",[240,67673,67674,67676,67679,67681,67683,67685,67687,67690],{"class":242,"line":18749},[240,67675,13172],{"class":288},[240,67677,67678],{"class":264}," cks",[240,67680,15514],{"class":288},[240,67682,56331],{"class":257},[240,67684,57614],{"class":436},[240,67686,789],{"class":257},[240,67688,67689],{"class":443},"'.ck'",[240,67691,2129],{"class":257},[240,67693,67694],{"class":242,"line":18763},[240,67695,67696],{"class":246},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[240,67698,67699,67702,67704,67706,67708,67710,67712],{"class":242,"line":18768},[240,67700,67701],{"class":257},"    checkAll.",[240,67703,59744],{"class":436},[240,67705,789],{"class":257},[240,67707,59749],{"class":443},[240,67709,1277],{"class":257},[240,67711,56384],{"class":288},[240,67713,56387],{"class":257},[240,67715,67716],{"class":242,"line":18774},[240,67717,67718],{"class":246},"      \u002F\u002F 得到当前大复选框的选中状态\n",[240,67720,67721,67724],{"class":242,"line":18779},[240,67722,67723],{"class":246},"      \u002F\u002F console.log(checkAll.checked)",[240,67725,67726],{"class":246},"  \u002F\u002F 得到 是 true 或者是 false\n",[240,67728,67729],{"class":242,"line":18793},[240,67730,67731],{"class":246},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[240,67733,67734,67736,67738,67740,67742,67744,67746,67748,67750,67753,67755,67757,67759],{"class":242,"line":18798},[240,67735,54220],{"class":288},[240,67737,3612],{"class":257},[240,67739,53785],{"class":288},[240,67741,11389],{"class":257},[240,67743,440],{"class":288},[240,67745,6045],{"class":264},[240,67747,11396],{"class":257},[240,67749,431],{"class":288},[240,67751,67752],{"class":257}," cks.",[240,67754,1064],{"class":264},[240,67756,5166],{"class":257},[240,67758,4245],{"class":288},[240,67760,14392],{"class":257},[240,67762,67763,67766,67768,67771],{"class":242,"line":18803},[240,67764,67765],{"class":257},"        cks[i].checked ",[240,67767,440],{"class":288},[240,67769,67770],{"class":264}," this",[240,67772,67773],{"class":257},".checked\n",[240,67775,67776],{"class":242,"line":18817},[240,67777,54334],{"class":257},[240,67779,67780],{"class":242,"line":18829},[240,67781,35407],{"class":257},[240,67783,67784],{"class":242,"line":18834},[240,67785,67786],{"class":246},"    \u002F\u002F 5. 小复选框控制大复选框\n",[240,67788,67789],{"class":242,"line":18847},[240,67790,4353],{"emptyLinePlaceholder":2051},[240,67792,67793,67795,67797,67799,67801,67803,67805,67807,67809,67811,67813,67815,67817],{"class":242,"line":18852},[240,67794,5153],{"class":288},[240,67796,3612],{"class":257},[240,67798,53785],{"class":288},[240,67800,11389],{"class":257},[240,67802,440],{"class":288},[240,67804,6045],{"class":264},[240,67806,11396],{"class":257},[240,67808,431],{"class":288},[240,67810,67752],{"class":257},[240,67812,1064],{"class":264},[240,67814,5166],{"class":257},[240,67816,4245],{"class":288},[240,67818,14392],{"class":257},[240,67820,67821],{"class":242,"line":18857},[240,67822,67823],{"class":246},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[240,67825,67826,67829,67831,67833,67835,67837,67839],{"class":242,"line":18862},[240,67827,67828],{"class":257},"      cks[i].",[240,67830,59744],{"class":436},[240,67832,789],{"class":257},[240,67834,59749],{"class":443},[240,67836,1277],{"class":257},[240,67838,56384],{"class":288},[240,67840,56387],{"class":257},[240,67842,67843],{"class":242,"line":18875},[240,67844,67845],{"class":246},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[240,67847,67848],{"class":242,"line":18880},[240,67849,67850],{"class":246},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[240,67852,67853],{"class":242,"line":34579},[240,67854,67855],{"class":246},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[240,67857,67858],{"class":242,"line":34585},[240,67859,67860],{"class":246},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[240,67862,67863,67866,67868,67870,67872,67874,67877,67879,67881,67883,67885],{"class":242,"line":34591},[240,67864,67865],{"class":257},"        checkAll.checked ",[240,67867,440],{"class":288},[240,67869,56331],{"class":257},[240,67871,57614],{"class":436},[240,67873,789],{"class":257},[240,67875,67876],{"class":443},"'.ck:checked'",[240,67878,32772],{"class":257},[240,67880,1064],{"class":264},[240,67882,59837],{"class":288},[240,67884,67752],{"class":257},[240,67886,57764],{"class":264},[240,67888,67889],{"class":242,"line":34597},[240,67890,66738],{"class":257},[240,67892,67893],{"class":242,"line":34603},[240,67894,4140],{"class":257},[240,67896,67897,67899,67901],{"class":242,"line":34614},[240,67898,54353],{"class":257},[240,67900,53751],{"class":253},[240,67902,447],{"class":257},[240,67904,67905,67907,67909],{"class":242,"line":34620},[240,67906,592],{"class":257},[240,67908,53738],{"class":253},[240,67910,447],{"class":257},[240,67912,67913],{"class":242,"line":34640},[240,67914,4353],{"emptyLinePlaceholder":2051},[240,67916,67917,67919,67921],{"class":242,"line":34646},[240,67918,592],{"class":257},[240,67920,52581],{"class":253},[240,67922,447],{"class":257},[19,67924,67925],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[19,67927,67928],{},"用好之间比较得到的布尔值！！！",[19,67930,67931,67932,67935,67936,3612,67939,2683,67941,67944],{},"在 JS 里访问的时候，",[23,67933,67934],{},"checkbox.checked"," 是一个 ",[68,67937,67938],{},"布尔值",[23,67940,3322],{},[23,67942,67943],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[19,67946,67947,67948,67951,67952],{},"HTML 的 ",[23,67949,67950],{},"checked=\"checked\""," 只是 ",[68,67953,67954,67955,67958],{},"初始值；JS 的 ",[23,67956,67957],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[19,67960,67961],{},"：checked是一个伪类选择器",[19,67963,67964],{},[219,67965],{"alt":236,"src":67966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[19,67968,67969,67972],{},[67970,67971],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[19,67974,67975],{},[219,67976],{"alt":236,"src":67977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[14,67979,67981],{"id":67980},"_33-dom事件进阶","3.3 DOM事件进阶",[32,67983,67985],{"id":67984},"_331-事件流","3.3.1 事件流",[19,67987,67988],{},[219,67989],{"alt":236,"src":67990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[23945,67992,67994],{"id":67993},"_3311-事件捕获","3.3.1.1 事件捕获",[19,67996,67997],{},[219,67998],{"alt":236,"src":67999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[231,68001,68003],{"className":52579,"code":68002,"language":52581,"meta":236,"style":236},"\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",[23,68004,68005,68015,68029,68033,68041,68055,68075,68087,68095,68102,68114,68126,68136,68140,68144,68151,68163,68175,68185,68189,68197,68205,68209,68217,68232,68251,68259,68267,68287,68307,68323,68334,68342,68359,68370,68378,68395,68406,68414,68422,68430,68434],{"__ignoreMap":236},[240,68006,68007,68009,68011,68013],{"class":242,"line":243},[240,68008,53243],{"class":257},[240,68010,53246],{"class":253},[240,68012,53249],{"class":436},[240,68014,447],{"class":257},[240,68016,68017,68019,68021,68023,68025,68027],{"class":242,"line":250},[240,68018,431],{"class":257},[240,68020,52581],{"class":253},[240,68022,53260],{"class":436},[240,68024,440],{"class":257},[240,68026,53265],{"class":443},[240,68028,447],{"class":257},[240,68030,68031],{"class":242,"line":261},[240,68032,4353],{"emptyLinePlaceholder":2051},[240,68034,68035,68037,68039],{"class":242,"line":277},[240,68036,431],{"class":257},[240,68038,53278],{"class":253},[240,68040,447],{"class":257},[240,68042,68043,68045,68047,68049,68051,68053],{"class":242,"line":294},[240,68044,452],{"class":257},[240,68046,53288],{"class":253},[240,68048,53291],{"class":436},[240,68050,440],{"class":257},[240,68052,53296],{"class":443},[240,68054,447],{"class":257},[240,68056,68057,68059,68061,68063,68065,68067,68069,68071,68073],{"class":242,"line":309},[240,68058,452],{"class":257},[240,68060,53288],{"class":253},[240,68062,16869],{"class":436},[240,68064,440],{"class":257},[240,68066,53335],{"class":443},[240,68068,53315],{"class":436},[240,68070,440],{"class":257},[240,68072,53342],{"class":443},[240,68074,447],{"class":257},[240,68076,68077,68079,68081,68083,68085],{"class":242,"line":529},[240,68078,452],{"class":257},[240,68080,53351],{"class":253},[240,68082,53354],{"class":257},[240,68084,53351],{"class":253},[240,68086,447],{"class":257},[240,68088,68089,68091,68093],{"class":242,"line":549},[240,68090,452],{"class":257},[240,68092,2019],{"class":253},[240,68094,447],{"class":257},[240,68096,68097,68100],{"class":242,"line":569},[240,68098,68099],{"class":436},"    .father",[240,68101,258],{"class":257},[240,68103,68104,68106,68108,68110,68112],{"class":242,"line":589},[240,68105,56705],{"class":264},[240,68107,268],{"class":257},[240,68109,66997],{"class":264},[240,68111,289],{"class":288},[240,68113,274],{"class":257},[240,68115,68116,68118,68120,68122,68124],{"class":242,"line":715},[240,68117,56719],{"class":264},[240,68119,268],{"class":257},[240,68121,66997],{"class":264},[240,68123,289],{"class":288},[240,68125,274],{"class":257},[240,68127,68128,68130,68132,68134],{"class":242,"line":727},[240,68129,56818],{"class":264},[240,68131,268],{"class":257},[240,68133,1924],{"class":264},[240,68135,274],{"class":257},[240,68137,68138],{"class":242,"line":1730},[240,68139,4140],{"class":257},[240,68141,68142],{"class":242,"line":3582},[240,68143,4353],{"emptyLinePlaceholder":2051},[240,68145,68146,68149],{"class":242,"line":3596},[240,68147,68148],{"class":436},"    .son",[240,68150,258],{"class":257},[240,68152,68153,68155,68157,68159,68161],{"class":242,"line":3601},[240,68154,56705],{"class":264},[240,68156,268],{"class":257},[240,68158,3676],{"class":264},[240,68160,289],{"class":288},[240,68162,274],{"class":257},[240,68164,68165,68167,68169,68171,68173],{"class":242,"line":3607},[240,68166,56719],{"class":264},[240,68168,268],{"class":257},[240,68170,3676],{"class":264},[240,68172,289],{"class":288},[240,68174,274],{"class":257},[240,68176,68177,68179,68181,68183],{"class":242,"line":3628},[240,68178,56818],{"class":264},[240,68180,268],{"class":257},[240,68182,56823],{"class":264},[240,68184,274],{"class":257},[240,68186,68187],{"class":242,"line":3633},[240,68188,4140],{"class":257},[240,68190,68191,68193,68195],{"class":242,"line":3647},[240,68192,54353],{"class":257},[240,68194,2019],{"class":253},[240,68196,447],{"class":257},[240,68198,68199,68201,68203],{"class":242,"line":3652},[240,68200,592],{"class":257},[240,68202,53278],{"class":253},[240,68204,447],{"class":257},[240,68206,68207],{"class":242,"line":3681},[240,68208,4353],{"emptyLinePlaceholder":2051},[240,68210,68211,68213,68215],{"class":242,"line":3686},[240,68212,431],{"class":257},[240,68214,53738],{"class":253},[240,68216,447],{"class":257},[240,68218,68219,68221,68223,68225,68227,68230],{"class":242,"line":3703},[240,68220,452],{"class":257},[240,68222,330],{"class":253},[240,68224,437],{"class":436},[240,68226,440],{"class":257},[240,68228,68229],{"class":443},"\"father\"",[240,68231,447],{"class":257},[240,68233,68234,68236,68238,68240,68242,68245,68247,68249],{"class":242,"line":3708},[240,68235,53285],{"class":257},[240,68237,330],{"class":253},[240,68239,437],{"class":436},[240,68241,440],{"class":257},[240,68243,68244],{"class":443},"\"son\"",[240,68246,57247],{"class":257},[240,68248,330],{"class":253},[240,68250,447],{"class":257},[240,68252,68253,68255,68257],{"class":242,"line":3713},[240,68254,54353],{"class":257},[240,68256,330],{"class":253},[240,68258,447],{"class":257},[240,68260,68261,68263,68265],{"class":242,"line":3718},[240,68262,452],{"class":257},[240,68264,53751],{"class":253},[240,68266,447],{"class":257},[240,68268,68269,68271,68274,68276,68278,68280,68282,68285],{"class":242,"line":3732},[240,68270,13172],{"class":288},[240,68272,68273],{"class":264}," fa",[240,68275,15514],{"class":288},[240,68277,56331],{"class":257},[240,68279,56334],{"class":436},[240,68281,789],{"class":257},[240,68283,68284],{"class":443},"'.father'",[240,68286,2129],{"class":257},[240,68288,68289,68291,68294,68296,68298,68300,68302,68305],{"class":242,"line":3737},[240,68290,13172],{"class":288},[240,68292,68293],{"class":264}," son",[240,68295,15514],{"class":288},[240,68297,56331],{"class":257},[240,68299,56334],{"class":436},[240,68301,789],{"class":257},[240,68303,68304],{"class":443},"'.son'",[240,68306,2129],{"class":257},[240,68308,68309,68311,68313,68315,68317,68319,68321],{"class":242,"line":4530},[240,68310,54343],{"class":257},[240,68312,59744],{"class":436},[240,68314,789],{"class":257},[240,68316,59749],{"class":443},[240,68318,1277],{"class":257},[240,68320,56384],{"class":288},[240,68322,56387],{"class":257},[240,68324,68325,68327,68329,68332],{"class":242,"line":4544},[240,68326,60856],{"class":436},[240,68328,789],{"class":257},[240,68330,68331],{"class":443},"'woshiu1'",[240,68333,2129],{"class":257},[240,68335,68336,68338,68340],{"class":242,"line":4552},[240,68337,56470],{"class":257},[240,68339,3322],{"class":264},[240,68341,2129],{"class":257},[240,68343,68344,68347,68349,68351,68353,68355,68357],{"class":242,"line":4557},[240,68345,68346],{"class":257},"    fa.",[240,68348,59744],{"class":436},[240,68350,789],{"class":257},[240,68352,59749],{"class":443},[240,68354,1277],{"class":257},[240,68356,56384],{"class":288},[240,68358,56387],{"class":257},[240,68360,68361,68363,68365,68368],{"class":242,"line":4563},[240,68362,60856],{"class":436},[240,68364,789],{"class":257},[240,68366,68367],{"class":443},"'1'",[240,68369,2129],{"class":257},[240,68371,68372,68374,68376],{"class":242,"line":4569},[240,68373,56470],{"class":257},[240,68375,3322],{"class":264},[240,68377,2129],{"class":257},[240,68379,68380,68383,68385,68387,68389,68391,68393],{"class":242,"line":4574},[240,68381,68382],{"class":257},"    son.",[240,68384,59744],{"class":436},[240,68386,789],{"class":257},[240,68388,59749],{"class":443},[240,68390,1277],{"class":257},[240,68392,56384],{"class":288},[240,68394,56387],{"class":257},[240,68396,68397,68399,68401,68404],{"class":242,"line":9899},[240,68398,60856],{"class":436},[240,68400,789],{"class":257},[240,68402,68403],{"class":443},"'2'",[240,68405,2129],{"class":257},[240,68407,68408,68410,68412],{"class":242,"line":9923},[240,68409,56470],{"class":257},[240,68411,3322],{"class":264},[240,68413,2129],{"class":257},[240,68415,68416,68418,68420],{"class":242,"line":9928},[240,68417,54353],{"class":257},[240,68419,53751],{"class":253},[240,68421,447],{"class":257},[240,68423,68424,68426,68428],{"class":242,"line":9934},[240,68425,592],{"class":257},[240,68427,53738],{"class":253},[240,68429,447],{"class":257},[240,68431,68432],{"class":242,"line":9961},[240,68433,4353],{"emptyLinePlaceholder":2051},[240,68435,68436,68438,68440],{"class":242,"line":9966},[240,68437,592],{"class":257},[240,68439,52581],{"class":253},[240,68441,447],{"class":257},[19,68443,68444],{},[219,68445],{"alt":236,"src":68446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[19,68448,68449],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[23945,68451,68453],{"id":68452},"_3312-事件冒泡","3.3.1.2 事件冒泡",[19,68455,68456],{},[219,68457],{"alt":236,"src":68458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[19,68460,68461],{},"反着来",[19,68463,68464],{},"注意是同名事件，比如都是‘click’",[23945,68466,68468],{"id":68467},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[19,68470,68471],{},[219,68472],{"alt":236,"src":68473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[23945,68475,68477],{"id":68476},"_3314-解绑事件","3.3.1.4 解绑事件",[19,68479,68480],{},[219,68481],{"alt":236,"src":68482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[19,68484,68485],{},[219,68486],{"alt":236,"src":68487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[23945,68489,68491],{"id":68490},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[1826,68493,68494],{},[1829,68495,68496],{},"事件类型的区别",[19,68498,68499],{},[219,68500],{"alt":236,"src":68501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[19,68503,68504],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[1826,68506,68507],{"start":250},[1829,68508,68509],{},"注册事件的区别",[19,68511,68512],{},[219,68513],{"alt":236,"src":68514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[23945,68516,68518],{"id":68517},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[19,68520,68521],{},[219,68522],{"alt":236,"src":68523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[19,68525,68526],{},[219,68527],{"alt":236,"src":68528},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[231,68530,68532],{"className":55003,"code":68531,"language":55005,"meta":236,"style":236},"\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",[23,68533,68534,68542,68559,68582,68590,68595,68600,68605,68609,68617,68625],{"__ignoreMap":236},[240,68535,68536,68538,68540],{"class":242,"line":243},[240,68537,431],{"class":257},[240,68539,53738],{"class":253},[240,68541,447],{"class":257},[240,68543,68544,68546,68549,68552,68554,68557],{"class":242,"line":250},[240,68545,452],{"class":257},[240,68547,68548],{"class":253},"form",[240,68550,68551],{"class":436}," action",[240,68553,440],{"class":257},[240,68555,68556],{"class":443},"\"http:\u002F\u002Fwww.itcast.cn\"",[240,68558,447],{"class":257},[240,68560,68561,68563,68565,68567,68569,68572,68575,68577,68580],{"class":242,"line":261},[240,68562,53285],{"class":257},[240,68564,55756],{"class":253},[240,68566,55759],{"class":436},[240,68568,440],{"class":257},[240,68570,68571],{"class":443},"\"submit\"",[240,68573,68574],{"class":436}," value",[240,68576,440],{"class":257},[240,68578,68579],{"class":443},"\"免费注册\"",[240,68581,447],{"class":257},[240,68583,68584,68586,68588],{"class":242,"line":277},[240,68585,53285],{"class":257},[240,68587,53751],{"class":253},[240,68589,447],{"class":257},[240,68591,68592],{"class":242,"line":294},[240,68593,68594],{"class":257},"      const form = document.querySelector('form')\n",[240,68596,68597],{"class":242,"line":309},[240,68598,68599],{"class":257},"      form.addEventListener('submit', function (e) {\n",[240,68601,68602],{"class":242,"line":529},[240,68603,68604],{"class":257},"        e.preventDefault()\n",[240,68606,68607],{"class":242,"line":549},[240,68608,66738],{"class":257},[240,68610,68611,68613,68615],{"class":242,"line":569},[240,68612,53715],{"class":257},[240,68614,53751],{"class":253},[240,68616,447],{"class":257},[240,68618,68619,68621,68623],{"class":242,"line":589},[240,68620,54353],{"class":257},[240,68622,68548],{"class":253},[240,68624,447],{"class":257},[240,68626,68627,68629,68631],{"class":242,"line":715},[240,68628,592],{"class":257},[240,68630,53738],{"class":253},[240,68632,447],{"class":257},[19,68634,68635],{},"点击不在跳转！！！",[32,68637,68639],{"id":68638},"_332-事件委托","3.3.2 事件委托",[19,68641,68642],{},[219,68643],{"alt":236,"src":68644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[231,68646,68648],{"className":52579,"code":68647,"language":52581,"meta":236,"style":236},"\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",[23,68649,68650,68660,68674,68678,68686,68700,68720,68732,68740,68744,68752,68760,68772,68784,68796,68808,68820,68833,68841,68849,68854,68873,68894,68899,68904,68909,68914,68923,68927,68937,68941,68946,68951,68965,68975,68979,68983,68991,68999,69003],{"__ignoreMap":236},[240,68651,68652,68654,68656,68658],{"class":242,"line":243},[240,68653,53243],{"class":257},[240,68655,53246],{"class":253},[240,68657,53249],{"class":436},[240,68659,447],{"class":257},[240,68661,68662,68664,68666,68668,68670,68672],{"class":242,"line":250},[240,68663,431],{"class":257},[240,68665,52581],{"class":253},[240,68667,53260],{"class":436},[240,68669,440],{"class":257},[240,68671,53265],{"class":443},[240,68673,447],{"class":257},[240,68675,68676],{"class":242,"line":261},[240,68677,4353],{"emptyLinePlaceholder":2051},[240,68679,68680,68682,68684],{"class":242,"line":277},[240,68681,431],{"class":257},[240,68683,53278],{"class":253},[240,68685,447],{"class":257},[240,68687,68688,68690,68692,68694,68696,68698],{"class":242,"line":294},[240,68689,452],{"class":257},[240,68691,53288],{"class":253},[240,68693,53291],{"class":436},[240,68695,440],{"class":257},[240,68697,53296],{"class":443},[240,68699,447],{"class":257},[240,68701,68702,68704,68706,68708,68710,68712,68714,68716,68718],{"class":242,"line":309},[240,68703,452],{"class":257},[240,68705,53288],{"class":253},[240,68707,16869],{"class":436},[240,68709,440],{"class":257},[240,68711,53335],{"class":443},[240,68713,53315],{"class":436},[240,68715,440],{"class":257},[240,68717,53342],{"class":443},[240,68719,447],{"class":257},[240,68721,68722,68724,68726,68728,68730],{"class":242,"line":529},[240,68723,452],{"class":257},[240,68725,53351],{"class":253},[240,68727,53354],{"class":257},[240,68729,53351],{"class":253},[240,68731,447],{"class":257},[240,68733,68734,68736,68738],{"class":242,"line":549},[240,68735,592],{"class":257},[240,68737,53278],{"class":253},[240,68739,447],{"class":257},[240,68741,68742],{"class":242,"line":569},[240,68743,4353],{"emptyLinePlaceholder":2051},[240,68745,68746,68748,68750],{"class":242,"line":589},[240,68747,431],{"class":257},[240,68749,53738],{"class":253},[240,68751,447],{"class":257},[240,68753,68754,68756,68758],{"class":242,"line":715},[240,68755,452],{"class":257},[240,68757,3100],{"class":253},[240,68759,447],{"class":257},[240,68761,68762,68764,68766,68768,68770],{"class":242,"line":727},[240,68763,53285],{"class":257},[240,68765,1829],{"class":253},[240,68767,55901],{"class":257},[240,68769,1829],{"class":253},[240,68771,447],{"class":257},[240,68773,68774,68776,68778,68780,68782],{"class":242,"line":1730},[240,68775,53285],{"class":257},[240,68777,1829],{"class":253},[240,68779,55920],{"class":257},[240,68781,1829],{"class":253},[240,68783,447],{"class":257},[240,68785,68786,68788,68790,68792,68794],{"class":242,"line":3582},[240,68787,53285],{"class":257},[240,68789,1829],{"class":253},[240,68791,55939],{"class":257},[240,68793,1829],{"class":253},[240,68795,447],{"class":257},[240,68797,68798,68800,68802,68804,68806],{"class":242,"line":3596},[240,68799,53285],{"class":257},[240,68801,1829],{"class":253},[240,68803,55958],{"class":257},[240,68805,1829],{"class":253},[240,68807,447],{"class":257},[240,68809,68810,68812,68814,68816,68818],{"class":242,"line":3601},[240,68811,53285],{"class":257},[240,68813,1829],{"class":253},[240,68815,55977],{"class":257},[240,68817,1829],{"class":253},[240,68819,447],{"class":257},[240,68821,68822,68824,68826,68829,68831],{"class":242,"line":3607},[240,68823,53285],{"class":257},[240,68825,19],{"class":253},[240,68827,68828],{"class":257},">我不需要变色\u003C\u002F",[240,68830,19],{"class":253},[240,68832,447],{"class":257},[240,68834,68835,68837,68839],{"class":242,"line":3628},[240,68836,54353],{"class":257},[240,68838,3100],{"class":253},[240,68840,447],{"class":257},[240,68842,68843,68845,68847],{"class":242,"line":3633},[240,68844,452],{"class":257},[240,68846,53751],{"class":253},[240,68848,447],{"class":257},[240,68850,68851],{"class":242,"line":3647},[240,68852,68853],{"class":246},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[240,68855,68856,68858,68860,68862,68864,68866,68868,68871],{"class":242,"line":3652},[240,68857,13172],{"class":288},[240,68859,63218],{"class":264},[240,68861,15514],{"class":288},[240,68863,56331],{"class":257},[240,68865,56334],{"class":436},[240,68867,789],{"class":257},[240,68869,68870],{"class":443},"'ul'",[240,68872,2129],{"class":257},[240,68874,68875,68878,68880,68882,68884,68886,68888,68890,68892],{"class":242,"line":3681},[240,68876,68877],{"class":257},"    ul.",[240,68879,59744],{"class":436},[240,68881,789],{"class":257},[240,68883,59749],{"class":443},[240,68885,1277],{"class":257},[240,68887,56384],{"class":288},[240,68889,3612],{"class":257},[240,68891,2192],{"class":792},[240,68893,14392],{"class":257},[240,68895,68896],{"class":242,"line":3686},[240,68897,68898],{"class":246},"      \u002F\u002F alert(1)\n",[240,68900,68901],{"class":242,"line":3703},[240,68902,68903],{"class":246},"      \u002F\u002F e.target就是我们点击的对象\n",[240,68905,68906],{"class":242,"line":3708},[240,68907,68908],{"class":246},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[240,68910,68911],{"class":242,"line":3713},[240,68912,68913],{"class":246},"      \u002F\u002F e.target.style.color = 'red'\n",[240,68915,68916,68918,68920],{"class":242,"line":3718},[240,68917,60175],{"class":257},[240,68919,60178],{"class":436},[240,68921,68922],{"class":257},"(e)\n",[240,68924,68925],{"class":242,"line":3732},[240,68926,4353],{"emptyLinePlaceholder":2051},[240,68928,68929,68931,68934],{"class":242,"line":3737},[240,68930,60175],{"class":257},[240,68932,68933],{"class":436},"dir",[240,68935,68936],{"class":257},"(e.target)\n",[240,68938,68939],{"class":242,"line":4530},[240,68940,4353],{"emptyLinePlaceholder":2051},[240,68942,68943],{"class":242,"line":4544},[240,68944,68945],{"class":246},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[240,68947,68948],{"class":242,"line":4552},[240,68949,68950],{"class":246},"      \u002F\u002F 通过tagName来进行判断\n",[240,68952,68953,68955,68958,68960,68963],{"class":242,"line":4557},[240,68954,56415],{"class":288},[240,68956,68957],{"class":257}," (e.target.tagName ",[240,68959,56421],{"class":288},[240,68961,68962],{"class":443}," 'LI'",[240,68964,14392],{"class":257},[240,68966,68967,68970,68972],{"class":242,"line":4563},[240,68968,68969],{"class":257},"        e.target.style.color ",[240,68971,440],{"class":288},[240,68973,68974],{"class":443}," 'red'\n",[240,68976,68977],{"class":242,"line":4569},[240,68978,54334],{"class":257},[240,68980,68981],{"class":242,"line":4574},[240,68982,35407],{"class":257},[240,68984,68985,68987,68989],{"class":242,"line":9899},[240,68986,54353],{"class":257},[240,68988,53751],{"class":253},[240,68990,447],{"class":257},[240,68992,68993,68995,68997],{"class":242,"line":9923},[240,68994,592],{"class":257},[240,68996,53738],{"class":253},[240,68998,447],{"class":257},[240,69000,69001],{"class":242,"line":9928},[240,69002,4353],{"emptyLinePlaceholder":2051},[240,69004,69005,69007,69009],{"class":242,"line":9934},[240,69006,592],{"class":257},[240,69008,52581],{"class":253},[240,69010,447],{"class":257},[19,69012,69013],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[19,69015,69016],{},"if(e.target.ragName==='P') {}",[19,69018,69019],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[19,69021,69022],{},"通过事件委托的方式实现tab栏切换改造：",[19,69024,69025],{},"一定要记住自定义属性！！！！！！",[19,69027,69028],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[19,69030,69031],{},"id是自定义的属性名",[19,69033,69034],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[231,69036,69038],{"className":52579,"code":69037,"language":52581,"meta":236,"style":236},"\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",[23,69039,69040,69050,69064,69068,69076,69090,69110,69130,69142,69150,69156,69166,69176,69180,69184,69190,69202,69214,69226,69242,69246,69250,69256,69268,69280,69292,69302,69312,69316,69320,69328,69340,69350,69362,69366,69370,69378,69388,69398,69408,69412,69416,69426,69440,69452,69456,69460,69472,69482,69498,69508,69512,69516,69530,69540,69550,69554,69558,69564,69578,69582,69586,69594,69604,69608,69612,69621,69631,69635,69643,69651,69655,69663,69677,69691,69703,69711,69750,69782,69814,69846,69878,69886,69894,69908,69942,69976,70010,70044,70078,70086,70094,70102,70107,70112,70131,70136,70156,70164,70169,70182,70203,70216,70220,70225,70230,70243,70263,70291,70295,70299,70303,70311,70319,70323],{"__ignoreMap":236},[240,69041,69042,69044,69046,69048],{"class":242,"line":243},[240,69043,53243],{"class":257},[240,69045,53246],{"class":253},[240,69047,53249],{"class":436},[240,69049,447],{"class":257},[240,69051,69052,69054,69056,69058,69060,69062],{"class":242,"line":250},[240,69053,431],{"class":257},[240,69055,52581],{"class":253},[240,69057,53260],{"class":436},[240,69059,440],{"class":257},[240,69061,53265],{"class":443},[240,69063,447],{"class":257},[240,69065,69066],{"class":242,"line":261},[240,69067,4353],{"emptyLinePlaceholder":2051},[240,69069,69070,69072,69074],{"class":242,"line":277},[240,69071,431],{"class":257},[240,69073,53278],{"class":253},[240,69075,447],{"class":257},[240,69077,69078,69080,69082,69084,69086,69088],{"class":242,"line":294},[240,69079,452],{"class":257},[240,69081,53288],{"class":253},[240,69083,53291],{"class":436},[240,69085,440],{"class":257},[240,69087,53296],{"class":443},[240,69089,61058],{"class":257},[240,69091,69092,69094,69096,69098,69100,69102,69104,69106,69108],{"class":242,"line":309},[240,69093,452],{"class":257},[240,69095,53288],{"class":253},[240,69097,53307],{"class":436},[240,69099,440],{"class":257},[240,69101,53312],{"class":443},[240,69103,53315],{"class":436},[240,69105,440],{"class":257},[240,69107,53320],{"class":443},[240,69109,61058],{"class":257},[240,69111,69112,69114,69116,69118,69120,69122,69124,69126,69128],{"class":242,"line":529},[240,69113,452],{"class":257},[240,69115,53288],{"class":253},[240,69117,16869],{"class":436},[240,69119,440],{"class":257},[240,69121,53335],{"class":443},[240,69123,53315],{"class":436},[240,69125,440],{"class":257},[240,69127,53342],{"class":443},[240,69129,61058],{"class":257},[240,69131,69132,69134,69136,69138,69140],{"class":242,"line":549},[240,69133,452],{"class":257},[240,69135,53351],{"class":253},[240,69137,65548],{"class":257},[240,69139,53351],{"class":253},[240,69141,447],{"class":257},[240,69143,69144,69146,69148],{"class":242,"line":569},[240,69145,452],{"class":257},[240,69147,2019],{"class":253},[240,69149,447],{"class":257},[240,69151,69152,69154],{"class":242,"line":589},[240,69153,8354],{"class":253},[240,69155,258],{"class":257},[240,69157,69158,69160,69162,69164],{"class":242,"line":715},[240,69159,56641],{"class":264},[240,69161,268],{"class":257},[240,69163,1274],{"class":264},[240,69165,274],{"class":257},[240,69167,69168,69170,69172,69174],{"class":242,"line":727},[240,69169,56630],{"class":264},[240,69171,268],{"class":257},[240,69173,1274],{"class":264},[240,69175,274],{"class":257},[240,69177,69178],{"class":242,"line":1730},[240,69179,4140],{"class":257},[240,69181,69182],{"class":242,"line":3582},[240,69183,4353],{"emptyLinePlaceholder":2051},[240,69185,69186,69188],{"class":242,"line":3596},[240,69187,65599],{"class":436},[240,69189,258],{"class":257},[240,69191,69192,69194,69196,69198,69200],{"class":242,"line":3601},[240,69193,56705],{"class":264},[240,69195,268],{"class":257},[240,69197,65610],{"class":264},[240,69199,289],{"class":288},[240,69201,274],{"class":257},[240,69203,69204,69206,69208,69210,69212],{"class":242,"line":3607},[240,69205,56719],{"class":264},[240,69207,268],{"class":257},[240,69209,65623],{"class":264},[240,69211,289],{"class":288},[240,69213,274],{"class":257},[240,69215,69216,69218,69220,69222,69224],{"class":242,"line":3628},[240,69217,56641],{"class":264},[240,69219,268],{"class":257},[240,69221,1000],{"class":264},[240,69223,289],{"class":288},[240,69225,274],{"class":257},[240,69227,69228,69230,69232,69234,69236,69238,69240],{"class":242,"line":3633},[240,69229,63901],{"class":264},[240,69231,268],{"class":257},[240,69233,1643],{"class":264},[240,69235,289],{"class":288},[240,69237,53463],{"class":264},[240,69239,64168],{"class":264},[240,69241,274],{"class":257},[240,69243,69244],{"class":242,"line":3647},[240,69245,4140],{"class":257},[240,69247,69248],{"class":242,"line":3652},[240,69249,4353],{"emptyLinePlaceholder":2051},[240,69251,69252,69254],{"class":242,"line":3681},[240,69253,65668],{"class":436},[240,69255,258],{"class":257},[240,69257,69258,69260,69262,69264,69266],{"class":242,"line":3686},[240,69259,56705],{"class":264},[240,69261,268],{"class":257},[240,69263,285],{"class":264},[240,69265,2429],{"class":288},[240,69267,274],{"class":257},[240,69269,69270,69272,69274,69276,69278],{"class":242,"line":3703},[240,69271,56719],{"class":264},[240,69273,268],{"class":257},[240,69275,3002],{"class":264},[240,69277,289],{"class":288},[240,69279,274],{"class":257},[240,69281,69282,69284,69286,69288,69290],{"class":242,"line":3708},[240,69283,59292],{"class":264},[240,69285,268],{"class":257},[240,69287,3002],{"class":264},[240,69289,289],{"class":288},[240,69291,274],{"class":257},[240,69293,69294,69296,69298,69300],{"class":242,"line":3713},[240,69295,56943],{"class":264},[240,69297,268],{"class":257},[240,69299,53420],{"class":264},[240,69301,274],{"class":257},[240,69303,69304,69306,69308,69310],{"class":242,"line":3718},[240,69305,56954],{"class":264},[240,69307,268],{"class":257},[240,69309,53607],{"class":264},[240,69311,274],{"class":257},[240,69313,69314],{"class":242,"line":3732},[240,69315,4140],{"class":257},[240,69317,69318],{"class":242,"line":3737},[240,69319,4353],{"emptyLinePlaceholder":2051},[240,69321,69322,69324,69326],{"class":242,"line":4530},[240,69323,65668],{"class":436},[240,69325,65741],{"class":253},[240,69327,258],{"class":257},[240,69329,69330,69332,69334,69336,69338],{"class":242,"line":4544},[240,69331,56856],{"class":264},[240,69333,268],{"class":257},[240,69335,2897],{"class":264},[240,69337,289],{"class":288},[240,69339,274],{"class":257},[240,69341,69342,69344,69346,69348],{"class":242,"line":4552},[240,69343,64258],{"class":264},[240,69345,268],{"class":257},[240,69347,65764],{"class":264},[240,69349,274],{"class":257},[240,69351,69352,69354,69356,69358,69360],{"class":242,"line":4557},[240,69353,63924],{"class":264},[240,69355,268],{"class":257},[240,69357,1000],{"class":264},[240,69359,289],{"class":288},[240,69361,274],{"class":257},[240,69363,69364],{"class":242,"line":4563},[240,69365,4140],{"class":257},[240,69367,69368],{"class":242,"line":4569},[240,69369,4353],{"emptyLinePlaceholder":2051},[240,69371,69372,69374,69376],{"class":242,"line":4574},[240,69373,65668],{"class":436},[240,69375,63218],{"class":253},[240,69377,258],{"class":257},[240,69379,69380,69382,69384,69386],{"class":242,"line":9899},[240,69381,56667],{"class":264},[240,69383,268],{"class":257},[240,69385,826],{"class":264},[240,69387,274],{"class":257},[240,69389,69390,69392,69394,69396],{"class":242,"line":9923},[240,69391,56943],{"class":264},[240,69393,268],{"class":257},[240,69395,53420],{"class":264},[240,69397,274],{"class":257},[240,69399,69400,69402,69404,69406],{"class":242,"line":9928},[240,69401,56954],{"class":264},[240,69403,268],{"class":257},[240,69405,53522],{"class":264},[240,69407,274],{"class":257},[240,69409,69410],{"class":242,"line":9934},[240,69411,4140],{"class":257},[240,69413,69414],{"class":242,"line":9961},[240,69415,4353],{"emptyLinePlaceholder":2051},[240,69417,69418,69420,69422,69424],{"class":242,"line":9966},[240,69419,65668],{"class":436},[240,69421,63218],{"class":253},[240,69423,57009],{"class":253},[240,69425,258],{"class":257},[240,69427,69428,69430,69432,69434,69436,69438],{"class":242,"line":9972},[240,69429,56641],{"class":264},[240,69431,268],{"class":257},[240,69433,1274],{"class":264},[240,69435,10901],{"class":264},[240,69437,289],{"class":288},[240,69439,274],{"class":257},[240,69441,69442,69444,69446,69448,69450],{"class":242,"line":9984},[240,69443,56856],{"class":264},[240,69445,268],{"class":257},[240,69447,2648],{"class":264},[240,69449,289],{"class":288},[240,69451,274],{"class":257},[240,69453,69454],{"class":242,"line":9996},[240,69455,4140],{"class":257},[240,69457,69458],{"class":242,"line":10008},[240,69459,4353],{"emptyLinePlaceholder":2051},[240,69461,69462,69464,69466,69468,69470],{"class":242,"line":11667},[240,69463,65668],{"class":436},[240,69465,63218],{"class":253},[240,69467,57009],{"class":253},[240,69469,609],{"class":253},[240,69471,258],{"class":257},[240,69473,69474,69476,69478,69480],{"class":242,"line":11692},[240,69475,65893],{"class":264},[240,69477,268],{"class":257},[240,69479,826],{"class":264},[240,69481,274],{"class":257},[240,69483,69484,69486,69488,69490,69492,69494,69496],{"class":242,"line":11715},[240,69485,64156],{"class":264},[240,69487,268],{"class":257},[240,69489,1668],{"class":264},[240,69491,289],{"class":288},[240,69493,53463],{"class":264},[240,69495,65914],{"class":264},[240,69497,274],{"class":257},[240,69499,69500,69502,69504,69506],{"class":242,"line":11739},[240,69501,59349],{"class":264},[240,69503,268],{"class":257},[240,69505,1799],{"class":264},[240,69507,274],{"class":257},[240,69509,69510],{"class":242,"line":11744},[240,69511,4140],{"class":257},[240,69513,69514],{"class":242,"line":11749},[240,69515,4353],{"emptyLinePlaceholder":2051},[240,69517,69518,69520,69522,69524,69526,69528],{"class":242,"line":11754},[240,69519,65668],{"class":436},[240,69521,63218],{"class":253},[240,69523,57009],{"class":253},[240,69525,609],{"class":253},[240,69527,65947],{"class":436},[240,69529,258],{"class":257},[240,69531,69532,69534,69536,69538],{"class":242,"line":11763},[240,69533,63715],{"class":264},[240,69535,268],{"class":257},[240,69537,65958],{"class":264},[240,69539,274],{"class":257},[240,69541,69542,69544,69546,69548],{"class":242,"line":11768},[240,69543,59349],{"class":264},[240,69545,268],{"class":257},[240,69547,65958],{"class":264},[240,69549,274],{"class":257},[240,69551,69552],{"class":242,"line":11774},[240,69553,4140],{"class":257},[240,69555,69556],{"class":242,"line":11795},[240,69557,4353],{"emptyLinePlaceholder":2051},[240,69559,69560,69562],{"class":242,"line":11801},[240,69561,65983],{"class":436},[240,69563,258],{"class":257},[240,69565,69566,69568,69570,69572,69574,69576],{"class":242,"line":11815},[240,69567,56630],{"class":264},[240,69569,268],{"class":257},[240,69571,1274],{"class":264},[240,69573,65996],{"class":264},[240,69575,289],{"class":288},[240,69577,274],{"class":257},[240,69579,69580],{"class":242,"line":11821},[240,69581,4140],{"class":257},[240,69583,69584],{"class":242,"line":11848},[240,69585,4353],{"emptyLinePlaceholder":2051},[240,69587,69588,69590,69592],{"class":242,"line":11857},[240,69589,65983],{"class":436},[240,69591,64098],{"class":436},[240,69593,258],{"class":257},[240,69595,69596,69598,69600,69602],{"class":242,"line":11863},[240,69597,56943],{"class":264},[240,69599,268],{"class":257},[240,69601,826],{"class":264},[240,69603,274],{"class":257},[240,69605,69606],{"class":242,"line":11871},[240,69607,4140],{"class":257},[240,69609,69610],{"class":242,"line":11876},[240,69611,4353],{"emptyLinePlaceholder":2051},[240,69613,69614,69616,69619],{"class":242,"line":18552},[240,69615,65983],{"class":436},[240,69617,69618],{"class":436}," .active",[240,69620,258],{"class":257},[240,69622,69623,69625,69627,69629],{"class":242,"line":18558},[240,69624,56943],{"class":264},[240,69626,268],{"class":257},[240,69628,271],{"class":264},[240,69630,274],{"class":257},[240,69632,69633],{"class":242,"line":18581},[240,69634,4140],{"class":257},[240,69636,69637,69639,69641],{"class":242,"line":18587},[240,69638,54353],{"class":257},[240,69640,2019],{"class":253},[240,69642,447],{"class":257},[240,69644,69645,69647,69649],{"class":242,"line":18610},[240,69646,592],{"class":257},[240,69648,53278],{"class":253},[240,69650,447],{"class":257},[240,69652,69653],{"class":242,"line":18624},[240,69654,4353],{"emptyLinePlaceholder":2051},[240,69656,69657,69659,69661],{"class":242,"line":18644},[240,69658,431],{"class":257},[240,69660,53738],{"class":253},[240,69662,447],{"class":257},[240,69664,69665,69667,69669,69671,69673,69675],{"class":242,"line":18650},[240,69666,452],{"class":257},[240,69668,330],{"class":253},[240,69670,437],{"class":436},[240,69672,440],{"class":257},[240,69674,66098],{"class":443},[240,69676,447],{"class":257},[240,69678,69679,69681,69683,69685,69687,69689],{"class":242,"line":18661},[240,69680,53285],{"class":257},[240,69682,330],{"class":253},[240,69684,437],{"class":436},[240,69686,440],{"class":257},[240,69688,66113],{"class":443},[240,69690,447],{"class":257},[240,69692,69693,69695,69697,69699,69701],{"class":242,"line":18684},[240,69694,57167],{"class":257},[240,69696,32],{"class":253},[240,69698,66124],{"class":257},[240,69700,32],{"class":253},[240,69702,447],{"class":257},[240,69704,69705,69707,69709],{"class":242,"line":18706},[240,69706,57167],{"class":257},[240,69708,3100],{"class":253},[240,69710,447],{"class":257},[240,69712,69713,69715,69717,69719,69721,69723,69725,69727,69729,69731,69733,69735,69737,69740,69742,69744,69746,69748],{"class":242,"line":18711},[240,69714,57235],{"class":257},[240,69716,1829],{"class":253},[240,69718,62980],{"class":257},[240,69720,254],{"class":253},[240,69722,437],{"class":436},[240,69724,440],{"class":257},[240,69726,61637],{"class":443},[240,69728,457],{"class":436},[240,69730,440],{"class":257},[240,69732,66159],{"class":443},[240,69734,55886],{"class":436},[240,69736,440],{"class":257},[240,69738,69739],{"class":443},"\"0\"",[240,69741,66162],{"class":257},[240,69743,254],{"class":253},[240,69745,57247],{"class":257},[240,69747,1829],{"class":253},[240,69749,447],{"class":257},[240,69751,69752,69754,69756,69758,69760,69762,69764,69766,69768,69770,69772,69774,69776,69778,69780],{"class":242,"line":18717},[240,69753,57235],{"class":257},[240,69755,1829],{"class":253},[240,69757,62980],{"class":257},[240,69759,254],{"class":253},[240,69761,457],{"class":436},[240,69763,440],{"class":257},[240,69765,66159],{"class":443},[240,69767,55886],{"class":436},[240,69769,440],{"class":257},[240,69771,5630],{"class":443},[240,69773,66189],{"class":257},[240,69775,254],{"class":253},[240,69777,57247],{"class":257},[240,69779,1829],{"class":253},[240,69781,447],{"class":257},[240,69783,69784,69786,69788,69790,69792,69794,69796,69798,69800,69802,69804,69806,69808,69810,69812],{"class":242,"line":18731},[240,69785,57235],{"class":257},[240,69787,1829],{"class":253},[240,69789,62980],{"class":257},[240,69791,254],{"class":253},[240,69793,457],{"class":436},[240,69795,440],{"class":257},[240,69797,66159],{"class":443},[240,69799,55886],{"class":436},[240,69801,440],{"class":257},[240,69803,5653],{"class":443},[240,69805,66216],{"class":257},[240,69807,254],{"class":253},[240,69809,57247],{"class":257},[240,69811,1829],{"class":253},[240,69813,447],{"class":257},[240,69815,69816,69818,69820,69822,69824,69826,69828,69830,69832,69834,69836,69838,69840,69842,69844],{"class":242,"line":18744},[240,69817,57235],{"class":257},[240,69819,1829],{"class":253},[240,69821,62980],{"class":257},[240,69823,254],{"class":253},[240,69825,457],{"class":436},[240,69827,440],{"class":257},[240,69829,66159],{"class":443},[240,69831,55886],{"class":436},[240,69833,440],{"class":257},[240,69835,5666],{"class":443},[240,69837,66243],{"class":257},[240,69839,254],{"class":253},[240,69841,57247],{"class":257},[240,69843,1829],{"class":253},[240,69845,447],{"class":257},[240,69847,69848,69850,69852,69854,69856,69858,69860,69862,69864,69866,69868,69870,69872,69874,69876],{"class":242,"line":18749},[240,69849,57235],{"class":257},[240,69851,1829],{"class":253},[240,69853,62980],{"class":257},[240,69855,254],{"class":253},[240,69857,457],{"class":436},[240,69859,440],{"class":257},[240,69861,66159],{"class":443},[240,69863,55886],{"class":436},[240,69865,440],{"class":257},[240,69867,5679],{"class":443},[240,69869,66270],{"class":257},[240,69871,254],{"class":253},[240,69873,57247],{"class":257},[240,69875,1829],{"class":253},[240,69877,447],{"class":257},[240,69879,69880,69882,69884],{"class":242,"line":18763},[240,69881,57340],{"class":257},[240,69883,3100],{"class":253},[240,69885,447],{"class":257},[240,69887,69888,69890,69892],{"class":242,"line":18768},[240,69889,53715],{"class":257},[240,69891,330],{"class":253},[240,69893,447],{"class":257},[240,69895,69896,69898,69900,69902,69904,69906],{"class":242,"line":18774},[240,69897,53285],{"class":257},[240,69899,330],{"class":253},[240,69901,437],{"class":436},[240,69903,440],{"class":257},[240,69905,66307],{"class":443},[240,69907,447],{"class":257},[240,69909,69910,69912,69914,69916,69918,69920,69922,69924,69926,69928,69930,69932,69934,69936,69938,69940],{"class":242,"line":18779},[240,69911,57167],{"class":257},[240,69913,330],{"class":253},[240,69915,437],{"class":436},[240,69917,440],{"class":257},[240,69919,66322],{"class":443},[240,69921,62980],{"class":257},[240,69923,219],{"class":253},[240,69925,57172],{"class":436},[240,69927,440],{"class":257},[240,69929,66333],{"class":443},[240,69931,57180],{"class":436},[240,69933,440],{"class":257},[240,69935,9603],{"class":443},[240,69937,66342],{"class":257},[240,69939,330],{"class":253},[240,69941,447],{"class":257},[240,69943,69944,69946,69948,69950,69952,69954,69956,69958,69960,69962,69964,69966,69968,69970,69972,69974],{"class":242,"line":18793},[240,69945,57167],{"class":257},[240,69947,330],{"class":253},[240,69949,437],{"class":436},[240,69951,440],{"class":257},[240,69953,64546],{"class":443},[240,69955,62980],{"class":257},[240,69957,219],{"class":253},[240,69959,57172],{"class":436},[240,69961,440],{"class":257},[240,69963,66369],{"class":443},[240,69965,57180],{"class":436},[240,69967,440],{"class":257},[240,69969,9603],{"class":443},[240,69971,66342],{"class":257},[240,69973,330],{"class":253},[240,69975,447],{"class":257},[240,69977,69978,69980,69982,69984,69986,69988,69990,69992,69994,69996,69998,70000,70002,70004,70006,70008],{"class":242,"line":18798},[240,69979,57167],{"class":257},[240,69981,330],{"class":253},[240,69983,437],{"class":436},[240,69985,440],{"class":257},[240,69987,64546],{"class":443},[240,69989,62980],{"class":257},[240,69991,219],{"class":253},[240,69993,57172],{"class":436},[240,69995,440],{"class":257},[240,69997,66404],{"class":443},[240,69999,57180],{"class":436},[240,70001,440],{"class":257},[240,70003,9603],{"class":443},[240,70005,66342],{"class":257},[240,70007,330],{"class":253},[240,70009,447],{"class":257},[240,70011,70012,70014,70016,70018,70020,70022,70024,70026,70028,70030,70032,70034,70036,70038,70040,70042],{"class":242,"line":18803},[240,70013,57167],{"class":257},[240,70015,330],{"class":253},[240,70017,437],{"class":436},[240,70019,440],{"class":257},[240,70021,64546],{"class":443},[240,70023,62980],{"class":257},[240,70025,219],{"class":253},[240,70027,57172],{"class":436},[240,70029,440],{"class":257},[240,70031,66439],{"class":443},[240,70033,57180],{"class":436},[240,70035,440],{"class":257},[240,70037,9603],{"class":443},[240,70039,66342],{"class":257},[240,70041,330],{"class":253},[240,70043,447],{"class":257},[240,70045,70046,70048,70050,70052,70054,70056,70058,70060,70062,70064,70066,70068,70070,70072,70074,70076],{"class":242,"line":18817},[240,70047,57167],{"class":257},[240,70049,330],{"class":253},[240,70051,437],{"class":436},[240,70053,440],{"class":257},[240,70055,64546],{"class":443},[240,70057,62980],{"class":257},[240,70059,219],{"class":253},[240,70061,57172],{"class":436},[240,70063,440],{"class":257},[240,70065,66474],{"class":443},[240,70067,57180],{"class":436},[240,70069,440],{"class":257},[240,70071,9603],{"class":443},[240,70073,66342],{"class":257},[240,70075,330],{"class":253},[240,70077,447],{"class":257},[240,70079,70080,70082,70084],{"class":242,"line":18829},[240,70081,53715],{"class":257},[240,70083,330],{"class":253},[240,70085,447],{"class":257},[240,70087,70088,70090,70092],{"class":242,"line":18834},[240,70089,54353],{"class":257},[240,70091,330],{"class":253},[240,70093,447],{"class":257},[240,70095,70096,70098,70100],{"class":242,"line":18847},[240,70097,452],{"class":257},[240,70099,53751],{"class":253},[240,70101,447],{"class":257},[240,70103,70104],{"class":242,"line":18852},[240,70105,70106],{"class":246},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[240,70108,70109],{"class":242,"line":18857},[240,70110,70111],{"class":246},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[240,70113,70114,70116,70118,70120,70122,70124,70126,70129],{"class":242,"line":18862},[240,70115,13172],{"class":288},[240,70117,63218],{"class":264},[240,70119,15514],{"class":288},[240,70121,56331],{"class":257},[240,70123,56334],{"class":436},[240,70125,789],{"class":257},[240,70127,70128],{"class":443},"'.tab-nav ul'",[240,70130,2129],{"class":257},[240,70132,70133],{"class":242,"line":18875},[240,70134,70135],{"class":246},"    \u002F\u002F 2.添加事件\n",[240,70137,70138,70140,70142,70144,70146,70148,70150,70152,70154],{"class":242,"line":18880},[240,70139,68877],{"class":257},[240,70141,59744],{"class":436},[240,70143,789],{"class":257},[240,70145,59749],{"class":443},[240,70147,1277],{"class":257},[240,70149,56384],{"class":288},[240,70151,3612],{"class":257},[240,70153,2192],{"class":792},[240,70155,14392],{"class":257},[240,70157,70158,70160,70162],{"class":242,"line":34579},[240,70159,60175],{"class":257},[240,70161,68933],{"class":436},[240,70163,68936],{"class":257},[240,70165,70166],{"class":242,"line":34585},[240,70167,70168],{"class":246},"      \u002F\u002Fe.targer是我们点击的对象\n",[240,70170,70171,70173,70175,70177,70180],{"class":242,"line":34591},[240,70172,56415],{"class":288},[240,70174,68957],{"class":257},[240,70176,56421],{"class":288},[240,70178,70179],{"class":443}," 'A'",[240,70181,14392],{"class":257},[240,70183,70184,70186,70188,70190,70193,70195,70197,70199,70201],{"class":242,"line":34597},[240,70185,53863],{"class":257},[240,70187,56334],{"class":436},[240,70189,789],{"class":257},[240,70191,70192],{"class":443},"'.active'",[240,70194,58936],{"class":257},[240,70196,58939],{"class":436},[240,70198,789],{"class":257},[240,70200,66637],{"class":443},[240,70202,2129],{"class":257},[240,70204,70205,70208,70210,70212,70214],{"class":242,"line":34603},[240,70206,70207],{"class":257},"        e.target.classList.",[240,70209,7285],{"class":436},[240,70211,789],{"class":257},[240,70213,66637],{"class":443},[240,70215,2129],{"class":257},[240,70217,70218],{"class":242,"line":34614},[240,70219,4353],{"emptyLinePlaceholder":2051},[240,70221,70222],{"class":242,"line":34620},[240,70223,70224],{"class":246},"        \u002F\u002F 下面大盒子模块\n",[240,70226,70227],{"class":242,"line":34640},[240,70228,70229],{"class":246},"        \u002F\u002F console.log(e.target.dataset.id)\n",[240,70231,70232,70234,70236,70238,70240],{"class":242,"line":34646},[240,70233,63196],{"class":288},[240,70235,4984],{"class":264},[240,70237,15514],{"class":288},[240,70239,47512],{"class":288},[240,70241,70242],{"class":257},"e.target.dataset.id\n",[240,70244,70245,70247,70249,70251,70253,70255,70257,70259,70261],{"class":242,"line":34657},[240,70246,53863],{"class":257},[240,70248,56334],{"class":436},[240,70250,789],{"class":257},[240,70252,66685],{"class":443},[240,70254,58936],{"class":257},[240,70256,58939],{"class":436},[240,70258,789],{"class":257},[240,70260,66637],{"class":443},[240,70262,2129],{"class":257},[240,70264,70265,70267,70269,70271,70273,70275,70277,70279,70281,70283,70285,70287,70289],{"class":242,"line":34663},[240,70266,53863],{"class":257},[240,70268,56334],{"class":436},[240,70270,789],{"class":257},[240,70272,66711],{"class":443},[240,70274,2541],{"class":257},[240,70276,47512],{"class":288},[240,70278,27065],{"class":264},[240,70280,58965],{"class":443},[240,70282,58936],{"class":257},[240,70284,7285],{"class":436},[240,70286,789],{"class":257},[240,70288,66637],{"class":443},[240,70290,2129],{"class":257},[240,70292,70293],{"class":242,"line":34669},[240,70294,4353],{"emptyLinePlaceholder":2051},[240,70296,70297],{"class":242,"line":34675},[240,70298,54334],{"class":257},[240,70300,70301],{"class":242,"line":34681},[240,70302,35407],{"class":257},[240,70304,70305,70307,70309],{"class":242,"line":34687},[240,70306,54353],{"class":257},[240,70308,53751],{"class":253},[240,70310,447],{"class":257},[240,70312,70313,70315,70317],{"class":242,"line":34693},[240,70314,592],{"class":257},[240,70316,53738],{"class":253},[240,70318,447],{"class":257},[240,70320,70321],{"class":242,"line":34699},[240,70322,4353],{"emptyLinePlaceholder":2051},[240,70324,70325,70327,70329],{"class":242,"line":34719},[240,70326,592],{"class":257},[240,70328,52581],{"class":253},[240,70330,447],{"class":257},[32,70332,70334],{"id":70333},"_333-页面加载事件","3.3.3 页面加载事件",[1826,70336,70337],{},[1829,70338,70339],{},"load",[19,70341,70342],{},[219,70343],{"alt":236,"src":70344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[19,70346,70347],{},"window代表整个窗口，比document还要大",[19,70349,70350],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[19,70352,70353],{},"img.addEventListener('load', function () {",[19,70355,70356],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[19,70358,54400],{},[1826,70360,70361],{"start":250},[1829,70362,70363],{},"DOMContentLoaded",[19,70365,70366],{},[219,70367],{"alt":236,"src":70368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[19,70370,70371],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[32,70373,70375],{"id":70374},"_334-元素滚动事件","3.3.4 元素滚动事件",[19,70377,70378],{},[219,70379],{"alt":236,"src":70380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[19,70382,70383],{},[219,70384],{"alt":236,"src":70385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[19,70387,70388],{},[219,70389],{"alt":236,"src":70390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[19,70392,70393],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[19,70395,70396],{},"获得的是数字型数据，不带单位",[19,70398,70399],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[19,70401,70402],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[19,70404,70405],{},"它是通过document.documentElement来获取",[19,70407,70408],{},[219,70409],{"alt":236,"src":70410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[19,70412,70413],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[32,70415,70417],{"id":70416},"_335-页面缩放事件","3.3.5 页面缩放事件",[19,70419,70420],{},[219,70421],{"alt":236,"src":70422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[19,70424,70425],{},[219,70426],{"alt":236,"src":70427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[32,70429,70431],{"id":70430},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[19,70433,70434],{},[219,70435],{"alt":236,"src":70436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[19,70438,70439],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[19,70441,70442],{},[219,70443],{"alt":236,"src":70444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[19,70446,70447],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[19,70449,70450],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[19,70452,70453],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[19,70455,70456],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[19,70458,70459],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[19,70461,70462],{},[219,70463],{"alt":236,"src":70464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[19,70466,70467],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[19,70469,70470],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[19,70472,70473],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[19,70475,70476],{},"e.pageX-box.getBoundingClientRect()",[32,70478,70480],{"id":70479},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[19,70482,70483],{},[219,70484],{"alt":236,"src":70485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[19,70487,70488],{},"这个是相对于视口来说的，它是个方法，不是属性值",[32,70490,70492],{"id":70491},"_338-总结","3.3.8 总结",[19,70494,70495],{},[219,70496],{"alt":236,"src":70497},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[19,70499,70500],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[19,70502,70503],{},"修改盒子的宽高只能通过width和height来实现",[32,70505,70507],{"id":70506},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[231,70509,70511],{"className":52579,"code":70510,"language":52581,"meta":236,"style":236},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[23,70512,70513,70518,70523,70528,70533],{"__ignoreMap":236},[240,70514,70515],{"class":242,"line":243},[240,70516,70517],{"class":257},"\u002F* 页面滑动 *\u002F\n",[240,70519,70520],{"class":242,"line":250},[240,70521,70522],{"class":257},"html {\n",[240,70524,70525],{"class":242,"line":261},[240,70526,70527],{"class":257},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[240,70529,70530],{"class":242,"line":277},[240,70531,70532],{"class":257},"  scroll-behavior: smooth;\n",[240,70534,70535],{"class":242,"line":294},[240,70536,312],{"class":257},[19,70538,70539],{},"默认是auto",[32,70541,70543],{"id":70542},"_3310-日期对象","3.3.10 日期对象",[23945,70545,70547],{"id":70546},"_33101-实例化","3.3.10.1 实例化",[19,70549,70550],{},[219,70551],{"alt":236,"src":70552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[23945,70554,70556],{"id":70555},"_33102-时期对象方法","3.3.10.2 时期对象方法",[19,70558,70559],{},[219,70560],{"alt":236,"src":70561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[19,70563,70564],{},"月份+1",[19,70566,70567],{},"老外认为第一天为0，星期天",[19,70569,70570],{},"方法使用的时候必须要跟括号",[19,70572,70573],{},"快速获得日期",[19,70575,70576],{},"\u002F\u002F 得到年月日",[19,70578,70579],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[19,70581,70582],{},"\u002F\u002F 得到当地日期",[19,70584,70585],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[19,70587,70588],{},"\u002F\u002F 得到当地时间",[19,70590,70591],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[19,70593,70594],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[19,70596,70597],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[53751,70599,70600],{},"\n\nconst div = document.querySelector('div')\n\nfunction getMyDate() {\n\nconst date = new Date()\n\nlet h = date.getHours()\n\nlet m = date.getMinutes()\n\nlet s = date.getSeconds()\n\nh = h \u003C 10 ? '0' + h : h\n\nm = m \u003C 10 ? '0' + m : m\n\ns = s \u003C 10 ? '0' + s : s\n\nreturn \\``今天是${date.getFullYear()}年${date.getMonth() + 1}月${date.getDate()}号 ${h}:${m}:${s}`\\`\n\n}\n\n\u002F\u002F 外面还写一个这个时间是因为定时器需要经过1秒才调用一次函数，刚开始会有空白\n\ndiv.innerHTML = getMyDate()\n\nsetInterval(function () {\n\ndiv.innerHTML = getMyDate()\n\n}, 1000)\n\n",[19,70602,70603],{},"学会去封装函数！",[23945,70605,70607],{"id":70606},"_33103-时间戳","3.3.10.3 时间戳",[19,70609,70610],{},[219,70611],{"alt":236,"src":70612},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[19,70614,70615],{},[219,70616],{"alt":236,"src":70617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[19,70619,70620],{},"三种方法记住一个就可以",[32,70622,70624],{"id":70623},"_3311-节点操作","3.3.11 节点操作",[23945,70626,70628],{"id":70627},"_33111-dom节点","3.3.11.1 DOM节点",[19,70630,70631],{},[219,70632],{"alt":236,"src":70633},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[19,70635,70636],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[23945,70638,70640],{"id":70639},"_33112-查找节点","3.3.11.2 查找节点",[19,70642,70643],{},"前边的document.querySelector()是获取的元素",[19,70645,70646],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[19,70648,70649],{},[219,70650],{"alt":236,"src":70651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[1826,70653,70654],{},[1829,70655,70656],{},"父节点",[19,70658,70659],{},[219,70660],{"alt":236,"src":70661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[1826,70663,70664],{"start":250},[1829,70665,70666],{},"子节点",[19,70668,70669],{},[219,70670],{"alt":236,"src":70671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[19,70673,70674],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[19,70676,70677],{},"children获得的是伪数组，是亲儿子",[1826,70679,70680],{"start":261},[1829,70681,70682],{},"兄弟节点",[19,70684,70685],{},[219,70686],{"alt":236,"src":70687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[23945,70689,70691],{"id":70690},"_33113-增加节点","3.3.11.3 增加节点",[19,70693,70694],{},[219,70695],{"alt":236,"src":70696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[19,70698,70699],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[19,70701,70702],{},[219,70703],{"alt":236,"src":70704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[19,70706,70707],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[19,70709,70710],{},"下面是写法的部分展示，就按照下边的格式来写",[19,70712,70713],{},"例：",[53751,70715,70716],{},"\n\n\u002F\u002F 1. 重构 let data = \\[\n\n{\n\nsrc: 'images\u002Fcourse01.png',\n\ntitle: 'Think PHP 5.0 博客系统实战项目演练',\n\nnum: 1125\n\n},\n\n{\n\nsrc: 'images\u002Fcourse02.png',\n\ntitle: 'Android 网络动态图片加载实战',\n\nnum: 357\n\n},\n\n{\n\nsrc: 'images\u002Fcourse03.png',\n\ntitle: 'Angular2 大前端商城实战项目演练',\n\nnum: 22250\n\n},\n\n{\n\nsrc: 'images\u002Fcourse04.png',\n\ntitle: 'Android APP 实战项目演练',\n\nnum: 389\n\n},\n\n{\n\nsrc: 'images\u002Fcourse05.png',\n\ntitle: 'UGUI 源码深度分析案例',\n\nnum: 124\n\n},\n\n{\n\nsrc: 'images\u002Fcourse06.png',\n\ntitle: 'Kami2首页界面切换效果实战演练',\n\nnum: 432\n\n},\n\n{\n\nsrc: 'images\u002Fcourse07.png',\n\ntitle: 'UNITY 从入门到精通实战案例',\n\nnum: 888\n\n},\n\n{\n\nsrc: 'images\u002Fcourse08.png',\n\ntitle: 'Cocos 深度学习你不会错过的实战',\n\nnum: 590\n\n},\n\n\\]\n\n\u002F\u002F 1.根据数据的个数创建对应的li\n\nconst ul = document.querySelector('ul')\n\nfor (let i = 0; i \u003C data.length; i++) {\n\n\u002F\u002F 2.创建新的li\n\nconst li = document.createElement('li')\n\nul.appendChild(li)\n\n\u002F\u002F 把内容给li\n\nli.innerHTML = `\u003Ca href=\"#\">`\n\n   `\u003Cimg src=\"${data[i].src}\" alt=\"\">`\n\n   `\u003Ch4>${data[i].title}\u003C\u002Fh4>`\n\n   `\u003Cdiv class=\"info\">`\n\n   `\u003Cspan>高级\u003C\u002Fspan>·\u003Cspan>${data[i].num}\u003C\u002Fspan>人在学 \u003C\u002Fdiv>`\n\n   `\u003C\u002Fa>`\n\n}\n\n",[19,70718,70719],{},[219,70720],{"alt":236,"src":70721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[19,70723,70724],{},"false只克隆标签，里边的内容不会克隆过来",[231,70726,70728],{"className":52579,"code":70727,"language":52581,"meta":236,"style":236},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[23,70729,70730],{"__ignoreMap":236},[240,70731,70732],{"class":242,"line":243},[240,70733,70727],{"class":257},[23945,70735,70737],{"id":70736},"_33114-删除节点","3.3.11.4 删除节点",[19,70739,70740],{},[219,70741],{"alt":236,"src":70742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[19,70744,70745],{},"父亲删儿子",[19,70747,70748],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[32,70750,70752],{"id":70751},"_3312-m端事件","3.3.12 M端事件",[19,70754,70755],{},"M端就是移动端",[19,70757,70758],{},[219,70759],{"alt":236,"src":70760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[32,70762,70764],{"id":70763},"_3313-插件","3.3.13 插件",[19,70766,70767],{},"要熟悉官网！！！",[19,70769,70770],{},[254,70771,70772],{"href":70772,"rel":70773},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[25811],[19,70775,70776],{},[254,70777,70778],{"href":70778,"rel":70779},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[25811],[32,70781,70783],{"id":70782},"_3314-学生信息表","3.3.14 学生信息表",[1826,70785,70786,70789,70792,70795,70798,70801,70804,70807],{},[1829,70787,70788],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[1829,70790,70791],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[1829,70793,70794],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[1829,70796,70797],{},"用好表单元素自带的属性，value,name等",[1829,70799,70800],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[1829,70802,70803],{},"不要忘记事件对象",[1829,70805,70806],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[1829,70808,70809],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[19,70811,70812],{},"结构：",[231,70814,70816],{"className":52579,"code":70815,"language":52581,"meta":236,"style":236},"\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",[23,70817,70818,70828,70842,70846,70854,70868,70888,70909,70922,70946,70954,70958,70966,70979,71000,71028,71056,71061,71083,71103,71122,71130,71158,71180,71200,71220,71240,71260,71280,71288,71308,71316,71320,71333,71341,71349,71357,71370,71383,71396,71409,71422,71435,71448,71456,71464,71472,71477,71482,71487,71492,71497,71502,71507,71512,71517,71522,71527,71532,71537,71545,71553,71561,71565,71585,71604,71624,71644,71664,71684,71688,71693,71713,71718,71728,71733,71738,71758,71780,71785,71795,71799,71803,71808,71813,71842,71856,71871,71875,71879,71883,71888,71899,71912,71917,71922,71927,71932,71937,71941,71946,71951,71960,71965,71970,71982,71987,71994,71998,72003,72013,72018,72028,72033,72061,72082,72092,72112,72130,72147,72164,72181,72198,72202,72212,72217,72222,72227,72238,72242,72246,72250,72255,72260,72281,72293,72298,72303,72308,72322,72327,72334,72338,72342,72350,72354,72362,72366],{"__ignoreMap":236},[240,70819,70820,70822,70824,70826],{"class":242,"line":243},[240,70821,53243],{"class":257},[240,70823,53246],{"class":253},[240,70825,53249],{"class":436},[240,70827,447],{"class":257},[240,70829,70830,70832,70834,70836,70838,70840],{"class":242,"line":250},[240,70831,431],{"class":257},[240,70833,52581],{"class":253},[240,70835,53260],{"class":436},[240,70837,440],{"class":257},[240,70839,53265],{"class":443},[240,70841,447],{"class":257},[240,70843,70844],{"class":242,"line":261},[240,70845,4353],{"emptyLinePlaceholder":2051},[240,70847,70848,70850,70852],{"class":242,"line":277},[240,70849,431],{"class":257},[240,70851,53278],{"class":253},[240,70853,447],{"class":257},[240,70855,70856,70858,70860,70862,70864,70866],{"class":242,"line":294},[240,70857,452],{"class":257},[240,70859,53288],{"class":253},[240,70861,53291],{"class":436},[240,70863,440],{"class":257},[240,70865,53296],{"class":443},[240,70867,61058],{"class":257},[240,70869,70870,70872,70874,70876,70878,70880,70882,70884,70886],{"class":242,"line":309},[240,70871,452],{"class":257},[240,70873,53288],{"class":253},[240,70875,16869],{"class":436},[240,70877,440],{"class":257},[240,70879,53335],{"class":443},[240,70881,53315],{"class":436},[240,70883,440],{"class":257},[240,70885,53342],{"class":443},[240,70887,61058],{"class":257},[240,70889,70890,70892,70894,70896,70898,70900,70902,70904,70907],{"class":242,"line":529},[240,70891,452],{"class":257},[240,70893,53288],{"class":253},[240,70895,53307],{"class":436},[240,70897,440],{"class":257},[240,70899,53312],{"class":443},[240,70901,53315],{"class":436},[240,70903,440],{"class":257},[240,70905,70906],{"class":443},"\"ie=edge\"",[240,70908,61058],{"class":257},[240,70910,70911,70913,70915,70918,70920],{"class":242,"line":549},[240,70912,452],{"class":257},[240,70914,53351],{"class":253},[240,70916,70917],{"class":257},">学生信息管理\u003C\u002F",[240,70919,53351],{"class":253},[240,70921,447],{"class":257},[240,70923,70924,70926,70929,70932,70934,70937,70939,70941,70944],{"class":242,"line":569},[240,70925,452],{"class":257},[240,70927,70928],{"class":253},"link",[240,70930,70931],{"class":436}," rel",[240,70933,440],{"class":257},[240,70935,70936],{"class":443},"\"stylesheet\"",[240,70938,457],{"class":436},[240,70940,440],{"class":257},[240,70942,70943],{"class":443},"\"css\u002Findex.css\"",[240,70945,61058],{"class":257},[240,70947,70948,70950,70952],{"class":242,"line":589},[240,70949,592],{"class":257},[240,70951,53278],{"class":253},[240,70953,447],{"class":257},[240,70955,70956],{"class":242,"line":715},[240,70957,4353],{"emptyLinePlaceholder":2051},[240,70959,70960,70962,70964],{"class":242,"line":727},[240,70961,431],{"class":257},[240,70963,53738],{"class":253},[240,70965,447],{"class":257},[240,70967,70968,70970,70972,70975,70977],{"class":242,"line":1730},[240,70969,452],{"class":257},[240,70971,10],{"class":253},[240,70973,70974],{"class":257},">新增学员\u003C\u002F",[240,70976,10],{"class":253},[240,70978,447],{"class":257},[240,70980,70981,70983,70985,70987,70989,70991,70994,70996,70998],{"class":242,"line":3582},[240,70982,452],{"class":257},[240,70984,68548],{"class":253},[240,70986,437],{"class":436},[240,70988,440],{"class":257},[240,70990,64587],{"class":443},[240,70992,70993],{"class":436}," autocomplete",[240,70995,440],{"class":257},[240,70997,33722],{"class":443},[240,70999,447],{"class":257},[240,71001,71002,71005,71007,71009,71011,71013,71015,71017,71020,71022,71024,71026],{"class":242,"line":3596},[240,71003,71004],{"class":257},"    姓名：\u003C",[240,71006,55756],{"class":253},[240,71008,55759],{"class":436},[240,71010,440],{"class":257},[240,71012,64622],{"class":443},[240,71014,437],{"class":436},[240,71016,440],{"class":257},[240,71018,71019],{"class":443},"\"uname\"",[240,71021,16869],{"class":436},[240,71023,440],{"class":257},[240,71025,71019],{"class":443},[240,71027,61058],{"class":257},[240,71029,71030,71033,71035,71037,71039,71041,71043,71045,71048,71050,71052,71054],{"class":242,"line":3601},[240,71031,71032],{"class":257},"    年龄：\u003C",[240,71034,55756],{"class":253},[240,71036,55759],{"class":436},[240,71038,440],{"class":257},[240,71040,64622],{"class":443},[240,71042,437],{"class":436},[240,71044,440],{"class":257},[240,71046,71047],{"class":443},"\"age\"",[240,71049,16869],{"class":436},[240,71051,440],{"class":257},[240,71053,71047],{"class":443},[240,71055,61058],{"class":257},[240,71057,71058],{"class":242,"line":3607},[240,71059,71060],{"class":257},"    性别:\n",[240,71062,71063,71065,71068,71070,71072,71075,71077,71079,71081],{"class":242,"line":3628},[240,71064,53285],{"class":257},[240,71066,71067],{"class":253},"select",[240,71069,16869],{"class":436},[240,71071,440],{"class":257},[240,71073,71074],{"class":443},"\"gender\"",[240,71076,437],{"class":436},[240,71078,440],{"class":257},[240,71080,71074],{"class":443},[240,71082,447],{"class":257},[240,71084,71085,71087,71090,71092,71094,71096,71099,71101],{"class":242,"line":3633},[240,71086,57167],{"class":257},[240,71088,71089],{"class":253},"option",[240,71091,68574],{"class":436},[240,71093,440],{"class":257},[240,71095,11912],{"class":443},[240,71097,71098],{"class":257},">男\u003C\u002F",[240,71100,71089],{"class":253},[240,71102,447],{"class":257},[240,71104,71105,71107,71109,71111,71113,71115,71118,71120],{"class":242,"line":3647},[240,71106,57167],{"class":257},[240,71108,71089],{"class":253},[240,71110,68574],{"class":436},[240,71112,440],{"class":257},[240,71114,11981],{"class":443},[240,71116,71117],{"class":257},">女\u003C\u002F",[240,71119,71089],{"class":253},[240,71121,447],{"class":257},[240,71123,71124,71126,71128],{"class":242,"line":3652},[240,71125,53715],{"class":257},[240,71127,71067],{"class":253},[240,71129,447],{"class":257},[240,71131,71132,71135,71137,71139,71141,71143,71145,71147,71150,71152,71154,71156],{"class":242,"line":3681},[240,71133,71134],{"class":257},"    薪资：\u003C",[240,71136,55756],{"class":253},[240,71138,55759],{"class":436},[240,71140,440],{"class":257},[240,71142,64622],{"class":443},[240,71144,437],{"class":436},[240,71146,440],{"class":257},[240,71148,71149],{"class":443},"\"salary\"",[240,71151,16869],{"class":436},[240,71153,440],{"class":257},[240,71155,71149],{"class":443},[240,71157,61058],{"class":257},[240,71159,71160,71163,71165,71167,71169,71172,71174,71176,71178],{"class":242,"line":3686},[240,71161,71162],{"class":257},"    就业城市：\u003C",[240,71164,71067],{"class":253},[240,71166,16869],{"class":436},[240,71168,440],{"class":257},[240,71170,71171],{"class":443},"\"city\"",[240,71173,437],{"class":436},[240,71175,440],{"class":257},[240,71177,71171],{"class":443},[240,71179,447],{"class":257},[240,71181,71182,71184,71186,71188,71190,71193,71196,71198],{"class":242,"line":3703},[240,71183,57167],{"class":257},[240,71185,71089],{"class":253},[240,71187,68574],{"class":436},[240,71189,440],{"class":257},[240,71191,71192],{"class":443},"\"北京\"",[240,71194,71195],{"class":257},">北京\u003C\u002F",[240,71197,71089],{"class":253},[240,71199,447],{"class":257},[240,71201,71202,71204,71206,71208,71210,71213,71216,71218],{"class":242,"line":3708},[240,71203,57167],{"class":257},[240,71205,71089],{"class":253},[240,71207,68574],{"class":436},[240,71209,440],{"class":257},[240,71211,71212],{"class":443},"\"上海\"",[240,71214,71215],{"class":257},">上海\u003C\u002F",[240,71217,71089],{"class":253},[240,71219,447],{"class":257},[240,71221,71222,71224,71226,71228,71230,71233,71236,71238],{"class":242,"line":3713},[240,71223,57167],{"class":257},[240,71225,71089],{"class":253},[240,71227,68574],{"class":436},[240,71229,440],{"class":257},[240,71231,71232],{"class":443},"\"广州\"",[240,71234,71235],{"class":257},">广州\u003C\u002F",[240,71237,71089],{"class":253},[240,71239,447],{"class":257},[240,71241,71242,71244,71246,71248,71250,71253,71256,71258],{"class":242,"line":3718},[240,71243,57167],{"class":257},[240,71245,71089],{"class":253},[240,71247,68574],{"class":436},[240,71249,440],{"class":257},[240,71251,71252],{"class":443},"\"深圳\"",[240,71254,71255],{"class":257},">深圳\u003C\u002F",[240,71257,71089],{"class":253},[240,71259,447],{"class":257},[240,71261,71262,71264,71266,71268,71270,71273,71276,71278],{"class":242,"line":3732},[240,71263,57167],{"class":257},[240,71265,71089],{"class":253},[240,71267,68574],{"class":436},[240,71269,440],{"class":257},[240,71271,71272],{"class":443},"\"曹县\"",[240,71274,71275],{"class":257},">曹县\u003C\u002F",[240,71277,71089],{"class":253},[240,71279,447],{"class":257},[240,71281,71282,71284,71286],{"class":242,"line":3737},[240,71283,53715],{"class":257},[240,71285,71067],{"class":253},[240,71287,447],{"class":257},[240,71289,71290,71292,71294,71296,71298,71301,71304,71306],{"class":242,"line":4530},[240,71291,53285],{"class":257},[240,71293,55822],{"class":253},[240,71295,437],{"class":436},[240,71297,440],{"class":257},[240,71299,71300],{"class":443},"\"add\"",[240,71302,71303],{"class":257},">录入\u003C\u002F",[240,71305,55822],{"class":253},[240,71307,447],{"class":257},[240,71309,71310,71312,71314],{"class":242,"line":4544},[240,71311,54353],{"class":257},[240,71313,68548],{"class":253},[240,71315,447],{"class":257},[240,71317,71318],{"class":242,"line":4552},[240,71319,4353],{"emptyLinePlaceholder":2051},[240,71321,71322,71324,71326,71329,71331],{"class":242,"line":4557},[240,71323,452],{"class":257},[240,71325,10],{"class":253},[240,71327,71328],{"class":257},">就业榜\u003C\u002F",[240,71330,10],{"class":253},[240,71332,447],{"class":257},[240,71334,71335,71337,71339],{"class":242,"line":4563},[240,71336,452],{"class":257},[240,71338,802],{"class":253},[240,71340,447],{"class":257},[240,71342,71343,71345,71347],{"class":242,"line":4569},[240,71344,53285],{"class":257},[240,71346,805],{"class":253},[240,71348,447],{"class":257},[240,71350,71351,71353,71355],{"class":242,"line":4574},[240,71352,57167],{"class":257},[240,71354,808],{"class":253},[240,71356,447],{"class":257},[240,71358,71359,71361,71363,71366,71368],{"class":242,"line":9899},[240,71360,57235],{"class":257},[240,71362,811],{"class":253},[240,71364,71365],{"class":257},">序号\u003C\u002F",[240,71367,811],{"class":253},[240,71369,447],{"class":257},[240,71371,71372,71374,71376,71379,71381],{"class":242,"line":9923},[240,71373,57235],{"class":257},[240,71375,811],{"class":253},[240,71377,71378],{"class":257},">姓名\u003C\u002F",[240,71380,811],{"class":253},[240,71382,447],{"class":257},[240,71384,71385,71387,71389,71392,71394],{"class":242,"line":9928},[240,71386,57235],{"class":257},[240,71388,811],{"class":253},[240,71390,71391],{"class":257},">年龄\u003C\u002F",[240,71393,811],{"class":253},[240,71395,447],{"class":257},[240,71397,71398,71400,71402,71405,71407],{"class":242,"line":9934},[240,71399,57235],{"class":257},[240,71401,811],{"class":253},[240,71403,71404],{"class":257},">性别\u003C\u002F",[240,71406,811],{"class":253},[240,71408,447],{"class":257},[240,71410,71411,71413,71415,71418,71420],{"class":242,"line":9961},[240,71412,57235],{"class":257},[240,71414,811],{"class":253},[240,71416,71417],{"class":257},">薪资\u003C\u002F",[240,71419,811],{"class":253},[240,71421,447],{"class":257},[240,71423,71424,71426,71428,71431,71433],{"class":242,"line":9966},[240,71425,57235],{"class":257},[240,71427,811],{"class":253},[240,71429,71430],{"class":257},">就业城市\u003C\u002F",[240,71432,811],{"class":253},[240,71434,447],{"class":257},[240,71436,71437,71439,71441,71444,71446],{"class":242,"line":9972},[240,71438,57235],{"class":257},[240,71440,811],{"class":253},[240,71442,71443],{"class":257},">操作\u003C\u002F",[240,71445,811],{"class":253},[240,71447,447],{"class":257},[240,71449,71450,71452,71454],{"class":242,"line":9984},[240,71451,57340],{"class":257},[240,71453,808],{"class":253},[240,71455,447],{"class":257},[240,71457,71458,71460,71462],{"class":242,"line":9996},[240,71459,53715],{"class":257},[240,71461,805],{"class":253},[240,71463,447],{"class":257},[240,71465,71466,71468,71470],{"class":242,"line":10008},[240,71467,53285],{"class":257},[240,71469,819],{"class":253},[240,71471,447],{"class":257},[240,71473,71474],{"class":242,"line":11667},[240,71475,71476],{"class":246},"      \u003C!-- \n",[240,71478,71479],{"class":242,"line":11692},[240,71480,71481],{"class":246},"        \u003Ctr>\n",[240,71483,71484],{"class":242,"line":11715},[240,71485,71486],{"class":246},"          \u003Ctd>1001\u003C\u002Ftd>\n",[240,71488,71489],{"class":242,"line":11739},[240,71490,71491],{"class":246},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[240,71493,71494],{"class":242,"line":11744},[240,71495,71496],{"class":246},"          \u003Ctd>19\u003C\u002Ftd>\n",[240,71498,71499],{"class":242,"line":11749},[240,71500,71501],{"class":246},"          \u003Ctd>男\u003C\u002Ftd>\n",[240,71503,71504],{"class":242,"line":11754},[240,71505,71506],{"class":246},"          \u003Ctd>15000\u003C\u002Ftd>\n",[240,71508,71509],{"class":242,"line":11763},[240,71510,71511],{"class":246},"          \u003Ctd>上海\u003C\u002Ftd>\n",[240,71513,71514],{"class":242,"line":11768},[240,71515,71516],{"class":246},"          \u003Ctd>\n",[240,71518,71519],{"class":242,"line":11774},[240,71520,71521],{"class":246},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[240,71523,71524],{"class":242,"line":11795},[240,71525,71526],{"class":246},"          \u003C\u002Ftd>\n",[240,71528,71529],{"class":242,"line":11801},[240,71530,71531],{"class":246},"        \u003C\u002Ftr> \n",[240,71533,71534],{"class":242,"line":11815},[240,71535,71536],{"class":246},"        -->\n",[240,71538,71539,71541,71543],{"class":242,"line":11821},[240,71540,53715],{"class":257},[240,71542,819],{"class":253},[240,71544,447],{"class":257},[240,71546,71547,71549,71551],{"class":242,"line":11848},[240,71548,54353],{"class":257},[240,71550,802],{"class":253},[240,71552,447],{"class":257},[240,71554,71555,71557,71559],{"class":242,"line":11857},[240,71556,452],{"class":257},[240,71558,53751],{"class":253},[240,71560,447],{"class":257},[240,71562,71563],{"class":242,"line":11863},[240,71564,61889],{"class":246},[240,71566,71567,71569,71572,71574,71576,71578,71580,71583],{"class":242,"line":11871},[240,71568,13172],{"class":288},[240,71570,71571],{"class":264}," uname",[240,71573,15514],{"class":288},[240,71575,56331],{"class":257},[240,71577,56334],{"class":436},[240,71579,789],{"class":257},[240,71581,71582],{"class":443},"'.uname'",[240,71584,2129],{"class":257},[240,71586,71587,71589,71591,71593,71595,71597,71599,71602],{"class":242,"line":11876},[240,71588,13172],{"class":288},[240,71590,17637],{"class":264},[240,71592,15514],{"class":288},[240,71594,56331],{"class":257},[240,71596,56334],{"class":436},[240,71598,789],{"class":257},[240,71600,71601],{"class":443},"'.age'",[240,71603,2129],{"class":257},[240,71605,71606,71608,71611,71613,71615,71617,71619,71622],{"class":242,"line":18552},[240,71607,13172],{"class":288},[240,71609,71610],{"class":264}," gender",[240,71612,15514],{"class":288},[240,71614,56331],{"class":257},[240,71616,56334],{"class":436},[240,71618,789],{"class":257},[240,71620,71621],{"class":443},"'.gender'",[240,71623,2129],{"class":257},[240,71625,71626,71628,71631,71633,71635,71637,71639,71642],{"class":242,"line":18558},[240,71627,13172],{"class":288},[240,71629,71630],{"class":264}," salary",[240,71632,15514],{"class":288},[240,71634,56331],{"class":257},[240,71636,56334],{"class":436},[240,71638,789],{"class":257},[240,71640,71641],{"class":443},"'.salary'",[240,71643,2129],{"class":257},[240,71645,71646,71648,71651,71653,71655,71657,71659,71662],{"class":242,"line":18581},[240,71647,13172],{"class":288},[240,71649,71650],{"class":264}," city",[240,71652,15514],{"class":288},[240,71654,56331],{"class":257},[240,71656,56334],{"class":436},[240,71658,789],{"class":257},[240,71660,71661],{"class":443},"'.city'",[240,71663,2129],{"class":257},[240,71665,71666,71668,71671,71673,71675,71677,71679,71682],{"class":242,"line":18587},[240,71667,13172],{"class":288},[240,71669,71670],{"class":264}," tbody",[240,71672,15514],{"class":288},[240,71674,56331],{"class":257},[240,71676,56334],{"class":436},[240,71678,789],{"class":257},[240,71680,71681],{"class":443},"'tbody'",[240,71683,2129],{"class":257},[240,71685,71686],{"class":242,"line":18610},[240,71687,4353],{"emptyLinePlaceholder":2051},[240,71689,71690],{"class":242,"line":18624},[240,71691,71692],{"class":246},"    \u002F\u002F 获取所有带有name属性的元素\n",[240,71694,71695,71697,71700,71702,71704,71706,71708,71711],{"class":242,"line":18644},[240,71696,13172],{"class":288},[240,71698,71699],{"class":264}," items",[240,71701,15514],{"class":288},[240,71703,56331],{"class":257},[240,71705,57614],{"class":436},[240,71707,789],{"class":257},[240,71709,71710],{"class":443},"'[name]'",[240,71712,2129],{"class":257},[240,71714,71715],{"class":242,"line":18650},[240,71716,71717],{"class":246},"    \u002F\u002F 声明一个空的数组\n",[240,71719,71720,71722,71724,71726],{"class":242,"line":18661},[240,71721,13172],{"class":288},[240,71723,59626],{"class":264},[240,71725,15514],{"class":288},[240,71727,53776],{"class":257},[240,71729,71730],{"class":242,"line":18684},[240,71731,71732],{"class":246},"    \u002F\u002F 1.录入模块\n",[240,71734,71735],{"class":242,"line":18706},[240,71736,71737],{"class":246},"    \u002F\u002F 1.1这是一个表单提交事件\n",[240,71739,71740,71742,71745,71747,71749,71751,71753,71756],{"class":242,"line":18711},[240,71741,13172],{"class":288},[240,71743,71744],{"class":264}," info",[240,71746,15514],{"class":288},[240,71748,56331],{"class":257},[240,71750,56334],{"class":436},[240,71752,789],{"class":257},[240,71754,71755],{"class":443},"'.info'",[240,71757,2129],{"class":257},[240,71759,71760,71763,71765,71767,71770,71772,71774,71776,71778],{"class":242,"line":18717},[240,71761,71762],{"class":257},"    info.",[240,71764,59744],{"class":436},[240,71766,789],{"class":257},[240,71768,71769],{"class":443},"'submit'",[240,71771,1277],{"class":257},[240,71773,56384],{"class":288},[240,71775,3612],{"class":257},[240,71777,2192],{"class":792},[240,71779,14392],{"class":257},[240,71781,71782],{"class":242,"line":18731},[240,71783,71784],{"class":246},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[240,71786,71787,71790,71793],{"class":242,"line":18744},[240,71788,71789],{"class":257},"      e.",[240,71791,71792],{"class":436},"preventDefault",[240,71794,3929],{"class":257},[240,71796,71797],{"class":242,"line":18749},[240,71798,61943],{"class":246},[240,71800,71801],{"class":242,"line":18763},[240,71802,4353],{"emptyLinePlaceholder":2051},[240,71804,71805],{"class":242,"line":18768},[240,71806,71807],{"class":246},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[240,71809,71810],{"class":242,"line":18774},[240,71811,71812],{"class":246},"      \u002F\u002F 先遍历循环\n",[240,71814,71815,71817,71819,71821,71823,71825,71827,71829,71831,71834,71836,71838,71840],{"class":242,"line":18779},[240,71816,54220],{"class":288},[240,71818,3612],{"class":257},[240,71820,53785],{"class":288},[240,71822,11389],{"class":257},[240,71824,440],{"class":288},[240,71826,6045],{"class":264},[240,71828,11396],{"class":257},[240,71830,431],{"class":288},[240,71832,71833],{"class":257}," items.",[240,71835,1064],{"class":264},[240,71837,5166],{"class":257},[240,71839,4245],{"class":288},[240,71841,14392],{"class":257},[240,71843,71844,71846,71849,71851,71854],{"class":242,"line":18793},[240,71845,4450],{"class":288},[240,71847,71848],{"class":257}," (items[i].value ",[240,71850,56421],{"class":288},[240,71852,71853],{"class":443}," ''",[240,71855,14392],{"class":257},[240,71857,71858,71861,71864,71866,71869],{"class":242,"line":18798},[240,71859,71860],{"class":288},"          return",[240,71862,71863],{"class":436}," alert",[240,71865,789],{"class":257},[240,71867,71868],{"class":443},"'输入内容不能为空'",[240,71870,2129],{"class":257},[240,71872,71873],{"class":242,"line":18803},[240,71874,4482],{"class":257},[240,71876,71877],{"class":242,"line":18817},[240,71878,54334],{"class":257},[240,71880,71881],{"class":242,"line":18829},[240,71882,4353],{"emptyLinePlaceholder":2051},[240,71884,71885],{"class":242,"line":18834},[240,71886,71887],{"class":246},"      \u002F\u002F 创建新的对象\n",[240,71889,71890,71892,71895,71897],{"class":242,"line":18847},[240,71891,60159],{"class":288},[240,71893,71894],{"class":264}," obj",[240,71896,15514],{"class":288},[240,71898,258],{"class":257},[240,71900,71901,71904,71906,71908,71910],{"class":242,"line":18852},[240,71902,71903],{"class":257},"        stuID: arr.",[240,71905,1064],{"class":264},[240,71907,47512],{"class":288},[240,71909,27065],{"class":264},[240,71911,33412],{"class":257},[240,71913,71914],{"class":242,"line":18857},[240,71915,71916],{"class":257},"        uname: uname.value,\n",[240,71918,71919],{"class":242,"line":18862},[240,71920,71921],{"class":257},"        age: age.value,\n",[240,71923,71924],{"class":242,"line":18875},[240,71925,71926],{"class":257},"        gender: gender.value,\n",[240,71928,71929],{"class":242,"line":18880},[240,71930,71931],{"class":257},"        salary: salary.value,\n",[240,71933,71934],{"class":242,"line":34579},[240,71935,71936],{"class":257},"        city: city.value\n",[240,71938,71939],{"class":242,"line":34585},[240,71940,54334],{"class":257},[240,71942,71943],{"class":242,"line":34591},[240,71944,71945],{"class":246},"      \u002F\u002F console.log(obj);\n",[240,71947,71948],{"class":242,"line":34597},[240,71949,71950],{"class":246},"      \u002F\u002F 追加到数组里面\n",[240,71952,71953,71955,71957],{"class":242,"line":34603},[240,71954,59938],{"class":257},[240,71956,53822],{"class":436},[240,71958,71959],{"class":257},"(obj)\n",[240,71961,71962],{"class":242,"line":34614},[240,71963,71964],{"class":246},"      \u002F\u002F console.log(arr);\n",[240,71966,71967],{"class":242,"line":34620},[240,71968,71969],{"class":246},"      \u002F\u002F 清空表单  reset重置表单\n",[240,71971,71972,71975,71977,71980],{"class":242,"line":34640},[240,71973,71974],{"class":264},"      this",[240,71976,2657],{"class":257},[240,71978,71979],{"class":436},"reset",[240,71981,3929],{"class":257},[240,71983,71984],{"class":242,"line":34646},[240,71985,71986],{"class":246},"      \u002F\u002F 调用渲染函数\n",[240,71988,71989,71992],{"class":242,"line":34657},[240,71990,71991],{"class":436},"      render",[240,71993,3929],{"class":257},[240,71995,71996],{"class":242,"line":34663},[240,71997,35407],{"class":257},[240,71999,72000],{"class":242,"line":34669},[240,72001,72002],{"class":246},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[240,72004,72005,72008,72011],{"class":242,"line":34675},[240,72006,72007],{"class":288},"    function",[240,72009,72010],{"class":436}," render",[240,72012,12804],{"class":257},[240,72014,72015],{"class":242,"line":34681},[240,72016,72017],{"class":246},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[240,72019,72020,72023,72025],{"class":242,"line":34687},[240,72021,72022],{"class":257},"      tbody.innerHTML ",[240,72024,440],{"class":288},[240,72026,72027],{"class":443}," ''\n",[240,72029,72030],{"class":242,"line":34693},[240,72031,72032],{"class":246},"      \u002F\u002F 遍历数组\n",[240,72034,72035,72037,72039,72041,72043,72045,72047,72049,72051,72053,72055,72057,72059],{"class":242,"line":34699},[240,72036,54220],{"class":288},[240,72038,3612],{"class":257},[240,72040,53785],{"class":288},[240,72042,11389],{"class":257},[240,72044,440],{"class":288},[240,72046,6045],{"class":264},[240,72048,11396],{"class":257},[240,72050,431],{"class":288},[240,72052,53903],{"class":257},[240,72054,1064],{"class":264},[240,72056,5166],{"class":257},[240,72058,4245],{"class":288},[240,72060,14392],{"class":257},[240,72062,72063,72065,72068,72070,72072,72075,72077,72080],{"class":242,"line":34719},[240,72064,63196],{"class":288},[240,72066,72067],{"class":264}," tr",[240,72069,15514],{"class":288},[240,72071,56331],{"class":257},[240,72073,72074],{"class":436},"createElement",[240,72076,789],{"class":257},[240,72078,72079],{"class":443},"'tr'",[240,72081,2129],{"class":257},[240,72083,72084,72087,72089],{"class":242,"line":34725},[240,72085,72086],{"class":257},"        tr.innerHTML ",[240,72088,440],{"class":288},[240,72090,72091],{"class":443}," `\n",[240,72093,72094,72097,72099,72101,72103,72106,72109],{"class":242,"line":34741},[240,72095,72096],{"class":443},"        \u003Ctd>${",[240,72098,5832],{"class":257},[240,72100,2985],{"class":443},[240,72102,2541],{"class":257},[240,72104,72105],{"class":443},"].",[240,72107,72108],{"class":257},"stuID",[240,72110,72111],{"class":443},"}\u003C\u002Ftd>\n",[240,72113,72114,72117,72119,72121,72123,72125,72128],{"class":242,"line":34747},[240,72115,72116],{"class":443},"          \u003Ctd>${",[240,72118,5832],{"class":257},[240,72120,2985],{"class":443},[240,72122,2541],{"class":257},[240,72124,72105],{"class":443},[240,72126,72127],{"class":257},"uname",[240,72129,72111],{"class":443},[240,72131,72132,72134,72136,72138,72140,72142,72145],{"class":242,"line":34761},[240,72133,72116],{"class":443},[240,72135,5832],{"class":257},[240,72137,2985],{"class":443},[240,72139,2541],{"class":257},[240,72141,72105],{"class":443},[240,72143,72144],{"class":257},"age",[240,72146,72111],{"class":443},[240,72148,72149,72151,72153,72155,72157,72159,72162],{"class":242,"line":34767},[240,72150,72116],{"class":443},[240,72152,5832],{"class":257},[240,72154,2985],{"class":443},[240,72156,2541],{"class":257},[240,72158,72105],{"class":443},[240,72160,72161],{"class":257},"gender",[240,72163,72111],{"class":443},[240,72165,72166,72168,72170,72172,72174,72176,72179],{"class":242,"line":34782},[240,72167,72116],{"class":443},[240,72169,5832],{"class":257},[240,72171,2985],{"class":443},[240,72173,2541],{"class":257},[240,72175,72105],{"class":443},[240,72177,72178],{"class":257},"salary",[240,72180,72111],{"class":443},[240,72182,72183,72185,72187,72189,72191,72193,72196],{"class":242,"line":34788},[240,72184,72116],{"class":443},[240,72186,5832],{"class":257},[240,72188,2985],{"class":443},[240,72190,2541],{"class":257},[240,72192,72105],{"class":443},[240,72194,72195],{"class":257},"city",[240,72197,72111],{"class":443},[240,72199,72200],{"class":242,"line":34797},[240,72201,71516],{"class":443},[240,72203,72204,72207,72209],{"class":242,"line":34803},[240,72205,72206],{"class":443},"            \u003Ca href=\"javascript:\" data-id=${",[240,72208,2541],{"class":257},[240,72210,72211],{"class":443},"}>删除\u003C\u002Fa>\n",[240,72213,72214],{"class":242,"line":34812},[240,72215,72216],{"class":443},"          \u003C\u002Ftd> \n",[240,72218,72219],{"class":242,"line":34818},[240,72220,72221],{"class":443},"          `\n",[240,72223,72224],{"class":242,"line":34824},[240,72225,72226],{"class":246},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[240,72228,72229,72232,72235],{"class":242,"line":34833},[240,72230,72231],{"class":257},"        tbody.",[240,72233,72234],{"class":436},"appendChild",[240,72236,72237],{"class":257},"(tr)\n",[240,72239,72240],{"class":242,"line":34839},[240,72241,54334],{"class":257},[240,72243,72244],{"class":242,"line":34850},[240,72245,4140],{"class":257},[240,72247,72248],{"class":242,"line":34856},[240,72249,4353],{"emptyLinePlaceholder":2051},[240,72251,72252],{"class":242,"line":34875},[240,72253,72254],{"class":246},"    \u002F\u002F 3.删除委托\n",[240,72256,72257],{"class":242,"line":34881},[240,72258,72259],{"class":246},"    \u002F\u002F 3.1 事件委托 tbody\n",[240,72261,72262,72265,72267,72269,72271,72273,72275,72277,72279],{"class":242,"line":34892},[240,72263,72264],{"class":257},"    tbody.",[240,72266,59744],{"class":436},[240,72268,789],{"class":257},[240,72270,59749],{"class":443},[240,72272,1277],{"class":257},[240,72274,56384],{"class":288},[240,72276,3612],{"class":257},[240,72278,2192],{"class":792},[240,72280,14392],{"class":257},[240,72282,72283,72285,72287,72289,72291],{"class":242,"line":34898},[240,72284,56415],{"class":288},[240,72286,68957],{"class":257},[240,72288,56421],{"class":288},[240,72290,70179],{"class":443},[240,72292,14392],{"class":257},[240,72294,72295],{"class":242,"line":34918},[240,72296,72297],{"class":246},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[240,72299,72300],{"class":242,"line":34934},[240,72301,72302],{"class":246},"        \u002F\u002F console.log(e.target.dataset.id);\n",[240,72304,72305],{"class":242,"line":34940},[240,72306,72307],{"class":246},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[240,72309,72310,72313,72315,72318,72320],{"class":242,"line":34954},[240,72311,72312],{"class":257},"        arr.",[240,72314,59941],{"class":436},[240,72316,72317],{"class":257},"(e.target.dataset.id, ",[240,72319,1643],{"class":264},[240,72321,2129],{"class":257},[240,72323,72324],{"class":242,"line":34960},[240,72325,72326],{"class":246},"        \u002F\u002F 重新渲染一次\n",[240,72328,72329,72332],{"class":242,"line":34966},[240,72330,72331],{"class":436},"        render",[240,72333,3929],{"class":257},[240,72335,72336],{"class":242,"line":34977},[240,72337,54334],{"class":257},[240,72339,72340],{"class":242,"line":34983},[240,72341,35407],{"class":257},[240,72343,72344,72346,72348],{"class":242,"line":34989},[240,72345,54353],{"class":257},[240,72347,53751],{"class":253},[240,72349,447],{"class":257},[240,72351,72352],{"class":242,"line":34999},[240,72353,4353],{"emptyLinePlaceholder":2051},[240,72355,72356,72358,72360],{"class":242,"line":35005},[240,72357,592],{"class":257},[240,72359,53738],{"class":253},[240,72361,447],{"class":257},[240,72363,72364],{"class":242,"line":35016},[240,72365,4353],{"emptyLinePlaceholder":2051},[240,72367,72368,72370,72372],{"class":242,"line":35022},[240,72369,592],{"class":257},[240,72371,52581],{"class":253},[240,72373,447],{"class":257},[19,72375,72376],{},"样式：",[231,72378,72382],{"className":72379,"code":72380,"language":72381,"meta":236,"style":236},"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",[23,72383,72384,72389,72399,72408,72412,72416,72421,72431,72436,72440,72445,72454,72459,72468,72472,72476,72481,72486,72495,72505,72510,72514,72519,72528,72537,72542,72552,72562,72566,72571,72579,72583,72588,72593,72598,72606,72615,72619,72624,72633,72637,72642,72651,72655,72660,72669,72678,72686,72690,72695,72704,72713,72722,72732,72738,72746,72756,72766,72770,72775,72784,72792,72801,72809,72818,72826,72836,72844,72848,72853,72862],{"__ignoreMap":236},[240,72385,72386],{"class":242,"line":243},[240,72387,72388],{"class":257},"* {\n",[240,72390,72391,72394,72396],{"class":242,"line":250},[240,72392,72393],{"class":253},"  margin",[240,72395,268],{"class":257},[240,72397,72398],{"class":443},"0;\n",[240,72400,72401,72404,72406],{"class":242,"line":261},[240,72402,72403],{"class":443},"  padding",[240,72405,268],{"class":257},[240,72407,72398],{"class":443},[240,72409,72410],{"class":242,"line":277},[240,72411,312],{"class":257},[240,72413,72414],{"class":242,"line":294},[240,72415,4353],{"emptyLinePlaceholder":2051},[240,72417,72418],{"class":242,"line":309},[240,72419,72420],{"class":443},"a {\n",[240,72422,72423,72426,72428],{"class":242,"line":529},[240,72424,72425],{"class":253},"  text-decoration",[240,72427,268],{"class":257},[240,72429,72430],{"class":443},"none;\n",[240,72432,72433],{"class":242,"line":549},[240,72434,72435],{"class":443},"  color:#721c24;\n",[240,72437,72438],{"class":242,"line":569},[240,72439,312],{"class":257},[240,72441,72442],{"class":242,"line":589},[240,72443,72444],{"class":443},"h1 {\n",[240,72446,72447,72449,72451],{"class":242,"line":715},[240,72448,1597],{"class":253},[240,72450,268],{"class":257},[240,72452,72453],{"class":443},"center;\n",[240,72455,72456],{"class":242,"line":727},[240,72457,72458],{"class":443},"  color:#333;\n",[240,72460,72461,72463,72465],{"class":242,"line":1730},[240,72462,72393],{"class":253},[240,72464,268],{"class":257},[240,72466,72467],{"class":443},"20px 0;\n",[240,72469,72470],{"class":242,"line":3582},[240,72471,4627],{"class":257},[240,72473,72474],{"class":242,"line":3596},[240,72475,312],{"class":257},[240,72477,72478],{"class":242,"line":3601},[240,72479,72480],{"class":443},"table {\n",[240,72482,72483],{"class":242,"line":3607},[240,72484,72485],{"class":443},"  margin:0 auto;\n",[240,72487,72488,72490,72492],{"class":242,"line":3628},[240,72489,280],{"class":253},[240,72491,268],{"class":257},[240,72493,72494],{"class":443},"800px;\n",[240,72496,72497,72500,72502],{"class":242,"line":3633},[240,72498,72499],{"class":253},"  border-collapse",[240,72501,268],{"class":257},[240,72503,72504],{"class":443},"collapse;\n",[240,72506,72507],{"class":242,"line":3647},[240,72508,72509],{"class":443},"  color:#004085;\n",[240,72511,72512],{"class":242,"line":3652},[240,72513,312],{"class":257},[240,72515,72516],{"class":242,"line":3681},[240,72517,72518],{"class":443},"th {\n",[240,72520,72521,72523,72525],{"class":242,"line":3686},[240,72522,72403],{"class":253},[240,72524,268],{"class":257},[240,72526,72527],{"class":443},"10px;\n",[240,72529,72530,72532,72534],{"class":242,"line":3703},[240,72531,1216],{"class":253},[240,72533,268],{"class":257},[240,72535,72536],{"class":246},"#cfe5ff;\n",[240,72538,72539],{"class":242,"line":3708},[240,72540,72541],{"class":257},"  \n",[240,72543,72544,72547,72549],{"class":242,"line":3713},[240,72545,72546],{"class":253},"  font-size",[240,72548,268],{"class":257},[240,72550,72551],{"class":443},"20px;\n",[240,72553,72554,72557,72559],{"class":242,"line":3718},[240,72555,72556],{"class":253},"  font-weight",[240,72558,268],{"class":257},[240,72560,72561],{"class":443},"400;\n",[240,72563,72564],{"class":242,"line":3732},[240,72565,312],{"class":257},[240,72567,72568],{"class":242,"line":3737},[240,72569,72570],{"class":443},"td,th {\n",[240,72572,72573,72576],{"class":242,"line":4530},[240,72574,72575],{"class":443},"  border:1px solid",[240,72577,72578],{"class":246}," #b8daff;\n",[240,72580,72581],{"class":242,"line":4544},[240,72582,312],{"class":257},[240,72584,72585],{"class":242,"line":4552},[240,72586,72587],{"class":443},"td {\n",[240,72589,72590],{"class":242,"line":4557},[240,72591,72592],{"class":443},"  padding:10px;\n",[240,72594,72595],{"class":242,"line":4563},[240,72596,72597],{"class":443},"  color:#666;\n",[240,72599,72600,72602,72604],{"class":242,"line":4569},[240,72601,1597],{"class":253},[240,72603,268],{"class":257},[240,72605,72453],{"class":443},[240,72607,72608,72610,72612],{"class":242,"line":4574},[240,72609,72546],{"class":253},[240,72611,268],{"class":257},[240,72613,72614],{"class":443},"16px;\n",[240,72616,72617],{"class":242,"line":9899},[240,72618,312],{"class":257},[240,72620,72621],{"class":242,"line":9923},[240,72622,72623],{"class":443},"tbody tr {\n",[240,72625,72626,72628,72630],{"class":242,"line":9928},[240,72627,1216],{"class":253},[240,72629,268],{"class":257},[240,72631,72632],{"class":246},"#fff;\n",[240,72634,72635],{"class":242,"line":9934},[240,72636,312],{"class":257},[240,72638,72639],{"class":242,"line":9961},[240,72640,72641],{"class":443},"tbody tr:hover {\n",[240,72643,72644,72646,72648],{"class":242,"line":9966},[240,72645,1216],{"class":253},[240,72647,268],{"class":257},[240,72649,72650],{"class":246},"#e1ecf8;\n",[240,72652,72653],{"class":242,"line":9972},[240,72654,312],{"class":257},[240,72656,72657],{"class":242,"line":9984},[240,72658,72659],{"class":443},".info {\n",[240,72661,72662,72664,72666],{"class":242,"line":9996},[240,72663,280],{"class":253},[240,72665,268],{"class":257},[240,72667,72668],{"class":443},"900px;\n",[240,72670,72671,72673,72675],{"class":242,"line":10008},[240,72672,72393],{"class":253},[240,72674,268],{"class":257},[240,72676,72677],{"class":443},"50px auto;\n",[240,72679,72680,72682,72684],{"class":242,"line":11667},[240,72681,1597],{"class":253},[240,72683,268],{"class":257},[240,72685,72453],{"class":443},[240,72687,72688],{"class":242,"line":11692},[240,72689,312],{"class":257},[240,72691,72692],{"class":242,"line":11715},[240,72693,72694],{"class":443},".info  input, .info select {\n",[240,72696,72697,72699,72701],{"class":242,"line":11739},[240,72698,280],{"class":253},[240,72700,268],{"class":257},[240,72702,72703],{"class":443},"80px;\n",[240,72705,72706,72708,72710],{"class":242,"line":11744},[240,72707,297],{"class":253},[240,72709,268],{"class":257},[240,72711,72712],{"class":443},"27px;\n",[240,72714,72715,72718,72720],{"class":242,"line":11749},[240,72716,72717],{"class":253},"  outline",[240,72719,268],{"class":257},[240,72721,72430],{"class":443},[240,72723,72724,72727,72729],{"class":242,"line":11754},[240,72725,72726],{"class":253},"  border-radius",[240,72728,268],{"class":257},[240,72730,72731],{"class":443},"5px;\n",[240,72733,72734,72736],{"class":242,"line":11763},[240,72735,72575],{"class":443},[240,72737,72578],{"class":246},[240,72739,72740,72742,72744],{"class":242,"line":11768},[240,72741,665],{"class":253},[240,72743,268],{"class":257},[240,72745,72731],{"class":443},[240,72747,72748,72751,72753],{"class":242,"line":11774},[240,72749,72750],{"class":253},"  box-sizing",[240,72752,268],{"class":257},[240,72754,72755],{"class":443},"border-box;\n",[240,72757,72758,72761,72763],{"class":242,"line":11795},[240,72759,72760],{"class":253},"  margin-right",[240,72762,268],{"class":257},[240,72764,72765],{"class":443},"15px;\n",[240,72767,72768],{"class":242,"line":11801},[240,72769,312],{"class":257},[240,72771,72772],{"class":242,"line":11815},[240,72773,72774],{"class":443},".info button {\n",[240,72776,72777,72779,72781],{"class":242,"line":11821},[240,72778,280],{"class":253},[240,72780,268],{"class":257},[240,72782,72783],{"class":443},"60px;\n",[240,72785,72786,72788,72790],{"class":242,"line":11848},[240,72787,297],{"class":253},[240,72789,268],{"class":257},[240,72791,72712],{"class":443},[240,72793,72794,72796,72798],{"class":242,"line":11857},[240,72795,690],{"class":253},[240,72797,268],{"class":257},[240,72799,72800],{"class":246},"#004085;\n",[240,72802,72803,72805,72807],{"class":242,"line":11863},[240,72804,72717],{"class":253},[240,72806,268],{"class":257},[240,72808,72430],{"class":443},[240,72810,72811,72814,72816],{"class":242,"line":11871},[240,72812,72813],{"class":253},"  border",[240,72815,268],{"class":257},[240,72817,72398],{"class":443},[240,72819,72820,72822,72824],{"class":242,"line":11876},[240,72821,678],{"class":253},[240,72823,268],{"class":257},[240,72825,72632],{"class":246},[240,72827,72828,72831,72833],{"class":242,"line":18552},[240,72829,72830],{"class":253},"  cursor",[240,72832,268],{"class":257},[240,72834,72835],{"class":443},"pointer;\n",[240,72837,72838,72840,72842],{"class":242,"line":18558},[240,72839,72726],{"class":253},[240,72841,268],{"class":257},[240,72843,72731],{"class":443},[240,72845,72846],{"class":242,"line":18581},[240,72847,312],{"class":257},[240,72849,72850],{"class":242,"line":18587},[240,72851,72852],{"class":443},".info .age {\n",[240,72854,72855,72857,72859],{"class":242,"line":18610},[240,72856,280],{"class":253},[240,72858,268],{"class":257},[240,72860,72861],{"class":443},"50px;\n",[240,72863,72864],{"class":242,"line":18624},[240,72865,312],{"class":257},[19,72867,72868],{},"思路：",[19,72870,72871],{},[219,72872],{"alt":236,"src":72873},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[19,72875,72876],{},[219,72877],{"alt":236,"src":72878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[19,72880,72881],{},[219,72882],{"alt":236,"src":72883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[32,72885,72887],{"id":72886},"_3315-重绘回流","3.3.15 重绘回流",[19,72889,72890],{},[219,72891],{"alt":236,"src":72892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[19,72894,72895],{},[219,72896],{"alt":236,"src":72897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[19,72899,72900],{},[219,72901],{"alt":236,"src":72902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[14,72904,72906],{"id":72905},"_34-bom","3.4 BOM",[19,72908,72909],{},[219,72910],{"alt":236,"src":72911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[19,72913,72914],{},"平时写的document省略了window而已，实际上是window.document",[19,72916,72917],{},"函数也是这样，调用的时候实际为window.fn()",[19,72919,72920],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[19,72922,72923],{},"window大部分情况下可以省略",[32,72925,72927],{"id":72926},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[19,72929,72930],{},"只执行一次",[19,72932,72933],{},[219,72934],{"alt":236,"src":72935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[19,72937,72938],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[19,72940,72941],{},[219,72942],{"alt":236,"src":72943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[32,72945,72947],{"id":72946},"_342-js执行机制","3.4.2 JS执行机制",[19,72949,72950],{},[219,72951],{"alt":236,"src":72952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[19,72954,72955],{},"两个的结果都是1111 3333 2222",[19,72957,72958],{},[219,72959],{"alt":236,"src":72960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[19,72962,72963],{},[219,72964],{"alt":236,"src":72965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[19,72967,72968],{},[219,72969],{"alt":236,"src":72970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[19,72972,72973],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[19,72975,72976],{},"工作流程：",[19,72978,72979],{},[219,72980],{"alt":236,"src":72981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[19,72983,72984],{},[219,72985],{"alt":236,"src":72986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[19,72988,72989],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[19,72991,72992],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[32,72994,72996],{"id":72995},"_343-location对象","3.4.3 location对象",[19,72998,72999],{},"location对象属于window这个全局对象下的，可以 省略window",[19,73001,73002],{},[219,73003],{"alt":236,"src":73004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[19,73006,73007],{},"href可以跳转页面",[1826,73009,73010],{},[1829,73011,73012],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[19,73014,73015],{},"search得到提交信息之后网站后边的地址",[19,73017,73018],{},[219,73019],{"alt":236,"src":73020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[19,73022,73023],{},[219,73024],{"alt":236,"src":73025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[1826,73027,73028],{"start":250},[1829,73029,73030],{},"hash:这个获取单页面应用#后边的地址",[19,73032,73033],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[19,73035,73036],{},[219,73037],{"alt":236,"src":73038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[231,73040,73042],{"className":55003,"code":73041,"language":55005,"meta":236,"style":236},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[23,73043,73044,73064,73084],{"__ignoreMap":236},[240,73045,73046,73048,73050,73052,73054,73057,73060,73062],{"class":242,"line":243},[240,73047,452],{"class":257},[240,73049,254],{"class":253},[240,73051,457],{"class":436},[240,73053,440],{"class":257},[240,73055,73056],{"class":443},"\"#\u002Fmy\"",[240,73058,73059],{"class":257},">我的\u003C\u002F",[240,73061,254],{"class":253},[240,73063,447],{"class":257},[240,73065,73066,73068,73070,73072,73074,73077,73080,73082],{"class":242,"line":250},[240,73067,452],{"class":257},[240,73069,254],{"class":253},[240,73071,457],{"class":436},[240,73073,440],{"class":257},[240,73075,73076],{"class":443},"\"#\u002Ffriend\"",[240,73078,73079],{"class":257},">关注\u003C\u002F",[240,73081,254],{"class":253},[240,73083,447],{"class":257},[240,73085,73086,73088,73090,73092,73094,73097,73100,73102],{"class":242,"line":261},[240,73087,452],{"class":257},[240,73089,254],{"class":253},[240,73091,457],{"class":436},[240,73093,440],{"class":257},[240,73095,73096],{"class":443},"\"#\u002Fdownload\"",[240,73098,73099],{"class":257},">下载\u003C\u002F",[240,73101,254],{"class":253},[240,73103,447],{"class":257},[19,73105,73106],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[1826,73108,73109],{"start":261},[1829,73110,73111,73112,73114,73115,73117],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[55651,73113],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[55651,73116],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[32,73119,73121],{"id":73120},"_345-navigator对象","3.4.5 navigator对象",[19,73123,73124],{},[219,73125],{"alt":236,"src":73126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[231,73128,73132],{"className":73129,"code":73130,"language":73131,"meta":236,"style":236},"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",[23,73133,73134,73139,73150,73162,73167,73218,73259,73264,73277,73289,73294],{"__ignoreMap":236},[240,73135,73136],{"class":242,"line":243},[240,73137,73138],{"class":246},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[240,73140,73141,73143,73145,73147],{"class":242,"line":250},[240,73142,2331],{"class":288},[240,73144,789],{"class":257},[240,73146,56384],{"class":288},[240,73148,73149],{"class":257}," () { \n",[240,73151,73152,73154,73157,73159],{"class":242,"line":261},[240,73153,8743],{"class":288},[240,73155,73156],{"class":264}," userAgent",[240,73158,15514],{"class":288},[240,73160,73161],{"class":257}," navigator.userAgent \n",[240,73163,73164],{"class":242,"line":277},[240,73165,73166],{"class":246},"\u002F\u002F 验证是否为Android或iPhone \n",[240,73168,73169,73171,73174,73176,73179,73182,73184,73186,73189,73191,73194,73198,73200,73202,73204,73207,73209,73211,73213,73215],{"class":242,"line":294},[240,73170,8743],{"class":288},[240,73172,73173],{"class":264}," android",[240,73175,15514],{"class":288},[240,73177,73178],{"class":257}," userAgent.",[240,73180,73181],{"class":436},"match",[240,73183,789],{"class":257},[240,73185,2683],{"class":443},[240,73187,73188],{"class":49923},"(Android);",[240,73190,3079],{"class":288},[240,73192,73193],{"class":264},"[\\s",[240,73195,73197],{"class":73196},"snhLl","\\\u002F",[240,73199,3034],{"class":264},[240,73201,2580],{"class":288},[240,73203,789],{"class":49923},[240,73205,73206],{"class":264},"[\\d.]",[240,73208,2580],{"class":288},[240,73210,2529],{"class":49923},[240,73212,3079],{"class":288},[240,73214,2683],{"class":443},[240,73216,73217],{"class":257},") \n",[240,73219,73220,73222,73225,73227,73229,73231,73233,73235,73238,73241,73244,73246,73248,73251,73253,73255,73257],{"class":242,"line":309},[240,73221,8743],{"class":288},[240,73223,73224],{"class":264}," iphone",[240,73226,15514],{"class":288},[240,73228,73178],{"class":257},[240,73230,73181],{"class":436},[240,73232,789],{"class":257},[240,73234,2683],{"class":443},[240,73236,73237],{"class":49923},"(iPhone",[240,73239,73240],{"class":264},"\\s",[240,73242,73243],{"class":49923},"OS)",[240,73245,73240],{"class":264},[240,73247,789],{"class":49923},[240,73249,73250],{"class":264},"[\\d_]",[240,73252,2580],{"class":288},[240,73254,2529],{"class":49923},[240,73256,2683],{"class":443},[240,73258,73217],{"class":257},[240,73260,73261],{"class":242,"line":529},[240,73262,73263],{"class":246},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[240,73265,73266,73268,73271,73274],{"class":242,"line":549},[240,73267,3489],{"class":288},[240,73269,73270],{"class":257}," (android ",[240,73272,73273],{"class":288},"||",[240,73275,73276],{"class":257}," iphone) { \n",[240,73278,73279,73282,73284,73287],{"class":242,"line":569},[240,73280,73281],{"class":257},"location.href ",[240,73283,440],{"class":288},[240,73285,73286],{"class":443}," 'http:\u002F\u002Fm.itcast.cn'",[240,73288,4627],{"class":257},[240,73290,73291],{"class":242,"line":589},[240,73292,73293],{"class":257},"} \n",[240,73295,73296],{"class":242,"line":715},[240,73297,73298],{"class":257},"})()\n",[32,73300,73302],{"id":73301},"_346-histroy对象","3.4.6 histroy对象",[19,73304,73305],{},[219,73306],{"alt":236,"src":73307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[19,73309,73310],{},"浏览器地址的前进与后退!!!",[19,73312,73313],{},"history.back() 等效于 history.go(-1)",[19,73315,73316],{},"history.forward() 等效于 history.go(1)",[14,73318,73320],{"id":73319},"_35-本地存储","3.5 本地存储",[1826,73322,73323,73326,73329],{},[1829,73324,73325],{},"数据存储在用户浏览器中",[1829,73327,73328],{},"设置、读取方便、甚至页面刷新不丢失数据",[1829,73330,73331],{},"容量较大，sessionStorage和localStorage约 5M 左右",[32,73333,73335],{"id":73334},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[19,73337,73338],{},"只能存储字符串",[19,73340,73341],{},[219,73342],{"alt":236,"src":73343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[19,73345,73346],{},[219,73347],{"alt":236,"src":73348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[19,73350,73351],{},"键值对要加引号,不然就会当变量来看了",[19,73353,73354],{},"localStorage.setItem('uname', 'pink')",[19,73356,73357],{},"刷新之后信息不再丢失",[19,73359,73360],{},"操作key,value会跟着变",[19,73362,73363],{},"删除只删除键就可以,即名字",[19,73365,73354],{},[19,73367,73368],{},"改:",[19,73370,73371],{},"localStorage.setItem('uname','red')",[19,73373,73374],{},"有这个键就是改,没有这个键就是改",[19,73376,73377],{},[219,73378],{"alt":236,"src":73379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[19,73381,73382],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[19,73384,73385],{},[219,73386],{"alt":236,"src":73387},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[19,73389,73390],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[32,73392,73394],{"id":73393},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[19,73396,73397],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[19,73399,73400],{},"特性:",[1826,73402,73403,73406,73409,73412],{},[1829,73404,73405],{},"生命周期为关闭浏览器窗口",[1829,73407,73408],{},"在同一个窗口(页面)下数据可以共享",[1829,73410,73411],{},"以键值对的形式存储使用",[1829,73413,73414],{},"用法跟localStorage 基本相同",[32,73416,73418],{"id":73417},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[19,73420,73421],{},"本地只能存储字符串,无法直接存储复杂数据类型",[231,73423,73425],{"className":55003,"code":73424,"language":55005,"meta":236,"style":236},"\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",[23,73426,73427,73435,73440,73445,73450,73455,73459,73464,73469],{"__ignoreMap":236},[240,73428,73429,73431,73433],{"class":242,"line":243},[240,73430,431],{"class":257},[240,73432,53751],{"class":253},[240,73434,447],{"class":257},[240,73436,73437],{"class":242,"line":250},[240,73438,73439],{"class":257},"    const obj = {\n",[240,73441,73442],{"class":242,"line":261},[240,73443,73444],{"class":257},"      uname: 'pink老师',\n",[240,73446,73447],{"class":242,"line":277},[240,73448,73449],{"class":257},"      age: 18,\n",[240,73451,73452],{"class":242,"line":294},[240,73453,73454],{"class":257},"      gender: '女'\n",[240,73456,73457],{"class":242,"line":309},[240,73458,4140],{"class":257},[240,73460,73461],{"class":242,"line":529},[240,73462,73463],{"class":257},"    \u002F\u002F 存储复杂数据类型\n",[240,73465,73466],{"class":242,"line":549},[240,73467,73468],{"class":257},"    localStorage.setItem('obj', obj)\n",[240,73470,73471,73473,73475],{"class":242,"line":569},[240,73472,54353],{"class":257},[240,73474,53751],{"class":253},[240,73476,447],{"class":257},[19,73478,73479],{},[219,73480],{"alt":236,"src":73481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[19,73483,73484],{},"如果获取一下数据:",[19,73486,73487],{},"log(localStorage.getItem('obj'))",[19,73489,73490],{},[219,73491],{"alt":236,"src":73492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[19,73494,73495],{},"发现直接存对象是使用不了的!!!",[23945,73497,73499],{"id":73498},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[19,73501,73502],{},[219,73503],{"alt":236,"src":73504},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[231,73506,73508],{"className":52579,"code":73507,"language":52581,"meta":236,"style":236},"\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",[23,73509,73510,73518,73528,73538,73547,73555,73559,73563,73589,73608,73616,73620,73625,73630],{"__ignoreMap":236},[240,73511,73512,73514,73516],{"class":242,"line":243},[240,73513,431],{"class":257},[240,73515,53751],{"class":253},[240,73517,447],{"class":257},[240,73519,73520,73522,73524,73526],{"class":242,"line":250},[240,73521,13172],{"class":288},[240,73523,71894],{"class":264},[240,73525,15514],{"class":288},[240,73527,258],{"class":257},[240,73529,73530,73533,73536],{"class":242,"line":261},[240,73531,73532],{"class":257},"      uname: ",[240,73534,73535],{"class":443},"'pink老师'",[240,73537,33412],{"class":257},[240,73539,73540,73543,73545],{"class":242,"line":277},[240,73541,73542],{"class":257},"      age: ",[240,73544,2748],{"class":264},[240,73546,33412],{"class":257},[240,73548,73549,73552],{"class":242,"line":294},[240,73550,73551],{"class":257},"      gender: ",[240,73553,73554],{"class":443},"'女'\n",[240,73556,73557],{"class":242,"line":309},[240,73558,4140],{"class":257},[240,73560,73561],{"class":242,"line":529},[240,73562,73463],{"class":246},[240,73564,73565,73568,73571,73573,73576,73578,73581,73583,73586],{"class":242,"line":549},[240,73566,73567],{"class":257},"  localStorage.",[240,73569,73570],{"class":436},"setItem",[240,73572,789],{"class":257},[240,73574,73575],{"class":443},"'obj'",[240,73577,1277],{"class":257},[240,73579,73580],{"class":264},"JSON",[240,73582,2657],{"class":257},[240,73584,73585],{"class":436},"stringify",[240,73587,73588],{"class":257},"(obj))\n",[240,73590,73591,73594,73596,73599,73602,73604,73606],{"class":242,"line":569},[240,73592,73593],{"class":257},"  console.",[240,73595,60178],{"class":436},[240,73597,73598],{"class":257},"(localStorage.",[240,73600,73601],{"class":436},"getItem",[240,73603,789],{"class":257},[240,73605,73575],{"class":443},[240,73607,32443],{"class":257},[240,73609,73610,73612,73614],{"class":242,"line":589},[240,73611,54353],{"class":257},[240,73613,53751],{"class":253},[240,73615,447],{"class":257},[240,73617,73618],{"class":242,"line":715},[240,73619,72541],{"class":257},[240,73621,73622],{"class":242,"line":727},[240,73623,73624],{"class":257},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[240,73626,73627],{"class":242,"line":1730},[240,73628,73629],{"class":257},"  类型是字符串的\n",[240,73631,73632],{"class":242,"line":3582},[240,73633,73634],{"class":257},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[23945,73636,73638],{"id":73637},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[19,73640,73641],{},[219,73642],{"alt":236,"src":73643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[19,73645,73646],{},[219,73647],{"alt":236,"src":73648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[231,73650,73652],{"className":55003,"code":73651,"language":55005,"meta":236,"style":236},"  \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",[23,73653,73654,73662,73666,73670,73674,73678,73682,73687,73692,73697,73702,73707,73712,73717,73722],{"__ignoreMap":236},[240,73655,73656,73658,73660],{"class":242,"line":243},[240,73657,452],{"class":257},[240,73659,53751],{"class":253},[240,73661,447],{"class":257},[240,73663,73664],{"class":242,"line":250},[240,73665,73439],{"class":257},[240,73667,73668],{"class":242,"line":261},[240,73669,73444],{"class":257},[240,73671,73672],{"class":242,"line":277},[240,73673,73449],{"class":257},[240,73675,73676],{"class":242,"line":294},[240,73677,73454],{"class":257},[240,73679,73680],{"class":242,"line":309},[240,73681,4140],{"class":257},[240,73683,73684],{"class":242,"line":529},[240,73685,73686],{"class":257},"    \u002F\u002F 1.存储复杂数据类型\n",[240,73688,73689],{"class":242,"line":549},[240,73690,73691],{"class":257},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[240,73693,73694],{"class":242,"line":569},[240,73695,73696],{"class":257},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[240,73698,73699],{"class":242,"line":589},[240,73700,73701],{"class":257},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[240,73703,73704],{"class":242,"line":715},[240,73705,73706],{"class":257},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[240,73708,73709],{"class":242,"line":727},[240,73710,73711],{"class":257},"    \u002F\u002F 取\n",[240,73713,73714],{"class":242,"line":1730},[240,73715,73716],{"class":257},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[240,73718,73719],{"class":242,"line":3582},[240,73720,73721],{"class":257},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[240,73723,73724,73726,73728],{"class":242,"line":3596},[240,73725,54353],{"class":257},[240,73727,53751],{"class":253},[240,73729,447],{"class":257},[19,73731,73732],{},[219,73733],{"alt":236,"src":73734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[32,73736,73738],{"id":73737},"_356-数组map方法","3.5.6 数组map方法",[19,73740,73741],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[19,73743,73744],{},[219,73745],{"alt":236,"src":73746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[19,73748,73749],{},[219,73750],{"alt":236,"src":73751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[19,73753,73754,73757],{},[68,73755,73756],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[19,73759,73760],{},"map有返回值，但是forEach没有返回值",[19,73762,73763],{},"map是个方法。用的时候要加 ()",[19,73765,73766],{},"map返回的是一个数组",[32,73768,73770],{"id":73769},"_357-数组中join方法","3.5.7 数组中join方法",[19,73772,73773],{},[219,73774],{"alt":236,"src":73775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[19,73777,73778],{},"类似于python中拼接字符串一样！",[1826,73780,73781,73784,73787],{},[1829,73782,73783],{},"小括号为空则逗号分开",[1829,73785,73786],{},"小括号为空字符串 ''，则元素之间没有分隔符",[1829,73788,73789],{},"小括号用啥符号就用进行分割",[32,73791,73793],{"id":73792},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[1826,73795,73796,73799,73802,73805,73808],{},[1829,73797,73798],{},"记住本地时间获取快速方式：new Date().toDateString()",[1829,73800,73801],{},"尽量减少DOM操作，用好map+join的渲染方式",[1829,73803,73804],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[1829,73806,73807],{},"return可以实现函数的结束",[1829,73809,73810],{},"禁止跳转是 preventDefault() 不要忘记",[231,73812,73814],{"className":52579,"code":73813,"language":52581,"meta":236,"style":236},"\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",[23,73815,73816,73826,73840,73844,73852,73866,73886,73898,73906,73912,73922,73932,73936,73940,73946,73956,73968,73972,73976,73983,73995,74009,74019,74023,74027,74034,74041,74048,74060,74072,74082,74094,74098,74102,74109,74116,74128,74140,74150,74162,74192,74196,74200,74207,74219,74231,74255,74265,74275,74279,74283,74291,74301,74313,74325,74337,74354,74366,74378,74382,74386,74393,74405,74417,74429,74440,74458,74471,74483,74507,74518,74522,74526,74534,74544,74548,74552,74558,74570,74581,74591,74595,74599,74605,74627,74631,74635,74641,74647,74659,74669,74681,74711,74724,74741,74745,74749,74760,74782,74792,74796,74800,74813,74823,74835,74847,74859,74871,74881,74891,74901,74912,74925,74929,74937,74945,74949,74957,74970,74990,75023,75056,75089,75115,75133,75151,75159,75185,75203,75221,75239,75257,75275,75283,75291,75309,75317,75346,75354,75362,75370,75383,75395,75407,75419,75431,75443,75456,75468,75476,75484,75492,75497,75502,75506,75510,75514,75518,75522,75526,75531,75536,75541,75546,75554,75562,75570,75575,75580,75585,75590,75595,75600,75605,75610,75615,75620,75625,75630,75635,75640,75644,75649,75654,75664,75673,75677,75682,75691,75707,75749,75789,75828,75893,75901,75905,75910,75928,75936,75941,75946,75976,75982,75987,76000,76012,76024,76036,76048,76060,76072,76076,76086,76090,76095,76100,76104,76113,76117,76122,76127,76146,76151,76171,76175,76180,76184,76189,76207,76225,76243,76262,76281,76300,76305,76311,76332,76338,76347,76353,76359,76365,76392,76405,76410,76420,76426,76432,76438,76444,76449,76455,76461,76467,76473,76506,76511,76516,76521,76526,76532,76538,76544,76555,76560,76566,76573,76587,76593,76617,76622,76627,76633,76639,76660,76666,76679,76685,76691,76697,76703,76708,76714,76720,76726,76744,76758,76764,76772,76778,76800,76805,76810,76815,76820,76825,76834,76843,76848],{"__ignoreMap":236},[240,73817,73818,73820,73822,73824],{"class":242,"line":243},[240,73819,53243],{"class":257},[240,73821,53246],{"class":253},[240,73823,53249],{"class":436},[240,73825,447],{"class":257},[240,73827,73828,73830,73832,73834,73836,73838],{"class":242,"line":250},[240,73829,431],{"class":257},[240,73831,52581],{"class":253},[240,73833,53260],{"class":436},[240,73835,440],{"class":257},[240,73837,53265],{"class":443},[240,73839,447],{"class":257},[240,73841,73842],{"class":242,"line":261},[240,73843,4353],{"emptyLinePlaceholder":2051},[240,73845,73846,73848,73850],{"class":242,"line":277},[240,73847,431],{"class":257},[240,73849,53278],{"class":253},[240,73851,447],{"class":257},[240,73853,73854,73856,73858,73860,73862,73864],{"class":242,"line":294},[240,73855,452],{"class":257},[240,73857,53288],{"class":253},[240,73859,53291],{"class":436},[240,73861,440],{"class":257},[240,73863,53296],{"class":443},[240,73865,447],{"class":257},[240,73867,73868,73870,73872,73874,73876,73878,73880,73882,73884],{"class":242,"line":309},[240,73869,452],{"class":257},[240,73871,53288],{"class":253},[240,73873,16869],{"class":436},[240,73875,440],{"class":257},[240,73877,53335],{"class":443},[240,73879,53315],{"class":436},[240,73881,440],{"class":257},[240,73883,53342],{"class":443},[240,73885,447],{"class":257},[240,73887,73888,73890,73892,73894,73896],{"class":242,"line":529},[240,73889,452],{"class":257},[240,73891,53351],{"class":253},[240,73893,53354],{"class":257},[240,73895,53351],{"class":253},[240,73897,447],{"class":257},[240,73899,73900,73902,73904],{"class":242,"line":549},[240,73901,452],{"class":257},[240,73903,2019],{"class":253},[240,73905,447],{"class":257},[240,73907,73908,73910],{"class":242,"line":569},[240,73909,8354],{"class":253},[240,73911,258],{"class":257},[240,73913,73914,73916,73918,73920],{"class":242,"line":589},[240,73915,56630],{"class":264},[240,73917,268],{"class":257},[240,73919,1274],{"class":264},[240,73921,274],{"class":257},[240,73923,73924,73926,73928,73930],{"class":242,"line":715},[240,73925,56641],{"class":264},[240,73927,268],{"class":257},[240,73929,1274],{"class":264},[240,73931,274],{"class":257},[240,73933,73934],{"class":242,"line":727},[240,73935,4140],{"class":257},[240,73937,73938],{"class":242,"line":1730},[240,73939,4353],{"emptyLinePlaceholder":2051},[240,73941,73942,73944],{"class":242,"line":3582},[240,73943,59212],{"class":253},[240,73945,258],{"class":257},[240,73947,73948,73950,73952,73954],{"class":242,"line":3596},[240,73949,59219],{"class":264},[240,73951,268],{"class":257},[240,73953,971],{"class":264},[240,73955,274],{"class":257},[240,73957,73958,73960,73962,73964,73966],{"class":242,"line":3601},[240,73959,64001],{"class":264},[240,73961,268],{"class":257},[240,73963,1000],{"class":264},[240,73965,289],{"class":288},[240,73967,274],{"class":257},[240,73969,73970],{"class":242,"line":3607},[240,73971,4140],{"class":257},[240,73973,73974],{"class":242,"line":3628},[240,73975,4353],{"emptyLinePlaceholder":2051},[240,73977,73978,73981],{"class":242,"line":3633},[240,73979,73980],{"class":436},"    .info",[240,73982,258],{"class":257},[240,73984,73985,73987,73989,73991,73993],{"class":242,"line":3647},[240,73986,56705],{"class":264},[240,73988,268],{"class":257},[240,73990,53432],{"class":264},[240,73992,289],{"class":288},[240,73994,274],{"class":257},[240,73996,73997,73999,74001,74003,74005,74007],{"class":242,"line":3652},[240,73998,56641],{"class":264},[240,74000,268],{"class":257},[240,74002,2546],{"class":264},[240,74004,289],{"class":288},[240,74006,53498],{"class":264},[240,74008,274],{"class":257},[240,74010,74011,74013,74015,74017],{"class":242,"line":3681},[240,74012,59219],{"class":264},[240,74014,268],{"class":257},[240,74016,971],{"class":264},[240,74018,274],{"class":257},[240,74020,74021],{"class":242,"line":3686},[240,74022,4140],{"class":257},[240,74024,74025],{"class":242,"line":3703},[240,74026,4353],{"emptyLinePlaceholder":2051},[240,74028,74029,74032],{"class":242,"line":3708},[240,74030,74031],{"class":436},"    .uname",[240,74033,33412],{"class":257},[240,74035,74036,74039],{"class":242,"line":3713},[240,74037,74038],{"class":436},"    .age",[240,74040,33412],{"class":257},[240,74042,74043,74046],{"class":242,"line":3718},[240,74044,74045],{"class":436},"    .salary",[240,74047,258],{"class":257},[240,74049,74050,74052,74054,74056,74058],{"class":242,"line":3732},[240,74051,56705],{"class":264},[240,74053,268],{"class":257},[240,74055,285],{"class":264},[240,74057,289],{"class":288},[240,74059,274],{"class":257},[240,74061,74062,74064,74066,74068,74070],{"class":242,"line":3737},[240,74063,56719],{"class":264},[240,74065,268],{"class":257},[240,74067,1000],{"class":264},[240,74069,289],{"class":288},[240,74071,274],{"class":257},[240,74073,74074,74076,74078,74080],{"class":242,"line":4530},[240,74075,63704],{"class":264},[240,74077,268],{"class":257},[240,74079,826],{"class":264},[240,74081,274],{"class":257},[240,74083,74084,74086,74088,74090,74092],{"class":242,"line":4544},[240,74085,63674],{"class":264},[240,74087,268],{"class":257},[240,74089,2674],{"class":264},[240,74091,289],{"class":288},[240,74093,274],{"class":257},[240,74095,74096],{"class":242,"line":4552},[240,74097,4140],{"class":257},[240,74099,74100],{"class":242,"line":4557},[240,74101,4353],{"emptyLinePlaceholder":2051},[240,74103,74104,74107],{"class":242,"line":4563},[240,74105,74106],{"class":436},"    .gender",[240,74108,33412],{"class":257},[240,74110,74111,74114],{"class":242,"line":4569},[240,74112,74113],{"class":436},"    .city",[240,74115,258],{"class":257},[240,74117,74118,74120,74122,74124,74126],{"class":242,"line":4574},[240,74119,56705],{"class":264},[240,74121,268],{"class":257},[240,74123,285],{"class":264},[240,74125,289],{"class":288},[240,74127,274],{"class":257},[240,74129,74130,74132,74134,74136,74138],{"class":242,"line":9899},[240,74131,56719],{"class":264},[240,74133,268],{"class":257},[240,74135,2921],{"class":264},[240,74137,289],{"class":288},[240,74139,274],{"class":257},[240,74141,74142,74144,74146,74148],{"class":242,"line":9923},[240,74143,63704],{"class":264},[240,74145,268],{"class":257},[240,74147,826],{"class":264},[240,74149,274],{"class":257},[240,74151,74152,74154,74156,74158,74160],{"class":242,"line":9928},[240,74153,63674],{"class":264},[240,74155,268],{"class":257},[240,74157,2674],{"class":264},[240,74159,289],{"class":288},[240,74161,274],{"class":257},[240,74163,74164,74166,74168,74170,74172,74174,74177,74179,74181,74183,74186,74188,74190],{"class":242,"line":9934},[240,74165,63901],{"class":264},[240,74167,268],{"class":257},[240,74169,1643],{"class":264},[240,74171,289],{"class":288},[240,74173,53463],{"class":264},[240,74175,74176],{"class":264}," rgb",[240,74178,789],{"class":257},[240,74180,3676],{"class":264},[240,74182,1277],{"class":257},[240,74184,74185],{"class":264},"197",[240,74187,1277],{"class":257},[240,74189,74185],{"class":264},[240,74191,796],{"class":257},[240,74193,74194],{"class":242,"line":9961},[240,74195,4140],{"class":257},[240,74197,74198],{"class":242,"line":9966},[240,74199,4353],{"emptyLinePlaceholder":2051},[240,74201,74202,74205],{"class":242,"line":9972},[240,74203,74204],{"class":253},"    button",[240,74206,258],{"class":257},[240,74208,74209,74211,74213,74215,74217],{"class":242,"line":9984},[240,74210,56719],{"class":264},[240,74212,268],{"class":257},[240,74214,2921],{"class":264},[240,74216,289],{"class":288},[240,74218,274],{"class":257},[240,74220,74221,74223,74225,74227,74229],{"class":242,"line":9996},[240,74222,56705],{"class":264},[240,74224,268],{"class":257},[240,74226,2583],{"class":264},[240,74228,289],{"class":288},[240,74230,274],{"class":257},[240,74232,74233,74235,74237,74240,74242,74244,74246,74249,74251,74253],{"class":242,"line":10008},[240,74234,56818],{"class":264},[240,74236,268],{"class":257},[240,74238,74239],{"class":264},"rgb",[240,74241,789],{"class":257},[240,74243,3062],{"class":264},[240,74245,1277],{"class":257},[240,74247,74248],{"class":264},"187",[240,74250,1277],{"class":257},[240,74252,2402],{"class":264},[240,74254,796],{"class":257},[240,74256,74257,74259,74261,74263],{"class":242,"line":11667},[240,74258,59349],{"class":264},[240,74260,268],{"class":257},[240,74262,683],{"class":264},[240,74264,274],{"class":257},[240,74266,74267,74269,74271,74273],{"class":242,"line":11692},[240,74268,63901],{"class":264},[240,74270,268],{"class":257},[240,74272,1274],{"class":264},[240,74274,274],{"class":257},[240,74276,74277],{"class":242,"line":11715},[240,74278,4140],{"class":257},[240,74280,74281],{"class":242,"line":11739},[240,74282,4353],{"emptyLinePlaceholder":2051},[240,74284,74285,74287,74289],{"class":242,"line":11744},[240,74286,74204],{"class":253},[240,74288,53627],{"class":253},[240,74290,258],{"class":257},[240,74292,74293,74295,74297,74299],{"class":242,"line":11749},[240,74294,56943],{"class":264},[240,74296,268],{"class":257},[240,74298,375],{"class":264},[240,74300,274],{"class":257},[240,74302,74303,74305,74307,74309,74311],{"class":242,"line":11754},[240,74304,56705],{"class":264},[240,74306,268],{"class":257},[240,74308,2546],{"class":264},[240,74310,289],{"class":288},[240,74312,274],{"class":257},[240,74314,74315,74317,74319,74321,74323],{"class":242,"line":11763},[240,74316,56719],{"class":264},[240,74318,268],{"class":257},[240,74320,2546],{"class":264},[240,74322,289],{"class":288},[240,74324,274],{"class":257},[240,74326,74327,74329,74331,74333,74335],{"class":242,"line":11768},[240,74328,59292],{"class":264},[240,74330,268],{"class":257},[240,74332,2571],{"class":264},[240,74334,289],{"class":288},[240,74336,274],{"class":257},[240,74338,74339,74341,74343,74345,74347,74349,74352],{"class":242,"line":11774},[240,74340,63901],{"class":264},[240,74342,268],{"class":257},[240,74344,1643],{"class":264},[240,74346,289],{"class":288},[240,74348,53463],{"class":264},[240,74350,74351],{"class":264}," #fff",[240,74353,274],{"class":257},[240,74355,74356,74358,74360,74362,74364],{"class":242,"line":11795},[240,74357,57067],{"class":264},[240,74359,268],{"class":257},[240,74361,1741],{"class":264},[240,74363,289],{"class":288},[240,74365,274],{"class":257},[240,74367,74368,74370,74372,74374,74376],{"class":242,"line":11801},[240,74369,63674],{"class":264},[240,74371,268],{"class":257},[240,74373,1643],{"class":264},[240,74375,289],{"class":288},[240,74377,274],{"class":257},[240,74379,74380],{"class":242,"line":11815},[240,74381,4140],{"class":257},[240,74383,74384],{"class":242,"line":11821},[240,74385,4353],{"emptyLinePlaceholder":2051},[240,74387,74388,74391],{"class":242,"line":11848},[240,74389,74390],{"class":436},"    .total",[240,74392,258],{"class":257},[240,74394,74395,74397,74399,74401,74403],{"class":242,"line":11857},[240,74396,56705],{"class":264},[240,74398,268],{"class":257},[240,74400,63555],{"class":264},[240,74402,289],{"class":288},[240,74404,274],{"class":257},[240,74406,74407,74409,74411,74413,74415],{"class":242,"line":11863},[240,74408,56719],{"class":264},[240,74410,268],{"class":257},[240,74412,302],{"class":264},[240,74414,289],{"class":288},[240,74416,274],{"class":257},[240,74418,74419,74421,74423,74425,74427],{"class":242,"line":11871},[240,74420,59292],{"class":264},[240,74422,268],{"class":257},[240,74424,302],{"class":264},[240,74426,289],{"class":288},[240,74428,274],{"class":257},[240,74430,74431,74433,74435,74438],{"class":242,"line":11876},[240,74432,59219],{"class":264},[240,74434,268],{"class":257},[240,74436,74437],{"class":264},"right",[240,74439,274],{"class":257},[240,74441,74442,74444,74446,74448,74450,74452,74454,74456],{"class":242,"line":18552},[240,74443,56641],{"class":264},[240,74445,268],{"class":257},[240,74447,302],{"class":264},[240,74449,289],{"class":288},[240,74451,53498],{"class":264},[240,74453,3991],{"class":264},[240,74455,289],{"class":288},[240,74457,274],{"class":257},[240,74459,74460,74463,74465,74467,74469],{"class":242,"line":18558},[240,74461,74462],{"class":264},"      padding-right",[240,74464,268],{"class":257},[240,74466,2546],{"class":264},[240,74468,289],{"class":288},[240,74470,274],{"class":257},[240,74472,74473,74475,74477,74479,74481],{"class":242,"line":18581},[240,74474,56856],{"class":264},[240,74476,268],{"class":257},[240,74478,2622],{"class":264},[240,74480,289],{"class":288},[240,74482,274],{"class":257},[240,74484,74485,74487,74489,74491,74493,74496,74498,74501,74503,74505],{"class":242,"line":18587},[240,74486,56818],{"class":264},[240,74488,268],{"class":257},[240,74490,74239],{"class":264},[240,74492,789],{"class":257},[240,74494,74495],{"class":264},"237",[240,74497,1277],{"class":257},[240,74499,74500],{"class":264},"235",[240,74502,1277],{"class":257},[240,74504,74500],{"class":264},[240,74506,796],{"class":257},[240,74508,74509,74512,74514,74516],{"class":242,"line":18610},[240,74510,74511],{"class":264},"      box-sizing",[240,74513,268],{"class":257},[240,74515,62436],{"class":264},[240,74517,274],{"class":257},[240,74519,74520],{"class":242,"line":18624},[240,74521,4140],{"class":257},[240,74523,74524],{"class":242,"line":18644},[240,74525,4353],{"emptyLinePlaceholder":2051},[240,74527,74528,74530,74532],{"class":242,"line":18650},[240,74529,74390],{"class":436},[240,74531,53627],{"class":253},[240,74533,258],{"class":257},[240,74535,74536,74538,74540,74542],{"class":242,"line":18661},[240,74537,59349],{"class":264},[240,74539,268],{"class":257},[240,74541,1953],{"class":264},[240,74543,274],{"class":257},[240,74545,74546],{"class":242,"line":18684},[240,74547,4140],{"class":257},[240,74549,74550],{"class":242,"line":18706},[240,74551,4353],{"emptyLinePlaceholder":2051},[240,74553,74554,74556],{"class":242,"line":18711},[240,74555,66946],{"class":253},[240,74557,258],{"class":257},[240,74559,74560,74562,74564,74566,74568],{"class":242,"line":18717},[240,74561,56705],{"class":264},[240,74563,268],{"class":257},[240,74565,63555],{"class":264},[240,74567,289],{"class":288},[240,74569,274],{"class":257},[240,74571,74572,74574,74576,74579],{"class":242,"line":18731},[240,74573,56641],{"class":264},[240,74575,268],{"class":257},[240,74577,74578],{"class":264},"auto",[240,74580,274],{"class":257},[240,74582,74583,74585,74587,74589],{"class":242,"line":18744},[240,74584,66953],{"class":264},[240,74586,268],{"class":257},[240,74588,66958],{"class":264},[240,74590,274],{"class":257},[240,74592,74593],{"class":242,"line":18749},[240,74594,4140],{"class":257},[240,74596,74597],{"class":242,"line":18763},[240,74598,4353],{"emptyLinePlaceholder":2051},[240,74600,74601,74603],{"class":242,"line":18768},[240,74602,67038],{"class":253},[240,74604,258],{"class":257},[240,74606,74607,74609,74611,74613,74615,74617,74619,74621,74623,74625],{"class":242,"line":18774},[240,74608,56818],{"class":264},[240,74610,268],{"class":257},[240,74612,74239],{"class":264},[240,74614,789],{"class":257},[240,74616,74495],{"class":264},[240,74618,1277],{"class":257},[240,74620,74500],{"class":264},[240,74622,1277],{"class":257},[240,74624,74500],{"class":264},[240,74626,796],{"class":257},[240,74628,74629],{"class":242,"line":18779},[240,74630,4140],{"class":257},[240,74632,74633],{"class":242,"line":18793},[240,74634,4353],{"emptyLinePlaceholder":2051},[240,74636,74637,74639],{"class":242,"line":18798},[240,74638,67038],{"class":253},[240,74640,33412],{"class":257},[240,74642,74643,74645],{"class":242,"line":18803},[240,74644,67104],{"class":253},[240,74646,258],{"class":257},[240,74648,74649,74651,74653,74655,74657],{"class":242,"line":18817},[240,74650,56719],{"class":264},[240,74652,268],{"class":257},[240,74654,2377],{"class":264},[240,74656,289],{"class":288},[240,74658,274],{"class":257},[240,74660,74661,74663,74665,74667],{"class":242,"line":18829},[240,74662,59219],{"class":264},[240,74664,268],{"class":257},[240,74666,813],{"class":264},[240,74668,274],{"class":257},[240,74670,74671,74673,74675,74677,74679],{"class":242,"line":18834},[240,74672,56856],{"class":264},[240,74674,268],{"class":257},[240,74676,2648],{"class":264},[240,74678,289],{"class":288},[240,74680,274],{"class":257},[240,74682,74683,74685,74687,74689,74691,74693,74695,74697,74700,74702,74705,74707,74709],{"class":242,"line":18847},[240,74684,63901],{"class":264},[240,74686,268],{"class":257},[240,74688,1643],{"class":264},[240,74690,289],{"class":288},[240,74692,53463],{"class":264},[240,74694,74176],{"class":264},[240,74696,789],{"class":257},[240,74698,74699],{"class":264},"228",[240,74701,1277],{"class":257},[240,74703,74704],{"class":264},"225",[240,74706,1277],{"class":257},[240,74708,74704],{"class":264},[240,74710,796],{"class":257},[240,74712,74713,74716,74718,74720,74722],{"class":242,"line":18852},[240,74714,74715],{"class":264},"      padding-left",[240,74717,268],{"class":257},[240,74719,1741],{"class":264},[240,74721,289],{"class":288},[240,74723,274],{"class":257},[240,74725,74726,74728,74730,74732,74735,74737,74739],{"class":242,"line":18857},[240,74727,63784],{"class":264},[240,74729,268],{"class":257},[240,74731,30067],{"class":264},[240,74733,74734],{"class":264}," linear",[240,74736,63791],{"class":264},[240,74738,2793],{"class":288},[240,74740,274],{"class":257},[240,74742,74743],{"class":242,"line":18862},[240,74744,4140],{"class":257},[240,74746,74747],{"class":242,"line":18875},[240,74748,4353],{"emptyLinePlaceholder":2051},[240,74750,74751,74754,74756,74758],{"class":242,"line":18880},[240,74752,74753],{"class":253},"    tbody",[240,74755,72067],{"class":253},[240,74757,710],{"class":436},[240,74759,258],{"class":257},[240,74761,74762,74764,74766,74768,74770,74772,74774,74776,74778,74780],{"class":242,"line":34579},[240,74763,56818],{"class":264},[240,74765,268],{"class":257},[240,74767,74239],{"class":264},[240,74769,789],{"class":257},[240,74771,74495],{"class":264},[240,74773,1277],{"class":257},[240,74775,74500],{"class":264},[240,74777,1277],{"class":257},[240,74779,74500],{"class":264},[240,74781,796],{"class":257},[240,74783,74784,74786,74788,74790],{"class":242,"line":34585},[240,74785,63949],{"class":264},[240,74787,268],{"class":257},[240,74789,63954],{"class":264},[240,74791,274],{"class":257},[240,74793,74794],{"class":242,"line":34591},[240,74795,4140],{"class":257},[240,74797,74798],{"class":242,"line":34597},[240,74799,4353],{"emptyLinePlaceholder":2051},[240,74801,74802,74804,74806,74809,74811],{"class":242,"line":34603},[240,74803,74753],{"class":253},[240,74805,72067],{"class":253},[240,74807,74808],{"class":253}," td",[240,74810,609],{"class":253},[240,74812,258],{"class":257},[240,74814,74815,74817,74819,74821],{"class":242,"line":34614},[240,74816,56943],{"class":264},[240,74818,268],{"class":257},[240,74820,271],{"class":264},[240,74822,274],{"class":257},[240,74824,74825,74827,74829,74831,74833],{"class":242,"line":34620},[240,74826,56705],{"class":264},[240,74828,268],{"class":257},[240,74830,3002],{"class":264},[240,74832,289],{"class":288},[240,74834,274],{"class":257},[240,74836,74837,74839,74841,74843,74845],{"class":242,"line":34640},[240,74838,56719],{"class":264},[240,74840,268],{"class":257},[240,74842,2921],{"class":264},[240,74844,289],{"class":288},[240,74846,274],{"class":257},[240,74848,74849,74851,74853,74855,74857],{"class":242,"line":34646},[240,74850,59292],{"class":264},[240,74852,268],{"class":257},[240,74854,2921],{"class":264},[240,74856,289],{"class":288},[240,74858,274],{"class":257},[240,74860,74861,74863,74865,74867,74869],{"class":242,"line":34657},[240,74862,64001],{"class":264},[240,74864,268],{"class":257},[240,74866,1668],{"class":264},[240,74868,289],{"class":288},[240,74870,274],{"class":257},[240,74872,74873,74875,74877,74879],{"class":242,"line":34663},[240,74874,59349],{"class":264},[240,74876,268],{"class":257},[240,74878,683],{"class":264},[240,74880,274],{"class":257},[240,74882,74883,74885,74887,74889],{"class":242,"line":34669},[240,74884,59219],{"class":264},[240,74886,268],{"class":257},[240,74888,971],{"class":264},[240,74890,274],{"class":257},[240,74892,74893,74895,74897,74899],{"class":242,"line":34675},[240,74894,65893],{"class":264},[240,74896,268],{"class":257},[240,74898,826],{"class":264},[240,74900,274],{"class":257},[240,74902,74903,74905,74907,74910],{"class":242,"line":34681},[240,74904,56818],{"class":264},[240,74906,268],{"class":257},[240,74908,74909],{"class":264},"orange",[240,74911,274],{"class":257},[240,74913,74914,74916,74918,74921,74923],{"class":242,"line":34687},[240,74915,57067],{"class":264},[240,74917,268],{"class":257},[240,74919,74920],{"class":264},"12.5",[240,74922,289],{"class":288},[240,74924,274],{"class":257},[240,74926,74927],{"class":242,"line":34693},[240,74928,4140],{"class":257},[240,74930,74931,74933,74935],{"class":242,"line":34699},[240,74932,54353],{"class":257},[240,74934,2019],{"class":253},[240,74936,447],{"class":257},[240,74938,74939,74941,74943],{"class":242,"line":34719},[240,74940,592],{"class":257},[240,74942,53278],{"class":253},[240,74944,447],{"class":257},[240,74946,74947],{"class":242,"line":34725},[240,74948,4353],{"emptyLinePlaceholder":2051},[240,74950,74951,74953,74955],{"class":242,"line":34741},[240,74952,431],{"class":257},[240,74954,53738],{"class":253},[240,74956,447],{"class":257},[240,74958,74959,74961,74963,74966,74968],{"class":242,"line":34747},[240,74960,452],{"class":257},[240,74962,14],{"class":253},[240,74964,74965],{"class":257},">学生就业统计表\u003C\u002F",[240,74967,14],{"class":253},[240,74969,447],{"class":257},[240,74971,74972,74974,74976,74978,74980,74982,74984,74986,74988],{"class":242,"line":34761},[240,74973,452],{"class":257},[240,74975,68548],{"class":253},[240,74977,437],{"class":436},[240,74979,440],{"class":257},[240,74981,64587],{"class":443},[240,74983,70993],{"class":436},[240,74985,440],{"class":257},[240,74987,33722],{"class":443},[240,74989,447],{"class":257},[240,74991,74992,74994,74996,74998,75000,75002,75004,75006,75008,75010,75012,75015,75017,75019,75021],{"class":242,"line":34767},[240,74993,53285],{"class":257},[240,74995,55756],{"class":253},[240,74997,55759],{"class":436},[240,74999,440],{"class":257},[240,75001,64622],{"class":443},[240,75003,16869],{"class":436},[240,75005,440],{"class":257},[240,75007,71019],{"class":443},[240,75009,62948],{"class":436},[240,75011,440],{"class":257},[240,75013,75014],{"class":443},"\"姓名\"",[240,75016,437],{"class":436},[240,75018,440],{"class":257},[240,75020,71019],{"class":443},[240,75022,447],{"class":257},[240,75024,75025,75027,75029,75031,75033,75035,75037,75039,75041,75043,75045,75048,75050,75052,75054],{"class":242,"line":34782},[240,75026,53285],{"class":257},[240,75028,55756],{"class":253},[240,75030,55759],{"class":436},[240,75032,440],{"class":257},[240,75034,64622],{"class":443},[240,75036,16869],{"class":436},[240,75038,440],{"class":257},[240,75040,71047],{"class":443},[240,75042,62948],{"class":436},[240,75044,440],{"class":257},[240,75046,75047],{"class":443},"\"年龄\"",[240,75049,437],{"class":436},[240,75051,440],{"class":257},[240,75053,71047],{"class":443},[240,75055,447],{"class":257},[240,75057,75058,75060,75062,75064,75066,75068,75070,75072,75074,75076,75078,75081,75083,75085,75087],{"class":242,"line":34788},[240,75059,53285],{"class":257},[240,75061,55756],{"class":253},[240,75063,55759],{"class":436},[240,75065,440],{"class":257},[240,75067,64622],{"class":443},[240,75069,16869],{"class":436},[240,75071,440],{"class":257},[240,75073,71149],{"class":443},[240,75075,62948],{"class":436},[240,75077,440],{"class":257},[240,75079,75080],{"class":443},"\"薪资\"",[240,75082,437],{"class":436},[240,75084,440],{"class":257},[240,75086,71149],{"class":443},[240,75088,447],{"class":257},[240,75090,75091,75093,75095,75097,75099,75101,75103,75105,75107,75109,75111,75113],{"class":242,"line":34797},[240,75092,53285],{"class":257},[240,75094,71067],{"class":253},[240,75096,16869],{"class":436},[240,75098,440],{"class":257},[240,75100,71074],{"class":443},[240,75102,16908],{"class":436},[240,75104,440],{"class":257},[240,75106,9603],{"class":443},[240,75108,437],{"class":436},[240,75110,440],{"class":257},[240,75112,71074],{"class":443},[240,75114,447],{"class":257},[240,75116,75117,75119,75121,75123,75125,75127,75129,75131],{"class":242,"line":34803},[240,75118,57167],{"class":257},[240,75120,71089],{"class":253},[240,75122,68574],{"class":436},[240,75124,440],{"class":257},[240,75126,11912],{"class":443},[240,75128,71098],{"class":257},[240,75130,71089],{"class":253},[240,75132,447],{"class":257},[240,75134,75135,75137,75139,75141,75143,75145,75147,75149],{"class":242,"line":34812},[240,75136,57167],{"class":257},[240,75138,71089],{"class":253},[240,75140,68574],{"class":436},[240,75142,440],{"class":257},[240,75144,11981],{"class":443},[240,75146,71117],{"class":257},[240,75148,71089],{"class":253},[240,75150,447],{"class":257},[240,75152,75153,75155,75157],{"class":242,"line":34818},[240,75154,53715],{"class":257},[240,75156,71067],{"class":253},[240,75158,447],{"class":257},[240,75160,75161,75163,75165,75167,75169,75171,75173,75175,75177,75179,75181,75183],{"class":242,"line":34824},[240,75162,53285],{"class":257},[240,75164,71067],{"class":253},[240,75166,16869],{"class":436},[240,75168,440],{"class":257},[240,75170,71171],{"class":443},[240,75172,16908],{"class":436},[240,75174,440],{"class":257},[240,75176,9603],{"class":443},[240,75178,437],{"class":436},[240,75180,440],{"class":257},[240,75182,71171],{"class":443},[240,75184,447],{"class":257},[240,75186,75187,75189,75191,75193,75195,75197,75199,75201],{"class":242,"line":34833},[240,75188,57167],{"class":257},[240,75190,71089],{"class":253},[240,75192,68574],{"class":436},[240,75194,440],{"class":257},[240,75196,71192],{"class":443},[240,75198,71195],{"class":257},[240,75200,71089],{"class":253},[240,75202,447],{"class":257},[240,75204,75205,75207,75209,75211,75213,75215,75217,75219],{"class":242,"line":34839},[240,75206,57167],{"class":257},[240,75208,71089],{"class":253},[240,75210,68574],{"class":436},[240,75212,440],{"class":257},[240,75214,71212],{"class":443},[240,75216,71215],{"class":257},[240,75218,71089],{"class":253},[240,75220,447],{"class":257},[240,75222,75223,75225,75227,75229,75231,75233,75235,75237],{"class":242,"line":34850},[240,75224,57167],{"class":257},[240,75226,71089],{"class":253},[240,75228,68574],{"class":436},[240,75230,440],{"class":257},[240,75232,71232],{"class":443},[240,75234,71235],{"class":257},[240,75236,71089],{"class":253},[240,75238,447],{"class":257},[240,75240,75241,75243,75245,75247,75249,75251,75253,75255],{"class":242,"line":34856},[240,75242,57167],{"class":257},[240,75244,71089],{"class":253},[240,75246,68574],{"class":436},[240,75248,440],{"class":257},[240,75250,71252],{"class":443},[240,75252,71255],{"class":257},[240,75254,71089],{"class":253},[240,75256,447],{"class":257},[240,75258,75259,75261,75263,75265,75267,75269,75271,75273],{"class":242,"line":34875},[240,75260,57167],{"class":257},[240,75262,71089],{"class":253},[240,75264,68574],{"class":436},[240,75266,440],{"class":257},[240,75268,71272],{"class":443},[240,75270,71275],{"class":257},[240,75272,71089],{"class":253},[240,75274,447],{"class":257},[240,75276,75277,75279,75281],{"class":242,"line":34881},[240,75278,53715],{"class":257},[240,75280,71067],{"class":253},[240,75282,447],{"class":257},[240,75284,75285,75287,75289],{"class":242,"line":34892},[240,75286,53285],{"class":257},[240,75288,55822],{"class":253},[240,75290,447],{"class":257},[240,75292,75293,75295,75297,75300,75302,75305,75307],{"class":242,"line":34898},[240,75294,57167],{"class":257},[240,75296,240],{"class":253},[240,75298,75299],{"class":257},">+\u003C\u002F",[240,75301,240],{"class":253},[240,75303,75304],{"class":257},">添加\u003C\u002F",[240,75306,55822],{"class":253},[240,75308,447],{"class":257},[240,75310,75311,75313,75315],{"class":242,"line":34918},[240,75312,54353],{"class":257},[240,75314,68548],{"class":253},[240,75316,447],{"class":257},[240,75318,75319,75321,75323,75325,75327,75329,75332,75334,75337,75339,75342,75344],{"class":242,"line":34934},[240,75320,452],{"class":257},[240,75322,330],{"class":253},[240,75324,437],{"class":436},[240,75326,440],{"class":257},[240,75328,64503],{"class":443},[240,75330,75331],{"class":257},">共有数据 \u003C",[240,75333,240],{"class":253},[240,75335,75336],{"class":257},">0\u003C\u002F",[240,75338,240],{"class":253},[240,75340,75341],{"class":257},"> 条\u003C\u002F",[240,75343,330],{"class":253},[240,75345,447],{"class":257},[240,75347,75348,75350,75352],{"class":242,"line":34940},[240,75349,452],{"class":257},[240,75351,802],{"class":253},[240,75353,447],{"class":257},[240,75355,75356,75358,75360],{"class":242,"line":34954},[240,75357,53285],{"class":257},[240,75359,805],{"class":253},[240,75361,447],{"class":257},[240,75363,75364,75366,75368],{"class":242,"line":34960},[240,75365,57167],{"class":257},[240,75367,808],{"class":253},[240,75369,447],{"class":257},[240,75371,75372,75374,75376,75379,75381],{"class":242,"line":34966},[240,75373,57235],{"class":257},[240,75375,811],{"class":253},[240,75377,75378],{"class":257},">ID\u003C\u002F",[240,75380,811],{"class":253},[240,75382,447],{"class":257},[240,75384,75385,75387,75389,75391,75393],{"class":242,"line":34977},[240,75386,57235],{"class":257},[240,75388,811],{"class":253},[240,75390,71378],{"class":257},[240,75392,811],{"class":253},[240,75394,447],{"class":257},[240,75396,75397,75399,75401,75403,75405],{"class":242,"line":34983},[240,75398,57235],{"class":257},[240,75400,811],{"class":253},[240,75402,71391],{"class":257},[240,75404,811],{"class":253},[240,75406,447],{"class":257},[240,75408,75409,75411,75413,75415,75417],{"class":242,"line":34989},[240,75410,57235],{"class":257},[240,75412,811],{"class":253},[240,75414,71404],{"class":257},[240,75416,811],{"class":253},[240,75418,447],{"class":257},[240,75420,75421,75423,75425,75427,75429],{"class":242,"line":34999},[240,75422,57235],{"class":257},[240,75424,811],{"class":253},[240,75426,71417],{"class":257},[240,75428,811],{"class":253},[240,75430,447],{"class":257},[240,75432,75433,75435,75437,75439,75441],{"class":242,"line":35005},[240,75434,57235],{"class":257},[240,75436,811],{"class":253},[240,75438,71430],{"class":257},[240,75440,811],{"class":253},[240,75442,447],{"class":257},[240,75444,75445,75447,75449,75452,75454],{"class":242,"line":35016},[240,75446,57235],{"class":257},[240,75448,811],{"class":253},[240,75450,75451],{"class":257},">录入时间\u003C\u002F",[240,75453,811],{"class":253},[240,75455,447],{"class":257},[240,75457,75458,75460,75462,75464,75466],{"class":242,"line":35022},[240,75459,57235],{"class":257},[240,75461,811],{"class":253},[240,75463,71443],{"class":257},[240,75465,811],{"class":253},[240,75467,447],{"class":257},[240,75469,75470,75472,75474],{"class":242,"line":35032},[240,75471,57340],{"class":257},[240,75473,808],{"class":253},[240,75475,447],{"class":257},[240,75477,75478,75480,75482],{"class":242,"line":35037},[240,75479,53715],{"class":257},[240,75481,805],{"class":253},[240,75483,447],{"class":257},[240,75485,75486,75488,75490],{"class":242,"line":35043},[240,75487,53285],{"class":257},[240,75489,819],{"class":253},[240,75491,447],{"class":257},[240,75493,75494],{"class":242,"line":35092},[240,75495,75496],{"class":246},"      \u003C!-- \u003Ctr>\n",[240,75498,75499],{"class":242,"line":35139},[240,75500,75501],{"class":246},"        \u003Ctd>1\u003C\u002Ftd>\n",[240,75503,75504],{"class":242,"line":35144},[240,75505,75501],{"class":246},[240,75507,75508],{"class":242,"line":35150},[240,75509,75501],{"class":246},[240,75511,75512],{"class":242,"line":35169},[240,75513,75501],{"class":246},[240,75515,75516],{"class":242,"line":35175},[240,75517,75501],{"class":246},[240,75519,75520],{"class":242,"line":35195},[240,75521,75501],{"class":246},[240,75523,75524],{"class":242,"line":35201},[240,75525,75501],{"class":246},[240,75527,75528],{"class":242,"line":35207},[240,75529,75530],{"class":246},"        \u003Ctd>\n",[240,75532,75533],{"class":242,"line":35217},[240,75534,75535],{"class":246},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[240,75537,75538],{"class":242,"line":35222},[240,75539,75540],{"class":246},"        \u003C\u002Ftd>\n",[240,75542,75543],{"class":242,"line":35228},[240,75544,75545],{"class":246},"      \u003C\u002Ftr> -->\n",[240,75547,75548,75550,75552],{"class":242,"line":35244},[240,75549,53715],{"class":257},[240,75551,819],{"class":253},[240,75553,447],{"class":257},[240,75555,75556,75558,75560],{"class":242,"line":35289},[240,75557,54353],{"class":257},[240,75559,802],{"class":253},[240,75561,447],{"class":257},[240,75563,75564,75566,75568],{"class":242,"line":35295},[240,75565,452],{"class":257},[240,75567,53751],{"class":253},[240,75569,447],{"class":257},[240,75571,75572],{"class":242,"line":35301},[240,75573,75574],{"class":246},"    \u002F\u002F const initData = [{\n",[240,75576,75577],{"class":242,"line":35307},[240,75578,75579],{"class":246},"    \u002F\u002F   unameId: 1,\n",[240,75581,75582],{"class":242,"line":35318},[240,75583,75584],{"class":246},"    \u002F\u002F   uname: '华晨宇',\n",[240,75586,75587],{"class":242,"line":35324},[240,75588,75589],{"class":246},"    \u002F\u002F   age: 22,\n",[240,75591,75592],{"class":242,"line":35330},[240,75593,75594],{"class":246},"    \u002F\u002F   salary: 12000,\n",[240,75596,75597],{"class":242,"line":35336},[240,75598,75599],{"class":246},"    \u002F\u002F   gender: '男',\n",[240,75601,75602],{"class":242,"line":35354},[240,75603,75604],{"class":246},"    \u002F\u002F   city: '北京',\n",[240,75606,75607],{"class":242,"line":35368},[240,75608,75609],{"class":246},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[240,75611,75612],{"class":242,"line":35377},[240,75613,75614],{"class":246},"    \u002F\u002F }]\n",[240,75616,75617],{"class":242,"line":35386},[240,75618,75619],{"class":246},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[240,75621,75622],{"class":242,"line":35395},[240,75623,75624],{"class":246},"    \u002F\u002F 1.渲染业务\n",[240,75626,75627],{"class":242,"line":35404},[240,75628,75629],{"class":246},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[240,75631,75632],{"class":242,"line":35410},[240,75633,75634],{"class":246},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[240,75636,75637],{"class":242,"line":35416},[240,75638,75639],{"class":246},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[240,75641,75642],{"class":242,"line":35424},[240,75643,4353],{"emptyLinePlaceholder":2051},[240,75645,75646],{"class":242,"line":35429},[240,75647,75648],{"class":246},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[240,75650,75651],{"class":242,"line":35435},[240,75652,75653],{"class":246},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[240,75655,75656,75658,75660,75662],{"class":242,"line":35446},[240,75657,13172],{"class":288},[240,75659,59626],{"class":264},[240,75661,15514],{"class":288},[240,75663,53776],{"class":257},[240,75665,75666,75669,75671],{"class":242,"line":35452},[240,75667,75668],{"class":257},"    console.",[240,75670,60178],{"class":436},[240,75672,54348],{"class":257},[240,75674,75675],{"class":242,"line":35472},[240,75676,4353],{"emptyLinePlaceholder":2051},[240,75678,75679],{"class":242,"line":35478},[240,75680,75681],{"class":246},"    \u002F\u002F 时间函数\n",[240,75683,75684,75686,75689],{"class":242,"line":35484},[240,75685,72007],{"class":288},[240,75687,75688],{"class":436}," getTime",[240,75690,12804],{"class":257},[240,75692,75693,75695,75698,75700,75702,75705],{"class":242,"line":35490},[240,75694,60159],{"class":288},[240,75696,75697],{"class":264}," date",[240,75699,15514],{"class":288},[240,75701,13529],{"class":288},[240,75703,75704],{"class":436}," Date",[240,75706,3929],{"class":257},[240,75708,75709,75711,75713,75715,75718,75721,75723,75725,75727,75730,75733,75735,75737,75739,75741,75743,75745,75747],{"class":242,"line":35507},[240,75710,60159],{"class":288},[240,75712,18039],{"class":264},[240,75714,15514],{"class":288},[240,75716,75717],{"class":257}," date.",[240,75719,75720],{"class":436},"getHours",[240,75722,15000],{"class":257},[240,75724,431],{"class":288},[240,75726,3991],{"class":264},[240,75728,75729],{"class":288}," ?",[240,75731,75732],{"class":443}," '0'",[240,75734,47512],{"class":288},[240,75736,75717],{"class":257},[240,75738,75720],{"class":436},[240,75740,15000],{"class":257},[240,75742,2954],{"class":288},[240,75744,75717],{"class":257},[240,75746,75720],{"class":436},[240,75748,3929],{"class":257},[240,75750,75751,75753,75756,75758,75760,75763,75765,75767,75769,75771,75773,75775,75777,75779,75781,75783,75785,75787],{"class":242,"line":35513},[240,75752,60159],{"class":288},[240,75754,75755],{"class":264}," m",[240,75757,15514],{"class":288},[240,75759,75717],{"class":257},[240,75761,75762],{"class":436},"getMinutes",[240,75764,15000],{"class":257},[240,75766,431],{"class":288},[240,75768,3991],{"class":264},[240,75770,75729],{"class":288},[240,75772,75732],{"class":443},[240,75774,47512],{"class":288},[240,75776,75717],{"class":257},[240,75778,75762],{"class":436},[240,75780,15000],{"class":257},[240,75782,2954],{"class":288},[240,75784,75717],{"class":257},[240,75786,75762],{"class":436},[240,75788,3929],{"class":257},[240,75790,75791,75793,75795,75797,75799,75802,75804,75806,75808,75810,75812,75814,75816,75818,75820,75822,75824,75826],{"class":242,"line":35519},[240,75792,60159],{"class":288},[240,75794,10379],{"class":264},[240,75796,15514],{"class":288},[240,75798,75717],{"class":257},[240,75800,75801],{"class":436},"getSeconds",[240,75803,15000],{"class":257},[240,75805,431],{"class":288},[240,75807,3991],{"class":264},[240,75809,75729],{"class":288},[240,75811,75732],{"class":443},[240,75813,47512],{"class":288},[240,75815,75717],{"class":257},[240,75817,75801],{"class":436},[240,75819,15000],{"class":257},[240,75821,2954],{"class":288},[240,75823,75717],{"class":257},[240,75825,75801],{"class":436},[240,75827,3929],{"class":257},[240,75829,75830,75832,75835,75837,75839,75842,75844,75847,75849,75852,75854,75856,75859,75861,75863,75865,75867,75869,75871,75874,75876,75879,75881,75884,75886,75888,75890],{"class":242,"line":35525},[240,75831,60159],{"class":288},[240,75833,75834],{"class":264}," str",[240,75836,15514],{"class":288},[240,75838,64826],{"class":443},[240,75840,75841],{"class":257},"date",[240,75843,2657],{"class":443},[240,75845,75846],{"class":436},"getFullYear",[240,75848,4380],{"class":443},[240,75850,75851],{"class":443},"}\u002F${",[240,75853,75841],{"class":257},[240,75855,2657],{"class":443},[240,75857,75858],{"class":436},"getMonth",[240,75860,15000],{"class":443},[240,75862,2580],{"class":288},[240,75864,27065],{"class":264},[240,75866,75851],{"class":443},[240,75868,75841],{"class":257},[240,75870,2657],{"class":443},[240,75872,75873],{"class":436},"getDate",[240,75875,4380],{"class":443},[240,75877,75878],{"class":443},"} ${",[240,75880,2515],{"class":257},[240,75882,75883],{"class":443},"}:${",[240,75885,2643],{"class":257},[240,75887,75883],{"class":443},[240,75889,2793],{"class":257},[240,75891,75892],{"class":443},"}`\n",[240,75894,75895,75898],{"class":242,"line":35531},[240,75896,75897],{"class":288},"      return",[240,75899,75900],{"class":257}," str\n",[240,75902,75903],{"class":242,"line":35537},[240,75904,4140],{"class":257},[240,75906,75907],{"class":242,"line":35564},[240,75908,75909],{"class":246},"    \u002F\u002F 渲染函数\n",[240,75911,75912,75914,75916,75918,75920,75922,75924,75926],{"class":242,"line":35588},[240,75913,13172],{"class":288},[240,75915,71670],{"class":264},[240,75917,15514],{"class":288},[240,75919,56331],{"class":257},[240,75921,56334],{"class":436},[240,75923,789],{"class":257},[240,75925,71681],{"class":443},[240,75927,2129],{"class":257},[240,75929,75930,75932,75934],{"class":242,"line":35594},[240,75931,72007],{"class":288},[240,75933,72010],{"class":436},[240,75935,12804],{"class":257},[240,75937,75938],{"class":242,"line":35600},[240,75939,75940],{"class":246},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[240,75942,75943],{"class":242,"line":35606},[240,75944,75945],{"class":246},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[240,75947,75948,75950,75953,75955,75957,75960,75962,75964,75966,75969,75971,75974],{"class":242,"line":35617},[240,75949,60159],{"class":288},[240,75951,75952],{"class":264}," trArr",[240,75954,15514],{"class":288},[240,75956,53903],{"class":257},[240,75958,75959],{"class":436},"map",[240,75961,789],{"class":257},[240,75963,56384],{"class":288},[240,75965,3612],{"class":257},[240,75967,75968],{"class":792},"ele",[240,75970,1277],{"class":257},[240,75972,75973],{"class":792},"index",[240,75975,14392],{"class":257},[240,75977,75978,75980],{"class":242,"line":35628},[240,75979,16701],{"class":288},[240,75981,72091],{"class":443},[240,75983,75984],{"class":242,"line":35634},[240,75985,75986],{"class":443},"      \u003Ctr>\n",[240,75988,75989,75991,75993,75995,75998],{"class":242,"line":35651},[240,75990,72096],{"class":443},[240,75992,75968],{"class":257},[240,75994,2657],{"class":443},[240,75996,75997],{"class":257},"unameId",[240,75999,72111],{"class":443},[240,76001,76002,76004,76006,76008,76010],{"class":242,"line":35674},[240,76003,72096],{"class":443},[240,76005,75968],{"class":257},[240,76007,2657],{"class":443},[240,76009,72127],{"class":257},[240,76011,72111],{"class":443},[240,76013,76014,76016,76018,76020,76022],{"class":242,"line":35697},[240,76015,72096],{"class":443},[240,76017,75968],{"class":257},[240,76019,2657],{"class":443},[240,76021,72144],{"class":257},[240,76023,72111],{"class":443},[240,76025,76026,76028,76030,76032,76034],{"class":242,"line":35703},[240,76027,72096],{"class":443},[240,76029,75968],{"class":257},[240,76031,2657],{"class":443},[240,76033,72161],{"class":257},[240,76035,72111],{"class":443},[240,76037,76038,76040,76042,76044,76046],{"class":242,"line":35708},[240,76039,72096],{"class":443},[240,76041,75968],{"class":257},[240,76043,2657],{"class":443},[240,76045,72178],{"class":257},[240,76047,72111],{"class":443},[240,76049,76050,76052,76054,76056,76058],{"class":242,"line":35717},[240,76051,72096],{"class":443},[240,76053,75968],{"class":257},[240,76055,2657],{"class":443},[240,76057,72195],{"class":257},[240,76059,72111],{"class":443},[240,76061,76062,76064,76066,76068,76070],{"class":242,"line":35727},[240,76063,72096],{"class":443},[240,76065,75968],{"class":257},[240,76067,2657],{"class":443},[240,76069,4340],{"class":257},[240,76071,72111],{"class":443},[240,76073,76074],{"class":242,"line":35733},[240,76075,75530],{"class":443},[240,76077,76078,76081,76083],{"class":242,"line":35738},[240,76079,76080],{"class":443},"          \u003Ca href=\"#\" data-id=\"${",[240,76082,75973],{"class":257},[240,76084,76085],{"class":443},"}\">删除\u003C\u002Fa>\n",[240,76087,76088],{"class":242,"line":35744},[240,76089,75540],{"class":443},[240,76091,76092],{"class":242,"line":35757},[240,76093,76094],{"class":443},"      \u003C\u002Ftr>\n",[240,76096,76097],{"class":242,"line":35763},[240,76098,76099],{"class":443},"  `\n",[240,76101,76102],{"class":242,"line":35774},[240,76103,66738],{"class":257},[240,76105,76106,76108,76110],{"class":242,"line":35785},[240,76107,60175],{"class":257},[240,76109,60178],{"class":436},[240,76111,76112],{"class":257},"(trArr)\n",[240,76114,76115],{"class":242,"line":35804},[240,76116,4353],{"emptyLinePlaceholder":2051},[240,76118,76119],{"class":242,"line":51464},[240,76120,76121],{"class":246},"      \u002F\u002F (2) 把数组转换为字符串join\n",[240,76123,76124],{"class":242,"line":51469},[240,76125,76126],{"class":246},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[240,76128,76129,76131,76133,76136,76139,76141,76144],{"class":242,"line":51478},[240,76130,72022],{"class":257},[240,76132,440],{"class":288},[240,76134,76135],{"class":257}," trArr.",[240,76137,76138],{"class":436},"join",[240,76140,789],{"class":257},[240,76142,76143],{"class":443},"''",[240,76145,2129],{"class":257},[240,76147,76148],{"class":242,"line":51487},[240,76149,76150],{"class":246},"      \u002F\u002F 显示共有几条\n",[240,76152,76153,76155,76157,76159,76162,76165,76167,76169],{"class":242,"line":51492},[240,76154,57704],{"class":257},[240,76156,56334],{"class":436},[240,76158,789],{"class":257},[240,76160,76161],{"class":443},"'.total span'",[240,76163,76164],{"class":257},").innerHTML ",[240,76166,440],{"class":288},[240,76168,53903],{"class":257},[240,76170,57764],{"class":264},[240,76172,76173],{"class":242,"line":51497},[240,76174,4140],{"class":257},[240,76176,76177],{"class":242,"line":51502},[240,76178,76179],{"class":246},"    \u002F\u002F render()\n",[240,76181,76182],{"class":242,"line":51515},[240,76183,4353],{"emptyLinePlaceholder":2051},[240,76185,76186],{"class":242,"line":51520},[240,76187,76188],{"class":246},"    \u002F\u002F 获取DOM对象\n",[240,76190,76191,76193,76195,76197,76199,76201,76203,76205],{"class":242,"line":51529},[240,76192,13172],{"class":288},[240,76194,71744],{"class":264},[240,76196,15514],{"class":288},[240,76198,56331],{"class":257},[240,76200,56334],{"class":436},[240,76202,789],{"class":257},[240,76204,71755],{"class":443},[240,76206,2129],{"class":257},[240,76208,76209,76211,76213,76215,76217,76219,76221,76223],{"class":242,"line":51538},[240,76210,13172],{"class":288},[240,76212,71571],{"class":264},[240,76214,15514],{"class":288},[240,76216,56331],{"class":257},[240,76218,56334],{"class":436},[240,76220,789],{"class":257},[240,76222,71582],{"class":443},[240,76224,2129],{"class":257},[240,76226,76227,76229,76231,76233,76235,76237,76239,76241],{"class":242,"line":51555},[240,76228,13172],{"class":288},[240,76230,17637],{"class":264},[240,76232,15514],{"class":288},[240,76234,56331],{"class":257},[240,76236,56334],{"class":436},[240,76238,789],{"class":257},[240,76240,71601],{"class":443},[240,76242,2129],{"class":257},[240,76244,76246,76248,76250,76252,76254,76256,76258,76260],{"class":242,"line":76245},231,[240,76247,13172],{"class":288},[240,76249,71630],{"class":264},[240,76251,15514],{"class":288},[240,76253,56331],{"class":257},[240,76255,56334],{"class":436},[240,76257,789],{"class":257},[240,76259,71641],{"class":443},[240,76261,2129],{"class":257},[240,76263,76265,76267,76269,76271,76273,76275,76277,76279],{"class":242,"line":76264},232,[240,76266,13172],{"class":288},[240,76268,71610],{"class":264},[240,76270,15514],{"class":288},[240,76272,56331],{"class":257},[240,76274,56334],{"class":436},[240,76276,789],{"class":257},[240,76278,71621],{"class":443},[240,76280,2129],{"class":257},[240,76282,76284,76286,76288,76290,76292,76294,76296,76298],{"class":242,"line":76283},233,[240,76285,13172],{"class":288},[240,76287,71650],{"class":264},[240,76289,15514],{"class":288},[240,76291,56331],{"class":257},[240,76293,56334],{"class":436},[240,76295,789],{"class":257},[240,76297,71661],{"class":443},[240,76299,2129],{"class":257},[240,76301,76303],{"class":242,"line":76302},234,[240,76304,4353],{"emptyLinePlaceholder":2051},[240,76306,76308],{"class":242,"line":76307},235,[240,76309,76310],{"class":246},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[240,76312,76314,76316,76318,76320,76322,76324,76326,76328,76330],{"class":242,"line":76313},236,[240,76315,71762],{"class":257},[240,76317,59744],{"class":436},[240,76319,789],{"class":257},[240,76321,71769],{"class":443},[240,76323,1277],{"class":257},[240,76325,56384],{"class":288},[240,76327,3612],{"class":257},[240,76329,2192],{"class":792},[240,76331,14392],{"class":257},[240,76333,76335],{"class":242,"line":76334},237,[240,76336,76337],{"class":246},"      \u002F\u002F 禁止浏览器跳转\n",[240,76339,76341,76343,76345],{"class":242,"line":76340},238,[240,76342,71789],{"class":257},[240,76344,71792],{"class":436},[240,76346,3929],{"class":257},[240,76348,76350],{"class":242,"line":76349},239,[240,76351,76352],{"class":246},"      \u002F\u002F 非空判断\n",[240,76354,76356],{"class":242,"line":76355},240,[240,76357,76358],{"class":246},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[240,76360,76362],{"class":242,"line":76361},241,[240,76363,76364],{"class":246},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[240,76366,76368,76370,76372,76374,76377,76379,76382,76385,76387,76389],{"class":242,"line":76367},242,[240,76369,56415],{"class":288},[240,76371,3612],{"class":257},[240,76373,2331],{"class":288},[240,76375,76376],{"class":257},"uname.value ",[240,76378,73273],{"class":288},[240,76380,76381],{"class":288}," !",[240,76383,76384],{"class":257},"age.value ",[240,76386,73273],{"class":288},[240,76388,76381],{"class":288},[240,76390,76391],{"class":257},"salary.value) {\n",[240,76393,76395,76397,76399,76401,76403],{"class":242,"line":76394},243,[240,76396,16701],{"class":288},[240,76398,71863],{"class":436},[240,76400,789],{"class":257},[240,76402,71868],{"class":443},[240,76404,2129],{"class":257},[240,76406,76408],{"class":242,"line":76407},244,[240,76409,54334],{"class":257},[240,76411,76413,76415,76417],{"class":242,"line":76412},245,[240,76414,59938],{"class":257},[240,76416,53822],{"class":436},[240,76418,76419],{"class":257},"({\n",[240,76421,76423],{"class":242,"line":76422},246,[240,76424,76425],{"class":246},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[240,76427,76429],{"class":242,"line":76428},247,[240,76430,76431],{"class":246},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[240,76433,76435],{"class":242,"line":76434},248,[240,76436,76437],{"class":246},"        \u002F\u002F 对象的序号应为数组长度+1\n",[240,76439,76441],{"class":242,"line":76440},249,[240,76442,76443],{"class":246},"        \u002F\u002F unameId: arr.length + 1,\n",[240,76445,76447],{"class":242,"line":76446},250,[240,76448,4353],{"emptyLinePlaceholder":2051},[240,76450,76452],{"class":242,"line":76451},251,[240,76453,76454],{"class":246},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[240,76456,76458],{"class":242,"line":76457},252,[240,76459,76460],{"class":246},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[240,76462,76464],{"class":242,"line":76463},253,[240,76465,76466],{"class":246},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[240,76468,76470],{"class":242,"line":76469},254,[240,76471,76472],{"class":246},"        \u002F\u002F 0当假看\n",[240,76474,76476,76479,76481,76483,76486,76488,76490,76492,76495,76497,76499,76502,76504],{"class":242,"line":76475},255,[240,76477,76478],{"class":257},"        unameId: arr.",[240,76480,1064],{"class":264},[240,76482,75729],{"class":288},[240,76484,76485],{"class":257}," arr[arr.",[240,76487,1064],{"class":264},[240,76489,54207],{"class":288},[240,76491,27065],{"class":264},[240,76493,76494],{"class":257},"].unameId ",[240,76496,2580],{"class":288},[240,76498,27065],{"class":264},[240,76500,76501],{"class":288}," :",[240,76503,27065],{"class":264},[240,76505,33412],{"class":257},[240,76507,76509],{"class":242,"line":76508},256,[240,76510,71916],{"class":257},[240,76512,76514],{"class":242,"line":76513},257,[240,76515,71921],{"class":257},[240,76517,76519],{"class":242,"line":76518},258,[240,76520,71931],{"class":257},[240,76522,76524],{"class":242,"line":76523},259,[240,76525,71926],{"class":257},[240,76527,76529],{"class":242,"line":76528},260,[240,76530,76531],{"class":257},"        city: city.value,\n",[240,76533,76535],{"class":242,"line":76534},261,[240,76536,76537],{"class":246},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[240,76539,76541],{"class":242,"line":76540},262,[240,76542,76543],{"class":246},"        \u002F\u002F time: new Date().toDateString()\n",[240,76545,76547,76550,76553],{"class":242,"line":76546},263,[240,76548,76549],{"class":257},"        time: ",[240,76551,76552],{"class":436},"getTime",[240,76554,3929],{"class":257},[240,76556,76558],{"class":242,"line":76557},264,[240,76559,66738],{"class":257},[240,76561,76563],{"class":242,"line":76562},265,[240,76564,76565],{"class":246},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[240,76567,76569,76571],{"class":242,"line":76568},266,[240,76570,71991],{"class":436},[240,76572,3929],{"class":257},[240,76574,76576,76578,76580,76582,76584],{"class":242,"line":76575},267,[240,76577,71974],{"class":264},[240,76579,2657],{"class":257},[240,76581,71979],{"class":436},[240,76583,15000],{"class":257},[240,76585,76586],{"class":246},"\u002F\u002F重置表单\n",[240,76588,76590],{"class":242,"line":76589},268,[240,76591,76592],{"class":246},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[240,76594,76596,76599,76601,76603,76606,76608,76610,76612,76614],{"class":242,"line":76595},269,[240,76597,76598],{"class":257},"      localStorage.",[240,76600,73570],{"class":436},[240,76602,789],{"class":257},[240,76604,76605],{"class":443},"'data'",[240,76607,1277],{"class":257},[240,76609,73580],{"class":264},[240,76611,2657],{"class":257},[240,76613,73585],{"class":436},[240,76615,76616],{"class":257},"(arr))\n",[240,76618,76620],{"class":242,"line":76619},270,[240,76621,35407],{"class":257},[240,76623,76625],{"class":242,"line":76624},271,[240,76626,4353],{"emptyLinePlaceholder":2051},[240,76628,76630],{"class":242,"line":76629},272,[240,76631,76632],{"class":246},"    \u002F\u002F 3.删除业务\n",[240,76634,76636],{"class":242,"line":76635},273,[240,76637,76638],{"class":246},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[240,76640,76642,76644,76646,76648,76650,76652,76654,76656,76658],{"class":242,"line":76641},274,[240,76643,72264],{"class":257},[240,76645,59744],{"class":436},[240,76647,789],{"class":257},[240,76649,59749],{"class":443},[240,76651,1277],{"class":257},[240,76653,56384],{"class":288},[240,76655,3612],{"class":257},[240,76657,2192],{"class":792},[240,76659,14392],{"class":257},[240,76661,76663],{"class":242,"line":76662},275,[240,76664,76665],{"class":246},"      \u002F\u002F 判断是否点击的是删除按钮\n",[240,76667,76669,76671,76673,76675,76677],{"class":242,"line":76668},276,[240,76670,56415],{"class":288},[240,76672,68957],{"class":257},[240,76674,56421],{"class":288},[240,76676,70179],{"class":443},[240,76678,14392],{"class":257},[240,76680,76682],{"class":242,"line":76681},277,[240,76683,76684],{"class":246},"        \u002F\u002F alert(1)\n",[240,76686,76688],{"class":242,"line":76687},278,[240,76689,76690],{"class":246},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[240,76692,76694],{"class":242,"line":76693},279,[240,76695,76696],{"class":246},"        \u002F\u002F console.log(e.target)\n",[240,76698,76700],{"class":242,"line":76699},280,[240,76701,76702],{"class":246},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[240,76704,76706],{"class":242,"line":76705},281,[240,76707,4353],{"emptyLinePlaceholder":2051},[240,76709,76711],{"class":242,"line":76710},282,[240,76712,76713],{"class":246},"        \u002F\u002F 确认框，确然是否真的要删除\n",[240,76715,76717],{"class":242,"line":76716},283,[240,76718,76719],{"class":246},"        \u002F\u002F confirm()为确认框\n",[240,76721,76723],{"class":242,"line":76722},284,[240,76724,76725],{"class":246},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[240,76727,76729,76731,76733,76736,76738,76741],{"class":242,"line":76728},285,[240,76730,4450],{"class":288},[240,76732,3612],{"class":257},[240,76734,76735],{"class":436},"confirm",[240,76737,789],{"class":257},[240,76739,76740],{"class":443},"'您确定要删除这条数据吗？'",[240,76742,76743],{"class":257},")) {\n",[240,76745,76747,76750,76752,76754,76756],{"class":242,"line":76746},286,[240,76748,76749],{"class":257},"          arr.",[240,76751,59941],{"class":436},[240,76753,72317],{"class":257},[240,76755,1643],{"class":264},[240,76757,2129],{"class":257},[240,76759,76761],{"class":242,"line":76760},287,[240,76762,76763],{"class":246},"          \u002F\u002F 3.4 重新渲染页面\n",[240,76765,76767,76770],{"class":242,"line":76766},288,[240,76768,76769],{"class":436},"          render",[240,76771,3929],{"class":257},[240,76773,76775],{"class":242,"line":76774},289,[240,76776,76777],{"class":246},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[240,76779,76781,76784,76786,76788,76790,76792,76794,76796,76798],{"class":242,"line":76780},290,[240,76782,76783],{"class":257},"          localStorage.",[240,76785,73570],{"class":436},[240,76787,789],{"class":257},[240,76789,76605],{"class":443},[240,76791,1277],{"class":257},[240,76793,73580],{"class":264},[240,76795,2657],{"class":257},[240,76797,73585],{"class":436},[240,76799,76616],{"class":257},[240,76801,76803],{"class":242,"line":76802},291,[240,76804,4482],{"class":257},[240,76806,76808],{"class":242,"line":76807},292,[240,76809,54334],{"class":257},[240,76811,76813],{"class":242,"line":76812},293,[240,76814,4353],{"emptyLinePlaceholder":2051},[240,76816,76818],{"class":242,"line":76817},294,[240,76819,35407],{"class":257},[240,76821,76823],{"class":242,"line":76822},295,[240,76824,4353],{"emptyLinePlaceholder":2051},[240,76826,76828,76830,76832],{"class":242,"line":76827},296,[240,76829,54353],{"class":257},[240,76831,53751],{"class":253},[240,76833,447],{"class":257},[240,76835,76837,76839,76841],{"class":242,"line":76836},297,[240,76838,592],{"class":257},[240,76840,53738],{"class":253},[240,76842,447],{"class":257},[240,76844,76846],{"class":242,"line":76845},298,[240,76847,4353],{"emptyLinePlaceholder":2051},[240,76849,76851,76853,76855],{"class":242,"line":76850},299,[240,76852,592],{"class":257},[240,76854,52581],{"class":253},[240,76856,447],{"class":257},[14,76858,76860],{"id":76859},"_36-正则表达式","3.6 正则表达式",[19,76862,76863],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[19,76865,76866],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[19,76868,76869],{},"正则表达式的作用：",[3100,76871,76872,76879,76885],{},[1829,76873,76874,76875,76878],{},"表单验证（ ",[68,76876,76877],{},"匹配"," ）",[1829,76880,76881,76882,76878],{},"过滤敏感词（ ",[68,76883,76884],{},"替换",[1829,76886,76887,76888,76878],{},"字符串中提取我们想要的部分（ ",[68,76889,76890],{},"提取",[32,76892,76894],{"id":76893},"_361-语法","3.6.1 语法",[19,76896,76897],{},"正则表达式使用步骤：",[1826,76899,76900,76903],{},[1829,76901,76902],{},"定义规则",[1829,76904,76905],{},"查找是否匹配",[19,76907,76908],{},"正则表达式里边不需要写引号",[19,76910,76911],{},[219,76912],{"alt":236,"src":76913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[19,76915,76916],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[19,76918,76919],{},"reg.test(str)",[19,76921,76922],{},[219,76923],{"alt":236,"src":76924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[19,76926,76927],{},[219,76928],{"alt":236,"src":76929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[32,76931,76933],{"id":76932},"_362-元字符","3.6.2 元字符",[1826,76935,76936,76939,76942,76945,76952],{},[1829,76937,76938],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[1829,76940,76941],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[1829,76943,76944],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[1829,76946,76947,76948],{},"正则验证工具：",[254,76949,76950],{"href":76950,"rel":76951},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[25811],[1829,76953,76954],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[23945,76956,76958],{"id":76957},"_3621-边界符","3.6.2.1 边界符",[19,76960,76961],{},[219,76962],{"alt":236,"src":76963},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[19,76965,76966],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[19,76968,76969],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[19,76971,76972],{},"只匹配一次",[19,76974,76975],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[23945,76977,76979],{"id":76978},"_3622-量词","3.6.2.2 量词",[19,76981,76982],{},[219,76983],{"alt":236,"src":76984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[19,76986,76987],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[23945,76989,76991],{"id":76990},"_3623-元字符","3.6.2.3 元字符",[19,76993,76994],{},[219,76995],{"alt":236,"src":76996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[19,76998,76999],{},"匹配的是a或b或c []只选一个",[19,77001,77002],{},[219,77003],{"alt":236,"src":77004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[19,77006,77007],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[19,77009,77010],{},[219,77011],{"alt":236,"src":77012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[19,77014,77015],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[19,77017,77018],{},[219,77019],{"alt":236,"src":77020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[231,77022,77024],{"className":52579,"code":77023,"language":52581,"meta":236,"style":236},"\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",[23,77025,77026,77036,77050,77054,77062,77076,77096,77108,77116,77120,77128,77136,77141,77172,77199,77227,77231,77236,77264,77295,77300,77305,77336,77368,77400,77404,77409,77440,77470,77500,77504,77509,77540,77571,77601,77631,77635,77640,77673,77677,77682,77713,77744,77748,77753,77784,77814,77845,77849,77854,77886,77917,77948,77975,78006,78038,78071,78102,78133,78165,78196,78204,78212,78216],{"__ignoreMap":236},[240,77027,77028,77030,77032,77034],{"class":242,"line":243},[240,77029,53243],{"class":257},[240,77031,53246],{"class":253},[240,77033,53249],{"class":436},[240,77035,447],{"class":257},[240,77037,77038,77040,77042,77044,77046,77048],{"class":242,"line":250},[240,77039,431],{"class":257},[240,77041,52581],{"class":253},[240,77043,53260],{"class":436},[240,77045,440],{"class":257},[240,77047,53265],{"class":443},[240,77049,447],{"class":257},[240,77051,77052],{"class":242,"line":261},[240,77053,4353],{"emptyLinePlaceholder":2051},[240,77055,77056,77058,77060],{"class":242,"line":277},[240,77057,431],{"class":257},[240,77059,53278],{"class":253},[240,77061,447],{"class":257},[240,77063,77064,77066,77068,77070,77072,77074],{"class":242,"line":294},[240,77065,452],{"class":257},[240,77067,53288],{"class":253},[240,77069,53291],{"class":436},[240,77071,440],{"class":257},[240,77073,53296],{"class":443},[240,77075,447],{"class":257},[240,77077,77078,77080,77082,77084,77086,77088,77090,77092,77094],{"class":242,"line":309},[240,77079,452],{"class":257},[240,77081,53288],{"class":253},[240,77083,16869],{"class":436},[240,77085,440],{"class":257},[240,77087,53335],{"class":443},[240,77089,53315],{"class":436},[240,77091,440],{"class":257},[240,77093,53342],{"class":443},[240,77095,447],{"class":257},[240,77097,77098,77100,77102,77104,77106],{"class":242,"line":529},[240,77099,452],{"class":257},[240,77101,53351],{"class":253},[240,77103,53354],{"class":257},[240,77105,53351],{"class":253},[240,77107,447],{"class":257},[240,77109,77110,77112,77114],{"class":242,"line":549},[240,77111,592],{"class":257},[240,77113,53278],{"class":253},[240,77115,447],{"class":257},[240,77117,77118],{"class":242,"line":569},[240,77119,4353],{"emptyLinePlaceholder":2051},[240,77121,77122,77124,77126],{"class":242,"line":589},[240,77123,431],{"class":257},[240,77125,53738],{"class":253},[240,77127,447],{"class":257},[240,77129,77130,77132,77134],{"class":242,"line":715},[240,77131,452],{"class":257},[240,77133,53751],{"class":253},[240,77135,447],{"class":257},[240,77137,77138],{"class":242,"line":727},[240,77139,77140],{"class":246},"    \u002F\u002F 元字符中\n",[240,77142,77143,77145,77147,77149,77151,77154,77156,77158,77161,77163,77166,77169],{"class":242,"line":1730},[240,77144,75668],{"class":257},[240,77146,60178],{"class":436},[240,77148,789],{"class":257},[240,77150,2683],{"class":443},[240,77152,77153],{"class":49923},"哈",[240,77155,2683],{"class":443},[240,77157,2657],{"class":257},[240,77159,77160],{"class":436},"test",[240,77162,789],{"class":257},[240,77164,77165],{"class":443},"'哈'",[240,77167,77168],{"class":257},"))  ",[240,77170,77171],{"class":246},"\u002F\u002Ftrue\n",[240,77173,77174,77176,77178,77180,77182,77184,77186,77188,77190,77192,77195,77197],{"class":242,"line":3582},[240,77175,75668],{"class":257},[240,77177,60178],{"class":436},[240,77179,789],{"class":257},[240,77181,2683],{"class":443},[240,77183,77153],{"class":49923},[240,77185,2683],{"class":443},[240,77187,2657],{"class":257},[240,77189,77160],{"class":436},[240,77191,789],{"class":257},[240,77193,77194],{"class":443},"'哈哈'",[240,77196,77168],{"class":257},[240,77198,77171],{"class":246},[240,77200,77201,77203,77205,77207,77209,77211,77213,77215,77217,77219,77222,77225],{"class":242,"line":3596},[240,77202,75668],{"class":257},[240,77204,60178],{"class":436},[240,77206,789],{"class":257},[240,77208,2683],{"class":443},[240,77210,77153],{"class":49923},[240,77212,2683],{"class":443},[240,77214,2657],{"class":257},[240,77216,77160],{"class":436},[240,77218,789],{"class":257},[240,77220,77221],{"class":443},"'二哈'",[240,77223,77224],{"class":257},"))   ",[240,77226,77171],{"class":246},[240,77228,77229],{"class":242,"line":3601},[240,77230,4353],{"emptyLinePlaceholder":2051},[240,77232,77233],{"class":242,"line":3607},[240,77234,77235],{"class":246},"    \u002F\u002F 1.边界符\n",[240,77237,77238,77240,77242,77244,77246,77248,77250,77252,77254,77256,77258,77260,77262],{"class":242,"line":3628},[240,77239,75668],{"class":257},[240,77241,60178],{"class":436},[240,77243,789],{"class":257},[240,77245,2683],{"class":443},[240,77247,3059],{"class":288},[240,77249,77153],{"class":49923},[240,77251,2683],{"class":443},[240,77253,2657],{"class":257},[240,77255,77160],{"class":436},[240,77257,789],{"class":257},[240,77259,77165],{"class":443},[240,77261,77168],{"class":257},[240,77263,77171],{"class":246},[240,77265,77266,77268,77270,77272,77274,77276,77278,77280,77282,77284,77286,77288,77290,77292],{"class":242,"line":3633},[240,77267,75668],{"class":257},[240,77269,60178],{"class":436},[240,77271,789],{"class":257},[240,77273,2683],{"class":443},[240,77275,3059],{"class":288},[240,77277,77153],{"class":49923},[240,77279,2405],{"class":288},[240,77281,2683],{"class":443},[240,77283,2657],{"class":257},[240,77285,77160],{"class":436},[240,77287,789],{"class":257},[240,77289,77194],{"class":443},[240,77291,77168],{"class":257},[240,77293,77294],{"class":246},"\u002F\u002Ffalse\n",[240,77296,77297],{"class":242,"line":3647},[240,77298,77299],{"class":246},"    \u002F\u002F 2.量词\n",[240,77301,77302],{"class":242,"line":3652},[240,77303,77304],{"class":246},"    \u002F\u002F 量词 * 类似于 >= 0\n",[240,77306,77307,77309,77311,77313,77315,77317,77319,77322,77324,77326,77328,77330,77332,77334],{"class":242,"line":3681},[240,77308,75668],{"class":257},[240,77310,60178],{"class":436},[240,77312,789],{"class":257},[240,77314,2683],{"class":443},[240,77316,3059],{"class":288},[240,77318,77153],{"class":49923},[240,77320,77321],{"class":288},"*$",[240,77323,2683],{"class":443},[240,77325,2657],{"class":257},[240,77327,77160],{"class":436},[240,77329,789],{"class":257},[240,77331,77194],{"class":443},[240,77333,77168],{"class":257},[240,77335,77171],{"class":246},[240,77337,77338,77340,77342,77344,77346,77348,77350,77352,77354,77356,77358,77360,77363,77365],{"class":242,"line":3686},[240,77339,75668],{"class":257},[240,77341,60178],{"class":436},[240,77343,789],{"class":257},[240,77345,2683],{"class":443},[240,77347,3059],{"class":288},[240,77349,77153],{"class":49923},[240,77351,77321],{"class":288},[240,77353,2683],{"class":443},[240,77355,2657],{"class":257},[240,77357,77160],{"class":436},[240,77359,789],{"class":257},[240,77361,77362],{"class":443},"'二哈好傻'",[240,77364,77168],{"class":257},[240,77366,77367],{"class":246},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[240,77369,77370,77372,77374,77376,77378,77380,77382,77384,77386,77388,77390,77392,77395,77397],{"class":242,"line":3703},[240,77371,75668],{"class":257},[240,77373,60178],{"class":436},[240,77375,789],{"class":257},[240,77377,2683],{"class":443},[240,77379,3059],{"class":288},[240,77381,77153],{"class":49923},[240,77383,77321],{"class":288},[240,77385,2683],{"class":443},[240,77387,2657],{"class":257},[240,77389,77160],{"class":436},[240,77391,789],{"class":257},[240,77393,77394],{"class":443},"'哈好哈'",[240,77396,77224],{"class":257},[240,77398,77399],{"class":246},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[240,77401,77402],{"class":242,"line":3708},[240,77403,4353],{"emptyLinePlaceholder":2051},[240,77405,77406],{"class":242,"line":3713},[240,77407,77408],{"class":246},"    \u002F\u002F +类似于>=1\n",[240,77410,77411,77413,77415,77417,77419,77421,77423,77426,77428,77430,77432,77434,77436,77438],{"class":242,"line":3718},[240,77412,75668],{"class":257},[240,77414,60178],{"class":436},[240,77416,789],{"class":257},[240,77418,2683],{"class":443},[240,77420,3059],{"class":288},[240,77422,77153],{"class":49923},[240,77424,77425],{"class":288},"+$",[240,77427,2683],{"class":443},[240,77429,2657],{"class":257},[240,77431,77160],{"class":436},[240,77433,789],{"class":257},[240,77435,77194],{"class":443},[240,77437,77168],{"class":257},[240,77439,77171],{"class":246},[240,77441,77442,77444,77446,77448,77450,77452,77454,77456,77458,77460,77462,77464,77466,77468],{"class":242,"line":3732},[240,77443,75668],{"class":257},[240,77445,60178],{"class":436},[240,77447,789],{"class":257},[240,77449,2683],{"class":443},[240,77451,3059],{"class":288},[240,77453,77153],{"class":49923},[240,77455,77425],{"class":288},[240,77457,2683],{"class":443},[240,77459,2657],{"class":257},[240,77461,77160],{"class":436},[240,77463,789],{"class":257},[240,77465,77362],{"class":443},[240,77467,77168],{"class":257},[240,77469,77367],{"class":246},[240,77471,77472,77474,77476,77478,77480,77482,77484,77486,77488,77490,77492,77494,77496,77498],{"class":242,"line":3737},[240,77473,75668],{"class":257},[240,77475,60178],{"class":436},[240,77477,789],{"class":257},[240,77479,2683],{"class":443},[240,77481,3059],{"class":288},[240,77483,77153],{"class":49923},[240,77485,77425],{"class":288},[240,77487,2683],{"class":443},[240,77489,2657],{"class":257},[240,77491,77160],{"class":436},[240,77493,789],{"class":257},[240,77495,77394],{"class":443},[240,77497,77224],{"class":257},[240,77499,77294],{"class":246},[240,77501,77502],{"class":242,"line":4530},[240,77503,4353],{"emptyLinePlaceholder":2051},[240,77505,77506],{"class":242,"line":4544},[240,77507,77508],{"class":246},"    \u002F\u002F ?类似于0次或一次\n",[240,77510,77511,77513,77515,77517,77519,77521,77524,77526,77528,77530,77532,77534,77536,77538],{"class":242,"line":4552},[240,77512,75668],{"class":257},[240,77514,60178],{"class":436},[240,77516,789],{"class":257},[240,77518,2683],{"class":443},[240,77520,3059],{"class":288},[240,77522,77523],{"class":49923},"哈？",[240,77525,2405],{"class":288},[240,77527,2683],{"class":443},[240,77529,2657],{"class":257},[240,77531,77160],{"class":436},[240,77533,789],{"class":257},[240,77535,76143],{"class":443},[240,77537,77224],{"class":257},[240,77539,77171],{"class":246},[240,77541,77542,77544,77546,77548,77550,77552,77554,77557,77559,77561,77563,77565,77567,77569],{"class":242,"line":4557},[240,77543,75668],{"class":257},[240,77545,60178],{"class":436},[240,77547,789],{"class":257},[240,77549,2683],{"class":443},[240,77551,3059],{"class":288},[240,77553,77153],{"class":49923},[240,77555,77556],{"class":288},"?$",[240,77558,2683],{"class":443},[240,77560,2657],{"class":257},[240,77562,77160],{"class":436},[240,77564,789],{"class":257},[240,77566,77194],{"class":443},[240,77568,77168],{"class":257},[240,77570,77294],{"class":246},[240,77572,77573,77575,77577,77579,77581,77583,77585,77587,77589,77591,77593,77595,77597,77599],{"class":242,"line":4563},[240,77574,75668],{"class":257},[240,77576,60178],{"class":436},[240,77578,789],{"class":257},[240,77580,2683],{"class":443},[240,77582,3059],{"class":288},[240,77584,77153],{"class":49923},[240,77586,77556],{"class":288},[240,77588,2683],{"class":443},[240,77590,2657],{"class":257},[240,77592,77160],{"class":436},[240,77594,789],{"class":257},[240,77596,77362],{"class":443},[240,77598,77168],{"class":257},[240,77600,77367],{"class":246},[240,77602,77603,77605,77607,77609,77611,77613,77615,77617,77619,77621,77623,77625,77627,77629],{"class":242,"line":4569},[240,77604,75668],{"class":257},[240,77606,60178],{"class":436},[240,77608,789],{"class":257},[240,77610,2683],{"class":443},[240,77612,3059],{"class":288},[240,77614,77153],{"class":49923},[240,77616,77556],{"class":288},[240,77618,2683],{"class":443},[240,77620,2657],{"class":257},[240,77622,77160],{"class":436},[240,77624,789],{"class":257},[240,77626,77394],{"class":443},[240,77628,77168],{"class":257},[240,77630,77294],{"class":246},[240,77632,77633],{"class":242,"line":4574},[240,77634,4353],{"emptyLinePlaceholder":2051},[240,77636,77637],{"class":242,"line":9899},[240,77638,77639],{"class":246},"    \u002F\u002F {n}写几，就必须出现几次\n",[240,77641,77642,77644,77646,77648,77650,77652,77654,77657,77659,77661,77663,77665,77668,77671],{"class":242,"line":9923},[240,77643,75668],{"class":257},[240,77645,60178],{"class":436},[240,77647,789],{"class":257},[240,77649,2683],{"class":443},[240,77651,3059],{"class":288},[240,77653,77153],{"class":49923},[240,77655,77656],{"class":288},"{4}$",[240,77658,2683],{"class":443},[240,77660,2657],{"class":257},[240,77662,77160],{"class":436},[240,77664,789],{"class":257},[240,77666,77667],{"class":443},"'哈哈哈哈'",[240,77669,77670],{"class":257},")) ",[240,77672,77171],{"class":246},[240,77674,77675],{"class":242,"line":9928},[240,77676,4353],{"emptyLinePlaceholder":2051},[240,77678,77679],{"class":242,"line":9934},[240,77680,77681],{"class":246},"    \u002F\u002F {n,}大于等于n次\n",[240,77683,77684,77686,77688,77690,77692,77694,77696,77699,77701,77703,77705,77707,77709,77711],{"class":242,"line":9961},[240,77685,75668],{"class":257},[240,77687,60178],{"class":436},[240,77689,789],{"class":257},[240,77691,2683],{"class":443},[240,77693,3059],{"class":288},[240,77695,77153],{"class":49923},[240,77697,77698],{"class":288},"{4,}$",[240,77700,2683],{"class":443},[240,77702,2657],{"class":257},[240,77704,77160],{"class":436},[240,77706,789],{"class":257},[240,77708,77667],{"class":443},[240,77710,77670],{"class":257},[240,77712,77171],{"class":246},[240,77714,77715,77717,77719,77721,77723,77725,77727,77729,77731,77733,77735,77737,77740,77742],{"class":242,"line":9966},[240,77716,75668],{"class":257},[240,77718,60178],{"class":436},[240,77720,789],{"class":257},[240,77722,2683],{"class":443},[240,77724,3059],{"class":288},[240,77726,77153],{"class":49923},[240,77728,77698],{"class":288},[240,77730,2683],{"class":443},[240,77732,2657],{"class":257},[240,77734,77160],{"class":436},[240,77736,789],{"class":257},[240,77738,77739],{"class":443},"'哈哈哈哈哈'",[240,77741,77670],{"class":257},[240,77743,77171],{"class":246},[240,77745,77746],{"class":242,"line":9972},[240,77747,4353],{"emptyLinePlaceholder":2051},[240,77749,77750],{"class":242,"line":9984},[240,77751,77752],{"class":246},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[240,77754,77755,77757,77759,77761,77763,77765,77767,77770,77772,77774,77776,77778,77780,77782],{"class":242,"line":9996},[240,77756,75668],{"class":257},[240,77758,60178],{"class":436},[240,77760,789],{"class":257},[240,77762,2683],{"class":443},[240,77764,3059],{"class":288},[240,77766,77153],{"class":49923},[240,77768,77769],{"class":288},"{4,6}$",[240,77771,2683],{"class":443},[240,77773,2657],{"class":257},[240,77775,77160],{"class":436},[240,77777,789],{"class":257},[240,77779,77667],{"class":443},[240,77781,77670],{"class":257},[240,77783,77171],{"class":246},[240,77785,77786,77788,77790,77792,77794,77796,77798,77800,77802,77804,77806,77808,77810,77812],{"class":242,"line":10008},[240,77787,75668],{"class":257},[240,77789,60178],{"class":436},[240,77791,789],{"class":257},[240,77793,2683],{"class":443},[240,77795,3059],{"class":288},[240,77797,77153],{"class":49923},[240,77799,77769],{"class":288},[240,77801,2683],{"class":443},[240,77803,2657],{"class":257},[240,77805,77160],{"class":436},[240,77807,789],{"class":257},[240,77809,77739],{"class":443},[240,77811,77670],{"class":257},[240,77813,77171],{"class":246},[240,77815,77816,77818,77820,77822,77824,77826,77828,77830,77832,77834,77836,77838,77841,77843],{"class":242,"line":11667},[240,77817,75668],{"class":257},[240,77819,60178],{"class":436},[240,77821,789],{"class":257},[240,77823,2683],{"class":443},[240,77825,3059],{"class":288},[240,77827,77153],{"class":49923},[240,77829,77769],{"class":288},[240,77831,2683],{"class":443},[240,77833,2657],{"class":257},[240,77835,77160],{"class":436},[240,77837,789],{"class":257},[240,77839,77840],{"class":443},"'哈哈哈哈哈哈哈'",[240,77842,77670],{"class":257},[240,77844,77294],{"class":246},[240,77846,77847],{"class":242,"line":11692},[240,77848,4353],{"emptyLinePlaceholder":2051},[240,77850,77851],{"class":242,"line":11715},[240,77852,77853],{"class":246},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[240,77855,77856,77858,77860,77862,77864,77866,77869,77871,77873,77875,77877,77879,77882,77884],{"class":242,"line":11739},[240,77857,75668],{"class":257},[240,77859,60178],{"class":436},[240,77861,789],{"class":257},[240,77863,2683],{"class":443},[240,77865,3059],{"class":288},[240,77867,77868],{"class":264},"[abc]",[240,77870,2405],{"class":288},[240,77872,2683],{"class":443},[240,77874,2657],{"class":257},[240,77876,77160],{"class":436},[240,77878,789],{"class":257},[240,77880,77881],{"class":443},"'a'",[240,77883,77168],{"class":257},[240,77885,77171],{"class":246},[240,77887,77888,77890,77892,77894,77896,77898,77900,77902,77904,77906,77908,77910,77913,77915],{"class":242,"line":11744},[240,77889,75668],{"class":257},[240,77891,60178],{"class":436},[240,77893,789],{"class":257},[240,77895,2683],{"class":443},[240,77897,3059],{"class":288},[240,77899,77868],{"class":264},[240,77901,2405],{"class":288},[240,77903,2683],{"class":443},[240,77905,2657],{"class":257},[240,77907,77160],{"class":436},[240,77909,789],{"class":257},[240,77911,77912],{"class":443},"'b'",[240,77914,77168],{"class":257},[240,77916,77171],{"class":246},[240,77918,77919,77921,77923,77925,77927,77929,77931,77933,77935,77937,77939,77941,77944,77946],{"class":242,"line":11749},[240,77920,75668],{"class":257},[240,77922,60178],{"class":436},[240,77924,789],{"class":257},[240,77926,2683],{"class":443},[240,77928,3059],{"class":288},[240,77930,77868],{"class":264},[240,77932,2405],{"class":288},[240,77934,2683],{"class":443},[240,77936,2657],{"class":257},[240,77938,77160],{"class":436},[240,77940,789],{"class":257},[240,77942,77943],{"class":443},"'c'",[240,77945,77168],{"class":257},[240,77947,77171],{"class":246},[240,77949,77950,77952,77954,77956,77958,77960,77962,77964,77966,77968,77971,77973],{"class":242,"line":11754},[240,77951,75668],{"class":257},[240,77953,60178],{"class":436},[240,77955,789],{"class":257},[240,77957,2683],{"class":443},[240,77959,77868],{"class":264},[240,77961,2683],{"class":443},[240,77963,2657],{"class":257},[240,77965,77160],{"class":436},[240,77967,789],{"class":257},[240,77969,77970],{"class":443},"'ab'",[240,77972,77168],{"class":257},[240,77974,77171],{"class":246},[240,77976,77977,77979,77981,77983,77985,77987,77989,77991,77993,77995,77997,77999,78001,78003],{"class":242,"line":11763},[240,77978,75668],{"class":257},[240,77980,60178],{"class":436},[240,77982,789],{"class":257},[240,77984,2683],{"class":443},[240,77986,3059],{"class":288},[240,77988,77868],{"class":264},[240,77990,2405],{"class":288},[240,77992,2683],{"class":443},[240,77994,2657],{"class":257},[240,77996,77160],{"class":436},[240,77998,789],{"class":257},[240,78000,77970],{"class":443},[240,78002,77168],{"class":257},[240,78004,78005],{"class":246},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[240,78007,78008,78010,78012,78014,78016,78018,78020,78023,78025,78027,78029,78031,78033,78035],{"class":242,"line":11768},[240,78009,75668],{"class":257},[240,78011,60178],{"class":436},[240,78013,789],{"class":257},[240,78015,2683],{"class":443},[240,78017,3059],{"class":288},[240,78019,77868],{"class":264},[240,78021,78022],{"class":288},"{2}$",[240,78024,2683],{"class":443},[240,78026,2657],{"class":257},[240,78028,77160],{"class":436},[240,78030,789],{"class":257},[240,78032,77970],{"class":443},[240,78034,77168],{"class":257},[240,78036,78037],{"class":246},"\u002F\u002Ftrue   可以选两个\n",[240,78039,78040,78042,78044,78046,78048,78050,78053,78055,78057,78059,78061,78063,78066,78068],{"class":242,"line":11774},[240,78041,75668],{"class":257},[240,78043,60178],{"class":436},[240,78045,789],{"class":257},[240,78047,2683],{"class":443},[240,78049,3059],{"class":288},[240,78051,78052],{"class":264},"[a-z]",[240,78054,2405],{"class":288},[240,78056,2683],{"class":443},[240,78058,2657],{"class":257},[240,78060,77160],{"class":436},[240,78062,789],{"class":257},[240,78064,78065],{"class":443},"'p'",[240,78067,77224],{"class":257},[240,78069,78070],{"class":246},"\u002F\u002Ftrue   依然只能选一个\n",[240,78072,78073,78075,78077,78079,78081,78083,78086,78088,78090,78092,78094,78096,78098,78100],{"class":242,"line":11795},[240,78074,75668],{"class":257},[240,78076,60178],{"class":436},[240,78078,789],{"class":257},[240,78080,2683],{"class":443},[240,78082,3059],{"class":288},[240,78084,78085],{"class":264},"[A-Z]",[240,78087,2405],{"class":288},[240,78089,2683],{"class":443},[240,78091,2657],{"class":257},[240,78093,77160],{"class":436},[240,78095,789],{"class":257},[240,78097,78065],{"class":443},[240,78099,77224],{"class":257},[240,78101,77294],{"class":246},[240,78103,78104,78106,78108,78110,78112,78114,78116,78118,78120,78122,78124,78126,78129,78131],{"class":242,"line":11801},[240,78105,75668],{"class":257},[240,78107,60178],{"class":436},[240,78109,789],{"class":257},[240,78111,2683],{"class":443},[240,78113,3059],{"class":288},[240,78115,78085],{"class":264},[240,78117,2405],{"class":288},[240,78119,2683],{"class":443},[240,78121,2657],{"class":257},[240,78123,77160],{"class":436},[240,78125,789],{"class":257},[240,78127,78128],{"class":443},"'P'",[240,78130,77224],{"class":257},[240,78132,77171],{"class":246},[240,78134,78135,78137,78139,78141,78143,78145,78148,78150,78152,78154,78156,78158,78161,78163],{"class":242,"line":11815},[240,78136,75668],{"class":257},[240,78138,60178],{"class":436},[240,78140,789],{"class":257},[240,78142,2683],{"class":443},[240,78144,3059],{"class":288},[240,78146,78147],{"class":264},"[0-9]",[240,78149,2405],{"class":288},[240,78151,2683],{"class":443},[240,78153,2657],{"class":257},[240,78155,77160],{"class":436},[240,78157,789],{"class":257},[240,78159,78160],{"class":443},"'0'",[240,78162,77224],{"class":257},[240,78164,77171],{"class":246},[240,78166,78167,78169,78171,78173,78175,78177,78180,78182,78184,78186,78188,78190,78192,78194],{"class":242,"line":11821},[240,78168,75668],{"class":257},[240,78170,60178],{"class":436},[240,78172,789],{"class":257},[240,78174,2683],{"class":443},[240,78176,3059],{"class":288},[240,78178,78179],{"class":264},"[a-zA-Z0-9]",[240,78181,2405],{"class":288},[240,78183,2683],{"class":443},[240,78185,2657],{"class":257},[240,78187,77160],{"class":436},[240,78189,789],{"class":257},[240,78191,78065],{"class":443},[240,78193,77168],{"class":257},[240,78195,77171],{"class":246},[240,78197,78198,78200,78202],{"class":242,"line":11848},[240,78199,54353],{"class":257},[240,78201,53751],{"class":253},[240,78203,447],{"class":257},[240,78205,78206,78208,78210],{"class":242,"line":11857},[240,78207,592],{"class":257},[240,78209,53738],{"class":253},[240,78211,447],{"class":257},[240,78213,78214],{"class":242,"line":11863},[240,78215,4353],{"emptyLinePlaceholder":2051},[240,78217,78218,78220,78222],{"class":242,"line":11871},[240,78219,592],{"class":257},[240,78221,52581],{"class":253},[240,78223,447],{"class":257},[23945,78225,78227],{"id":78226},"_3624-修饰符","3.6.2.4 修饰符",[19,78229,78230],{},[219,78231],{"alt":236,"src":78232},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[19,78234,78235],{},"replace是个方法，使用的时候一定不要忘记括号()",[19,78237,78238],{},[219,78239],{"alt":236,"src":78240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[231,78242,78244],{"className":52579,"code":78243,"language":52581,"meta":236,"style":236},"\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",[23,78245,78246,78256,78270,78278,78292,78312,78324,78332,78340,78348,78380,78411,78416,78448,78459,78492,78501,78509,78517],{"__ignoreMap":236},[240,78247,78248,78250,78252,78254],{"class":242,"line":243},[240,78249,53243],{"class":257},[240,78251,53246],{"class":253},[240,78253,53249],{"class":436},[240,78255,447],{"class":257},[240,78257,78258,78260,78262,78264,78266,78268],{"class":242,"line":250},[240,78259,431],{"class":257},[240,78261,52581],{"class":253},[240,78263,53260],{"class":436},[240,78265,440],{"class":257},[240,78267,53265],{"class":443},[240,78269,447],{"class":257},[240,78271,78272,78274,78276],{"class":242,"line":261},[240,78273,431],{"class":257},[240,78275,53278],{"class":253},[240,78277,447],{"class":257},[240,78279,78280,78282,78284,78286,78288,78290],{"class":242,"line":277},[240,78281,452],{"class":257},[240,78283,53288],{"class":253},[240,78285,53291],{"class":436},[240,78287,440],{"class":257},[240,78289,53296],{"class":443},[240,78291,447],{"class":257},[240,78293,78294,78296,78298,78300,78302,78304,78306,78308,78310],{"class":242,"line":294},[240,78295,452],{"class":257},[240,78297,53288],{"class":253},[240,78299,16869],{"class":436},[240,78301,440],{"class":257},[240,78303,53335],{"class":443},[240,78305,53315],{"class":436},[240,78307,440],{"class":257},[240,78309,53342],{"class":443},[240,78311,447],{"class":257},[240,78313,78314,78316,78318,78320,78322],{"class":242,"line":309},[240,78315,452],{"class":257},[240,78317,53351],{"class":253},[240,78319,53354],{"class":257},[240,78321,53351],{"class":253},[240,78323,447],{"class":257},[240,78325,78326,78328,78330],{"class":242,"line":529},[240,78327,592],{"class":257},[240,78329,53278],{"class":253},[240,78331,447],{"class":257},[240,78333,78334,78336,78338],{"class":242,"line":549},[240,78335,431],{"class":257},[240,78337,53738],{"class":253},[240,78339,447],{"class":257},[240,78341,78342,78344,78346],{"class":242,"line":569},[240,78343,452],{"class":257},[240,78345,53751],{"class":253},[240,78347,447],{"class":257},[240,78349,78350,78352,78354,78356,78358,78360,78363,78365,78367,78369,78371,78373,78376,78378],{"class":242,"line":589},[240,78351,75668],{"class":257},[240,78353,60178],{"class":436},[240,78355,789],{"class":257},[240,78357,2683],{"class":443},[240,78359,3059],{"class":288},[240,78361,78362],{"class":49923},"java",[240,78364,2405],{"class":288},[240,78366,2683],{"class":443},[240,78368,2657],{"class":257},[240,78370,77160],{"class":436},[240,78372,789],{"class":257},[240,78374,78375],{"class":443},"'java'",[240,78377,77670],{"class":257},[240,78379,77171],{"class":246},[240,78381,78382,78384,78386,78388,78390,78392,78394,78396,78398,78400,78402,78404,78407,78409],{"class":242,"line":715},[240,78383,75668],{"class":257},[240,78385,60178],{"class":436},[240,78387,789],{"class":257},[240,78389,2683],{"class":443},[240,78391,3059],{"class":288},[240,78393,78362],{"class":49923},[240,78395,2405],{"class":288},[240,78397,2683],{"class":443},[240,78399,2657],{"class":257},[240,78401,77160],{"class":436},[240,78403,789],{"class":257},[240,78405,78406],{"class":443},"'Java'",[240,78408,77670],{"class":257},[240,78410,77294],{"class":246},[240,78412,78413],{"class":242,"line":727},[240,78414,78415],{"class":246},"    \u002F\u002F 不区分大小写、\n",[240,78417,78418,78420,78422,78424,78426,78428,78430,78432,78434,78436,78438,78440,78442,78444,78446],{"class":242,"line":1730},[240,78419,75668],{"class":257},[240,78421,60178],{"class":436},[240,78423,789],{"class":257},[240,78425,2683],{"class":443},[240,78427,3059],{"class":288},[240,78429,78362],{"class":49923},[240,78431,2405],{"class":288},[240,78433,2683],{"class":443},[240,78435,2541],{"class":288},[240,78437,2657],{"class":257},[240,78439,77160],{"class":436},[240,78441,789],{"class":257},[240,78443,78406],{"class":443},[240,78445,77670],{"class":257},[240,78447,77171],{"class":246},[240,78449,78450,78452,78454,78456],{"class":242,"line":3582},[240,78451,13172],{"class":288},[240,78453,75834],{"class":264},[240,78455,15514],{"class":288},[240,78457,78458],{"class":443}," 'java是一门编程语言，学完java工资很高'\n",[240,78460,78461,78463,78466,78468,78471,78474,78476,78478,78480,78482,78485,78487,78490],{"class":242,"line":3596},[240,78462,13172],{"class":288},[240,78464,78465],{"class":264}," result",[240,78467,15514],{"class":288},[240,78469,78470],{"class":257}," str.",[240,78472,78473],{"class":436},"replace",[240,78475,789],{"class":257},[240,78477,2683],{"class":443},[240,78479,78362],{"class":49923},[240,78481,2683],{"class":443},[240,78483,78484],{"class":288},"ig",[240,78486,1277],{"class":257},[240,78488,78489],{"class":443},"'前端'",[240,78491,2129],{"class":257},[240,78493,78494,78496,78498],{"class":242,"line":3601},[240,78495,75668],{"class":257},[240,78497,60178],{"class":436},[240,78499,78500],{"class":257},"(result)\n",[240,78502,78503,78505,78507],{"class":242,"line":3607},[240,78504,54353],{"class":257},[240,78506,53751],{"class":253},[240,78508,447],{"class":257},[240,78510,78511,78513,78515],{"class":242,"line":3628},[240,78512,592],{"class":257},[240,78514,53738],{"class":253},[240,78516,447],{"class":257},[240,78518,78519,78521,78523],{"class":242,"line":3633},[240,78520,592],{"class":257},[240,78522,52581],{"class":253},[240,78524,447],{"class":257},[2019,78526,78527],{},"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":236,"searchDepth":250,"depth":250,"links":78529},[78530,78540,78552,78569,78576,78584],{"id":55296,"depth":250,"text":55297,"children":78531},[78532,78533,78534,78535,78536,78537,78538,78539],{"id":55300,"depth":261,"text":55301},{"id":55333,"depth":261,"text":55334},{"id":55372,"depth":261,"text":55373},{"id":55529,"depth":261,"text":55530},{"id":55577,"depth":261,"text":55578},{"id":55714,"depth":261,"text":55715},{"id":56036,"depth":261,"text":56037},{"id":59022,"depth":261,"text":59023},{"id":59050,"depth":250,"text":59051,"children":78541},[78542,78543,78544,78545,78546,78547,78548,78549,78550,78551],{"id":59054,"depth":261,"text":59055},{"id":59077,"depth":261,"text":59078},{"id":59990,"depth":261,"text":59991},{"id":60680,"depth":261,"text":60681},{"id":60962,"depth":261,"text":60963},{"id":65115,"depth":261,"text":65116},{"id":65285,"depth":261,"text":65286},{"id":65413,"depth":261,"text":65414},{"id":65438,"depth":261,"text":65439},{"id":66827,"depth":261,"text":66828},{"id":67980,"depth":250,"text":67981,"children":78553},[78554,78555,78556,78557,78558,78559,78560,78561,78562,78563,78564,78565,78566,78567,78568],{"id":67984,"depth":261,"text":67985},{"id":68638,"depth":261,"text":68639},{"id":70333,"depth":261,"text":70334},{"id":70374,"depth":261,"text":70375},{"id":70416,"depth":261,"text":70417},{"id":70430,"depth":261,"text":70431},{"id":70479,"depth":261,"text":70480},{"id":70491,"depth":261,"text":70492},{"id":70506,"depth":261,"text":70507},{"id":70542,"depth":261,"text":70543},{"id":70623,"depth":261,"text":70624},{"id":70751,"depth":261,"text":70752},{"id":70763,"depth":261,"text":70764},{"id":70782,"depth":261,"text":70783},{"id":72886,"depth":261,"text":72887},{"id":72905,"depth":250,"text":72906,"children":78570},[78571,78572,78573,78574,78575],{"id":72926,"depth":261,"text":72927},{"id":72946,"depth":261,"text":72947},{"id":72995,"depth":261,"text":72996},{"id":73120,"depth":261,"text":73121},{"id":73301,"depth":261,"text":73302},{"id":73319,"depth":250,"text":73320,"children":78577},[78578,78579,78580,78581,78582,78583],{"id":73334,"depth":261,"text":73335},{"id":73393,"depth":261,"text":73394},{"id":73417,"depth":261,"text":73418},{"id":73737,"depth":261,"text":73738},{"id":73769,"depth":261,"text":73770},{"id":73792,"depth":261,"text":73793},{"id":76859,"depth":250,"text":76860,"children":78585},[78586,78587],{"id":76893,"depth":261,"text":76894},{"id":76932,"depth":261,"text":76933},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":55268,"description":2048},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":78594,"title":78595,"body":78596,"description":2048,"extension":2049,"meta":94731,"navigation":2051,"path":94732,"seo":94733,"stem":94734,"__hash__":94735},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":78597,"toc":94667},[78598,78601,78604,78608,78612,78617,78622,78633,78637,78642,78645,78649,78652,78657,78661,78665,78668,78673,78676,78680,78683,78691,78694,78698,78703,78708,78711,78715,78720,78725,78728,78732,78737,78740,78745,78748,78753,78756,78761,78766,78769,78772,78776,78781,78786,78789,78793,78797,78800,78803,78806,78810,78814,78819,78824,78827,78831,78836,78841,78844,78847,78850,78853,78856,78859,78862,78865,78868,78873,78877,78882,78887,78890,78893,78896,78899,78902,78905,78908,78911,78915,78919,78922,78925,78928,78933,78935,78938,78941,78944,78947,78950,78953,78956,78959,78962,78965,78968,78971,78974,78979,78984,78989,78992,78996,78999,79004,79008,79010,79021,79026,79127,79130,79133,79136,79139,79142,79145,79148,79151,79153,79156,79159,79162,79164,79167,79169,79172,79175,79178,79181,79184,79187,79189,79192,79194,79196,79199,79203,79207,79210,79213,79216,79219,79222,79225,79228,79231,79234,79239,79359,79362,79365,79370,79373,79376,79379,79382,79387,79390,79393,79396,79399,79404,79407,79507,79572,79646,79650,79653,79656,79660,79663,79677,79706,79709,79712,79715,79718,79721,79724,79727,79729,79732,79735,79738,79741,79745,79750,79754,79759,79834,79837,80020,80023,80026,80029,80032,80035,80037,80040,80043,80046,80049,80052,80055,80057,80061,80064,80069,80072,80075,80078,80081,80083,80088,80091,80094,80097,80100,80102,80107,80110,80113,80115,80117,80120,80124,80127,80130,80135,80138,80141,80144,80194,80199,80203,80208,80211,80280,80283,80292,80296,80301,80304,80307,80315,80318,80335,82137,82141,82145,82150,82153,82157,82163,82169,82321,82326,82331,82334,82337,82340,82343,82346,82349,82352,82355,82358,82361,82364,82367,82372,82376,82379,82390,82394,82399,82402,82405,82408,82411,82414,82416,82419,82422,82425,82428,82430,82447,82450,82454,82457,82462,82467,82470,82473,82477,82480,82483,82492,82495,82499,82502,82507,82512,82579,82583,82586,82589,82594,82599,82685,82690,82694,82697,82700,82715,82718,82723,82727,82732,82841,82844,82855,83005,83009,83014,83123,83127,83132,83137,83142,83145,83152,83172,83208,83372,83377,83380,83385,83392,83395,83398,83401,83460,83516,83572,83576,83581,83896,83899,83903,83906,83911,84020,84025,84029,84034,84038,84109,84113,84115,84118,84121,84159,84435,84439,84456,84522,84556,84560,84563,84568,84597,84604,84613,84618,84633,84638,84647,84650,84787,84791,84853,84857,84862,85107,85111,85116,85119,85122,85125,85128,85132,85137,86718,86722,86726,86732,86735,86740,86744,86747,86752,86755,86766,86770,86775,86779,86784,86789,86792,86797,86801,86805,86808,86813,86818,86821,86824,86827,86949,86954,87056,87059,87062,87066,87071,87243,87248,87252,87255,87260,87326,87331,87334,87465,87468,87473,87476,87479,87570,87575,87578,87581,87584,87587,87592,87597,87600,87605,87610,87615,87619,87622,87625,87630,87635,87640,87645,87699,87702,87705,87710,87713,87716,87721,87726,87731,87735,87740,87754,87759,87762,87767,87771,87776,87781,87786,87791,87796,87801,87806,87811,87814,87818,87823,87826,87829,87832,87837,87842,87845,87848,87852,87855,87858,87863,87868,87873,87878,87881,87886,87891,87952,87957,87960,87965,89205,89210,89214,89218,89223,89226,89231,89236,89239,89244,89246,89251,89255,89258,89261,89272,89276,89281,89286,89341,89346,89351,89356,89567,89572,89576,89581,89584,89586,89589,89592,90039,90044,90051,90057,90060,90063,90327,90332,90336,90601,90606,90610,90615,90620,90625,90630,90961,90964,90969,90974,90977,90981,90985,90990,90995,91000,91005,91010,91015,91019,91022,91027,91032,91035,91109,91114,91119,91124,91126,91129,91499,91504,91509,91514,91517,91520,91622,91627,91632,91735,91739,91744,91748,91752,91757,91762,91765,91770,91773,91776,92169,92174,92177,92180,92183,92186,92706,92710,92715,92720,92725,92728,92733,92736,92739,93121,93126,93128,93130,93133,93136,93648,93652,93713,93716,93719,93722,93726,93729,93734,93739,94664],[10,78599,78595],{"id":78600},"_4js进阶",[19,78602,78603],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[14,78605,78607],{"id":78606},"_41-作用域","4.1 作用域",[32,78609,78611],{"id":78610},"_411-局部作用域","4.1.1 局部作用域",[19,78613,78614],{},[219,78615],{"alt":236,"src":78616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[19,78618,78619],{},[219,78620],{"alt":236,"src":78621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[3100,78623,78624,78627,78630],{},[1829,78625,78626],{},"函数作用域在函数内部",[1829,78628,78629],{},"块级作用域在{}",[1829,78631,78632],{},"对象的那个{}不是作用域，不是块作用域",[32,78634,78636],{"id":78635},"_412-全局作用域","4.1.2 全局作用域",[19,78638,78639],{},[219,78640],{"alt":236,"src":78641},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[19,78643,78644],{},"window.a=10不要这样写",[32,78646,78648],{"id":78647},"_413-作用域链","4.1.3 作用域链",[19,78650,78651],{},"变量查找机制",[19,78653,78654],{},[219,78655],{"alt":236,"src":78656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[14,78658,78660],{"id":78659},"_42-垃圾回收机制","4.2 垃圾回收机制",[32,78662,78664],{"id":78663},"_421-大体介绍","4.2.1 大体介绍",[19,78666,78667],{},"垃圾回收机制(Garbage Collection) 简称 GC",[19,78669,78670],{},[219,78671],{"alt":236,"src":78672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[19,78674,78675],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[32,78677,78679],{"id":78678},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[19,78681,78682],{},"堆栈空间分配区别：",[1826,78684,78685,78688],{},[1829,78686,78687],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[1829,78689,78690],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[19,78692,78693],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[23945,78695,78697],{"id":78696},"_4221-引用计数","4.2.2.1 引用计数",[19,78699,78700],{},[219,78701],{"alt":236,"src":78702},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[19,78704,78705],{},[219,78706],{"alt":236,"src":78707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[19,78709,78710],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[23945,78712,78714],{"id":78713},"_4222-标记清除法","4.2.2.2 标记清除法",[19,78716,78717],{},[219,78718],{"alt":236,"src":78719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[19,78721,78722],{},[219,78723],{"alt":236,"src":78724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[19,78726,78727],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[14,78729,78731],{"id":78730},"_43-闭包","4.3 闭包",[19,78733,78734],{},[219,78735],{"alt":236,"src":78736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[19,78738,78739],{},"闭包：内层函数+外层函数的变量",[19,78741,78742],{},[219,78743],{"alt":236,"src":78744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[19,78746,78747],{},"closure就是闭包",[19,78749,78750],{},[219,78751],{"alt":236,"src":78752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[19,78754,78755],{},"内层函数必须包含外层函数的变量才是闭包",[19,78757,78758],{},[219,78759],{"alt":236,"src":78760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[19,78762,78763],{},[219,78764],{"alt":236,"src":78765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[19,78767,78768],{},"闭包可能会引起内存泄漏",[19,78770,78771],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[14,78773,78775],{"id":78774},"_44-变量提升","4.4 变量提升",[19,78777,78778],{},[219,78779],{"alt":236,"src":78780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[19,78782,78783],{},[219,78784],{"alt":236,"src":78785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[19,78787,78788],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[14,78790,78792],{"id":78791},"_45-函数进阶","4.5 函数进阶",[32,78794,78796],{"id":78795},"_451-函数提升","4.5.1 函数提升",[19,78798,78799],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[19,78801,78802],{},"只提升函数声明，不提升函数调用",[53751,78804,78805],{},"\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",[32,78807,78809],{"id":78808},"_452-函数参数","4.5.2 函数参数",[23945,78811,78813],{"id":78812},"_4521-动态参数","4.5.2.1 动态参数",[19,78815,78816],{},[219,78817],{"alt":236,"src":78818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[19,78820,78821],{},[219,78822],{"alt":236,"src":78823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[19,78825,78826],{},"箭头函数里边没有arguments",[23945,78828,78830],{"id":78829},"_4522-剩余参数","4.5.2.2 剩余参数",[19,78832,78833],{},[219,78834],{"alt":236,"src":78835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[19,78837,78838],{},[219,78839],{"alt":236,"src":78840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[19,78842,78843],{},"剩余参数使用的时候不需要写...",[19,78845,78846],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[19,78848,78849],{},"  function getSum(a,b,...arr) {",[19,78851,78852],{},"  console.log(11)",[19,78854,78855],{},"  }",[19,78857,78858],{},"  getSum(1,2,3,4)",[19,78860,78861],{},"  将1传给a，2传给b，剩下的传给剩余参数",[19,78863,78864],{},"  getSum(1,2)",[19,78866,78867],{},"  将1传给a，2传给b，剩余参数为一个空数组",[19,78869,78870],{},[219,78871],{"alt":236,"src":78872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[23945,78874,78876],{"id":78875},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[19,78878,78879],{},[219,78880],{"alt":236,"src":78881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[19,78883,78884],{},[219,78885],{"alt":236,"src":78886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[19,78888,78889],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[19,78891,78892],{},"展开运算符可以用于数组之间的合并：",[19,78894,78895],{},"const arr1 = [1, 2, 3]",[19,78897,78898],{},"const arr2 = [3, 4, 5]",[19,78900,78901],{},"const arr = [...arr1, ...arr2]",[19,78903,78904],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[19,78906,78907],{},"剩余参数：函数参数使用，得到真数组",[19,78909,78910],{},"展开运算符：数组中使用，数组展开",[32,78912,78914],{"id":78913},"_453-箭头函数","4.5.3 箭头函数",[23945,78916,78918],{"id":78917},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[19,78920,78921],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[19,78923,78924],{},"它不是万能的！！！",[19,78926,78927],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[19,78929,78930],{},[219,78931],{"alt":236,"src":78932},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[19,78934,87],{},[19,78936,78937],{},"① 只有一个形参的时候，可以省略小括号：",[19,78939,78940],{},"const fn=x=>{console.log(x)}",[19,78942,78943],{},"② 只有一行代码时可以省略大括号：",[19,78945,78946],{},"const fn=x=>console.log(11)",[19,78948,78949],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[19,78951,78952],{},"const fn=x=>x+x",[19,78954,78955],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[19,78957,78958],{},"⑤ 阻止表单默认提交：",[19,78960,78961],{},"const form = document.querySelector('form')",[19,78963,78964],{},"form.addEventListener('click', ev => ev.preventDefault())",[19,78966,78967],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[19,78969,78970],{},"const fn=uname=>({uname:uname})",[19,78972,78973],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[19,78975,78976],{},[219,78977],{"alt":236,"src":78978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[19,78980,78981],{},[219,78982],{"alt":236,"src":78983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[19,78985,78986],{},[219,78987],{"alt":236,"src":78988},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[19,78990,78991],{},"一定不要忘记用()，有()就理解为自带return",[23945,78993,78995],{"id":78994},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[19,78997,78998],{},"箭头函数是没有动态参数的arguments",[19,79000,79001],{},[219,79002],{"alt":236,"src":79003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[23945,79005,79007],{"id":79006},"_4533-箭头函数this","4.5.3.3 箭头函数this",[19,79009,13283],{},[1826,79011,79012,79015,79018],{},[1829,79013,79014],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[1829,79016,79017],{},"事件回调函数使用箭头函数时，this 为全局的 window",[1829,79019,79020],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[19,79022,79023],{},[219,79024],{"alt":236,"src":79025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[231,79027,79029],{"className":55003,"code":79028,"language":55005,"meta":236,"style":236},"  \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",[23,79030,79031,79039,79044,79049,79054,79059,79064,79068,79073,79077,79081,79086,79091,79096,79100,79104,79109,79114,79119],{"__ignoreMap":236},[240,79032,79033,79035,79037],{"class":242,"line":243},[240,79034,452],{"class":257},[240,79036,53751],{"class":253},[240,79038,447],{"class":257},[240,79040,79041],{"class":242,"line":250},[240,79042,79043],{"class":257},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[240,79045,79046],{"class":242,"line":261},[240,79047,79048],{"class":257},"    console.log(this) \u002F\u002F指向window\n",[240,79050,79051],{"class":242,"line":277},[240,79052,79053],{"class":257},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[240,79055,79056],{"class":242,"line":294},[240,79057,79058],{"class":257},"    function fn() {\n",[240,79060,79061],{"class":242,"line":309},[240,79062,79063],{"class":257},"      console.log(this)  \u002F\u002F指向window\n",[240,79065,79066],{"class":242,"line":529},[240,79067,4140],{"class":257},[240,79069,79070],{"class":242,"line":549},[240,79071,79072],{"class":257},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[240,79074,79075],{"class":242,"line":569},[240,79076,4353],{"emptyLinePlaceholder":2051},[240,79078,79079],{"class":242,"line":589},[240,79080,73439],{"class":257},[240,79082,79083],{"class":242,"line":715},[240,79084,79085],{"class":257},"      name: 'andy',\n",[240,79087,79088],{"class":242,"line":727},[240,79089,79090],{"class":257},"      sayHai: function () {\n",[240,79092,79093],{"class":242,"line":1730},[240,79094,79095],{"class":257},"        console.log(this)\n",[240,79097,79098],{"class":242,"line":3582},[240,79099,54334],{"class":257},[240,79101,79102],{"class":242,"line":3596},[240,79103,4140],{"class":257},[240,79105,79106],{"class":242,"line":3601},[240,79107,79108],{"class":257},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[240,79110,79111],{"class":242,"line":3607},[240,79112,79113],{"class":257},"    \u002F\u002F 2.箭头函数的this\n",[240,79115,79116],{"class":242,"line":3628},[240,79117,79118],{"class":257},"    const fn = () => console.log(this)\n",[240,79120,79121,79123,79125],{"class":242,"line":3633},[240,79122,54353],{"class":257},[240,79124,53751],{"class":253},[240,79126,447],{"class":257},[19,79128,79129],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[19,79131,79132],{},"const fn = () => console.log(this)",[19,79134,79135],{},"fn() \u002F\u002F指向window",[19,79137,79138],{},"\u002F\u002F 3.对象方法箭头函数 this",[19,79140,79141],{},"①",[19,79143,79144],{},"const obj = {",[19,79146,79147],{},"uname: 'pink老师',",[19,79149,79150],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[19,79152,3040],{},[19,79154,79155],{},"调用对象里边的函数",[19,79157,79158],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[19,79160,79161],{},"obj.sayHai()",[19,79163,93],{},[19,79165,79166],{},"const obj1 = {",[19,79168,79147],{},[19,79170,79171],{},"sayHai: function () {",[19,79173,79174],{},"let i = 10",[19,79176,79177],{},"const count = () => {",[19,79179,79180],{},"console.log(this)",[19,79182,79183],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[19,79185,79186],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[19,79188,3040],{},[19,79190,79191],{},"count()",[19,79193,3040],{},[19,79195,3040],{},[19,79197,79198],{},"obj1.sayHai()",[14,79200,79202],{"id":79201},"_46-解构赋值","4.6 解构赋值",[32,79204,79206],{"id":79205},"_461-数组解构","4.6.1 数组解构",[19,79208,79209],{},"以前要是使用数组中的值的话：",[19,79211,79212],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[19,79214,79215],{},"const arr=[100,60,80]",[19,79217,79218],{},"const max=arr[0]",[19,79220,79221],{},"const min=arr[1]",[19,79223,79224],{},"const avg=arr[2]",[19,79226,79227],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[19,79229,79230],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[19,79232,79233],{},"这个写法就类似于上边的那种用很多const的方法",[19,79235,79236],{},[219,79237],{"alt":236,"src":79238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[231,79240,79242],{"className":52579,"code":79241,"language":52581,"meta":236,"style":236},"①变量之间交换值:\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",[23,79243,79244,79249,79254,79259,79264,79269,79273,79277,79282,79286,79291,79296,79300,79305,79310,79321,79331,79336,79341,79346,79350,79354],{"__ignoreMap":236},[240,79245,79246],{"class":242,"line":243},[240,79247,79248],{"class":257},"①变量之间交换值:\n",[240,79250,79251],{"class":242,"line":250},[240,79252,79253],{"class":257},"let a=1\n",[240,79255,79256],{"class":242,"line":261},[240,79257,79258],{"class":257},"let b=2;\n",[240,79260,79261],{"class":242,"line":277},[240,79262,79263],{"class":257},"必须加这行代码，不然就会报错\n",[240,79265,79266],{"class":242,"line":294},[240,79267,79268],{"class":257},"[b,a]=[a,b]\n",[240,79270,79271],{"class":242,"line":309},[240,79272,4353],{"emptyLinePlaceholder":2051},[240,79274,79275],{"class":242,"line":529},[240,79276,4353],{"emptyLinePlaceholder":2051},[240,79278,79279],{"class":242,"line":549},[240,79280,79281],{"class":257},"可以写成下面的方式：\n",[240,79283,79284],{"class":242,"line":569},[240,79285,79253],{"class":257},[240,79287,79288],{"class":242,"line":589},[240,79289,79290],{"class":257},"let b=2\n",[240,79292,79293],{"class":242,"line":715},[240,79294,79295],{"class":257},";[b,a]=[a,b]\n",[240,79297,79298],{"class":242,"line":727},[240,79299,4353],{"emptyLinePlaceholder":2051},[240,79301,79302],{"class":242,"line":1730},[240,79303,79304],{"class":257},"②排序\n",[240,79306,79307],{"class":242,"line":3582},[240,79308,79309],{"class":257},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[240,79311,79312,79315,79318],{"class":242,"line":3596},[240,79313,79314],{"class":257},"for (let i = 0; i ",[240,79316,431],{"class":79317},"s7hpK",[240,79319,79320],{"class":257}," arr1.length; i++) {\n",[240,79322,79323,79326,79328],{"class":242,"line":3601},[240,79324,79325],{"class":257},"   for (let j = 0; j ",[240,79327,431],{"class":79317},[240,79329,79330],{"class":257}," arr1.length - 1; j++) {\n",[240,79332,79333],{"class":242,"line":3607},[240,79334,79335],{"class":257},"      if (arr1[j] > arr1[j + 1]) {\n",[240,79337,79338],{"class":242,"line":3628},[240,79339,79340],{"class":257},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[240,79342,79343],{"class":242,"line":3633},[240,79344,79345],{"class":257},"       }\n",[240,79347,79348],{"class":242,"line":3647},[240,79349,6261],{"class":257},[240,79351,79352],{"class":242,"line":3652},[240,79353,312],{"class":257},[240,79355,79356],{"class":242,"line":3681},[240,79357,79358],{"class":257},"console.log(arr1)\n",[19,79360,79361],{},"数组解构的细节：",[19,79363,79364],{},"①变量多，单元值少",[19,79366,79367],{},[219,79368],{"alt":236,"src":79369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[19,79371,79372],{},"防止出现undefined的方法：",[19,79374,79375],{},"const [a=0,b=0] =[1]",[19,79377,79378],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[19,79380,79381],{},"②变量少，单元值多",[19,79383,79384],{},[219,79385],{"alt":236,"src":79386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[19,79388,79389],{},"此时可以使用剩余参数来接收多余的值",[19,79391,79392],{},"const [a,b,...c]=[1,2,3,4]",[19,79394,79395],{},"console.log(c) 输出[3,4]",[19,79397,79398],{},"③可以按需导入，忽略某些返回值",[19,79400,79401],{},[219,79402],{"alt":236,"src":79403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[19,79405,79406],{},"④支持多维数组的结构",[231,79408,79412],{"className":79409,"code":79410,"language":79411,"meta":236,"style":236},"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",[23,79413,79414,79442,79458,79473,79488],{"__ignoreMap":236},[240,79415,79416,79418,79420,79422,79424,79426,79428,79430,79433,79435,79437,79439],{"class":242,"line":243},[240,79417,8743],{"class":288},[240,79419,53771],{"class":257},[240,79421,440],{"class":288},[240,79423,54162],{"class":257},[240,79425,1643],{"class":264},[240,79427,1277],{"class":257},[240,79429,1668],{"class":264},[240,79431,79432],{"class":257},", [",[240,79434,1692],{"class":264},[240,79436,1277],{"class":257},[240,79438,1716],{"class":264},[240,79440,79441],{"class":257},"]]\n",[240,79443,79444,79447,79449,79451,79453,79455],{"class":242,"line":250},[240,79445,79446],{"class":257},"console.",[240,79448,60178],{"class":436},[240,79450,5803],{"class":257},[240,79452,1274],{"class":264},[240,79454,6168],{"class":257},[240,79456,79457],{"class":246},"  \u002F\u002F1\n",[240,79459,79460,79462,79464,79466,79468,79470],{"class":242,"line":261},[240,79461,79446],{"class":257},[240,79463,60178],{"class":436},[240,79465,5803],{"class":257},[240,79467,1643],{"class":264},[240,79469,6168],{"class":257},[240,79471,79472],{"class":246},"  \u002F\u002F2\n",[240,79474,79475,79477,79479,79481,79483,79485],{"class":242,"line":277},[240,79476,79446],{"class":257},[240,79478,60178],{"class":436},[240,79480,5803],{"class":257},[240,79482,1668],{"class":264},[240,79484,6168],{"class":257},[240,79486,79487],{"class":246},"  \u002F\u002F[3,4]\n",[240,79489,79490,79492,79494,79496,79498,79500,79502,79504],{"class":242,"line":294},[240,79491,79446],{"class":257},[240,79493,60178],{"class":436},[240,79495,5803],{"class":257},[240,79497,1668],{"class":264},[240,79499,6853],{"class":257},[240,79501,1274],{"class":264},[240,79503,6168],{"class":257},[240,79505,79506],{"class":246},"  \u002F\u002F3\n",[231,79508,79510],{"className":79409,"code":79509,"language":79411,"meta":236,"style":236},"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",[23,79511,79512,79539,79550,79561],{"__ignoreMap":236},[240,79513,79514,79516,79519,79521,79523,79525,79527,79529,79531,79533,79535,79537],{"class":242,"line":243},[240,79515,8743],{"class":288},[240,79517,79518],{"class":257}," [a, b, c] ",[240,79520,440],{"class":288},[240,79522,54162],{"class":257},[240,79524,1643],{"class":264},[240,79526,1277],{"class":257},[240,79528,1668],{"class":264},[240,79530,79432],{"class":257},[240,79532,1692],{"class":264},[240,79534,1277],{"class":257},[240,79536,1716],{"class":264},[240,79538,79441],{"class":257},[240,79540,79541,79543,79545,79548],{"class":242,"line":250},[240,79542,79446],{"class":257},[240,79544,60178],{"class":436},[240,79546,79547],{"class":257},"(a)",[240,79549,79457],{"class":246},[240,79551,79552,79554,79556,79559],{"class":242,"line":261},[240,79553,79446],{"class":257},[240,79555,60178],{"class":436},[240,79557,79558],{"class":257},"(b)",[240,79560,79472],{"class":246},[240,79562,79563,79565,79567,79570],{"class":242,"line":277},[240,79564,79446],{"class":257},[240,79566,60178],{"class":436},[240,79568,79569],{"class":257},"(c)",[240,79571,79487],{"class":246},[231,79573,79575],{"className":79409,"code":79574,"language":79411,"meta":236,"style":236},"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",[23,79576,79577,79604,79614,79624,79634],{"__ignoreMap":236},[240,79578,79579,79581,79584,79586,79588,79590,79592,79594,79596,79598,79600,79602],{"class":242,"line":243},[240,79580,8743],{"class":288},[240,79582,79583],{"class":257}," [a, b, [c, d]] ",[240,79585,440],{"class":288},[240,79587,54162],{"class":257},[240,79589,1643],{"class":264},[240,79591,1277],{"class":257},[240,79593,1668],{"class":264},[240,79595,79432],{"class":257},[240,79597,1692],{"class":264},[240,79599,1277],{"class":257},[240,79601,1716],{"class":264},[240,79603,79441],{"class":257},[240,79605,79606,79608,79610,79612],{"class":242,"line":250},[240,79607,79446],{"class":257},[240,79609,60178],{"class":436},[240,79611,79547],{"class":257},[240,79613,79457],{"class":246},[240,79615,79616,79618,79620,79622],{"class":242,"line":261},[240,79617,79446],{"class":257},[240,79619,60178],{"class":436},[240,79621,79558],{"class":257},[240,79623,79472],{"class":246},[240,79625,79626,79628,79630,79632],{"class":242,"line":277},[240,79627,79446],{"class":257},[240,79629,60178],{"class":436},[240,79631,79569],{"class":257},[240,79633,79506],{"class":246},[240,79635,79636,79638,79640,79643],{"class":242,"line":294},[240,79637,79446],{"class":257},[240,79639,60178],{"class":436},[240,79641,79642],{"class":257},"(d)",[240,79644,79645],{"class":246},"  \u002F\u002F4\n",[32,79647,79649],{"id":79648},"_462-对象解构","4.6.2 对象解构",[19,79651,79652],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[19,79654,79655],{},"用的非常非常多！！！！！！",[23945,79657,79659],{"id":79658},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[19,79661,79662],{},"基本语法：",[1826,79664,79665,79668,79671,79674],{},[1829,79666,79667],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[1829,79669,79670],{},"对象属性的值将被赋值给与属性名相同的变量",[1829,79672,79673],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[1829,79675,79676],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[231,79678,79680],{"className":52579,"code":79679,"language":52581,"meta":236,"style":236},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[23,79681,79682,79687,79692,79697,79701],{"__ignoreMap":236},[240,79683,79684],{"class":242,"line":243},[240,79685,79686],{"class":257},"const obj = {\n",[240,79688,79689],{"class":242,"line":250},[240,79690,79691],{"class":257},"   uname: 'pink老师',\n",[240,79693,79694],{"class":242,"line":261},[240,79695,79696],{"class":257},"   age: 18,\n",[240,79698,79699],{"class":242,"line":277},[240,79700,312],{"class":257},[240,79702,79703],{"class":242,"line":294},[240,79704,79705],{"class":257},"const { uname, age } = obj\n",[19,79707,79708],{},"上方代码这样写等价于：",[19,79710,79711],{},"const uname等价于obj.uname",[19,79713,79714],{},"变量名可以重新改名：",[19,79716,79717],{},"const uname='red老师'",[19,79719,79720],{},"const user={",[19,79722,79723],{},"  uname:'pink老师',",[19,79725,79726],{},"  age:18",[19,79728,3040],{},[19,79730,79731],{},"const {uname,age}=user",[19,79733,79734],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[19,79736,79737],{},"const {旧变量名：新变量名}=对象",[19,79739,79740],{},"const {uname:username,age}=user",[23945,79742,79744],{"id":79743},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[19,79746,79747],{},[219,79748],{"alt":236,"src":79749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[23945,79751,79753],{"id":79752},"_4623-多级对象解构","4.6.2.3 多级对象解构",[19,79755,79756],{},[219,79757],{"alt":236,"src":79758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[231,79760,79762],{"className":55003,"code":79761,"language":55005,"meta":236,"style":236},"  \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",[23,79763,79764,79772,79777,79782,79787,79792,79797,79802,79807,79812,79816,79821,79826],{"__ignoreMap":236},[240,79765,79766,79768,79770],{"class":242,"line":243},[240,79767,452],{"class":257},[240,79769,53751],{"class":253},[240,79771,447],{"class":257},[240,79773,79774],{"class":242,"line":250},[240,79775,79776],{"class":257},"    const pig = {\n",[240,79778,79779],{"class":242,"line":261},[240,79780,79781],{"class":257},"      name: '佩奇',\n",[240,79783,79784],{"class":242,"line":277},[240,79785,79786],{"class":257},"      family: {\n",[240,79788,79789],{"class":242,"line":294},[240,79790,79791],{"class":257},"        mother: '猪妈妈',\n",[240,79793,79794],{"class":242,"line":309},[240,79795,79796],{"class":257},"        father: '猪爸爸',\n",[240,79798,79799],{"class":242,"line":529},[240,79800,79801],{"class":257},"        sister: '乔治'\n",[240,79803,79804],{"class":242,"line":549},[240,79805,79806],{"class":257},"      },\n",[240,79808,79809],{"class":242,"line":569},[240,79810,79811],{"class":257},"      age: 6\n",[240,79813,79814],{"class":242,"line":589},[240,79815,4140],{"class":257},[240,79817,79818],{"class":242,"line":715},[240,79819,79820],{"class":257},"    \u002F\u002F 多级对象解构\n",[240,79822,79823],{"class":242,"line":727},[240,79824,79825],{"class":257},"    const { name, family: { mother, father, sister }, age } = pig\n",[240,79827,79828,79830,79832],{"class":242,"line":1730},[240,79829,54353],{"class":257},[240,79831,53751],{"class":253},[240,79833,447],{"class":257},[19,79835,79836],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[231,79838,79841],{"className":79839,"code":79840,"language":78362,"meta":236,"style":236},"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",[23,79842,79843,79848,79859,79871,79883,79892,79896,79907,79919,79929,79934,79938,79948,79959,79968,79972,79976,79987,79998,80007,80011,80016],{"__ignoreMap":236},[240,79844,79845],{"class":242,"line":243},[240,79846,79847],{"class":246},"    \u002F\u002F 这是后台传递过来的数据\n",[240,79849,79850,79852,79855,79857],{"class":242,"line":250},[240,79851,13172],{"class":288},[240,79853,79854],{"class":257}," msg ",[240,79856,440],{"class":288},[240,79858,258],{"class":257},[240,79860,79861,79864,79866,79869],{"class":242,"line":261},[240,79862,79863],{"class":443},"      \"code\"",[240,79865,2954],{"class":288},[240,79867,79868],{"class":264}," 200",[240,79870,33412],{"class":257},[240,79872,79873,79876,79878,79881],{"class":242,"line":277},[240,79874,79875],{"class":443},"      \"msg\"",[240,79877,2954],{"class":288},[240,79879,79880],{"class":443}," \"获取新闻列表成功\"",[240,79882,33412],{"class":257},[240,79884,79885,79888,79890],{"class":242,"line":294},[240,79886,79887],{"class":443},"      \"data\"",[240,79889,2954],{"class":288},[240,79891,57380],{"class":257},[240,79893,79894],{"class":242,"line":309},[240,79895,4463],{"class":257},[240,79897,79898,79901,79903,79905],{"class":242,"line":529},[240,79899,79900],{"class":443},"          \"id\"",[240,79902,2954],{"class":288},[240,79904,27065],{"class":264},[240,79906,33412],{"class":257},[240,79908,79909,79912,79914,79917],{"class":242,"line":549},[240,79910,79911],{"class":443},"          \"title\"",[240,79913,2954],{"class":288},[240,79915,79916],{"class":443}," \"5G商用自己，三大运用商收入下降\"",[240,79918,33412],{"class":257},[240,79920,79921,79924,79926],{"class":242,"line":569},[240,79922,79923],{"class":443},"          \"count\"",[240,79925,2954],{"class":288},[240,79927,79928],{"class":264}," 58\n",[240,79930,79931],{"class":242,"line":589},[240,79932,79933],{"class":257},"        },\n",[240,79935,79936],{"class":242,"line":715},[240,79937,4463],{"class":257},[240,79939,79940,79942,79944,79946],{"class":242,"line":727},[240,79941,79900],{"class":443},[240,79943,2954],{"class":288},[240,79945,16704],{"class":264},[240,79947,33412],{"class":257},[240,79949,79950,79952,79954,79957],{"class":242,"line":1730},[240,79951,79911],{"class":443},[240,79953,2954],{"class":288},[240,79955,79956],{"class":443}," \"国际媒体头条速览\"",[240,79958,33412],{"class":257},[240,79960,79961,79963,79965],{"class":242,"line":3582},[240,79962,79923],{"class":443},[240,79964,2954],{"class":288},[240,79966,79967],{"class":264}," 56\n",[240,79969,79970],{"class":242,"line":3596},[240,79971,79933],{"class":257},[240,79973,79974],{"class":242,"line":3601},[240,79975,4463],{"class":257},[240,79977,79978,79980,79982,79985],{"class":242,"line":3607},[240,79979,79900],{"class":443},[240,79981,2954],{"class":288},[240,79983,79984],{"class":264}," 3",[240,79986,33412],{"class":257},[240,79988,79989,79991,79993,79996],{"class":242,"line":3628},[240,79990,79911],{"class":443},[240,79992,2954],{"class":288},[240,79994,79995],{"class":443}," \"乌克兰和俄罗斯持续冲突\"",[240,79997,33412],{"class":257},[240,79999,80000,80002,80004],{"class":242,"line":3633},[240,80001,79923],{"class":443},[240,80003,2954],{"class":288},[240,80005,80006],{"class":264}," 1669\n",[240,80008,80009],{"class":242,"line":3647},[240,80010,79933],{"class":257},[240,80012,80013],{"class":242,"line":3652},[240,80014,80015],{"class":257},"      ]\n",[240,80017,80018],{"class":242,"line":3681},[240,80019,4140],{"class":257},[19,80021,80022],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[19,80024,80025],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[19,80027,80028],{},"\u002F\u002F上面msg是后台传递过来的数据，我们需要把data选出当做参数传递给函数 function render(arr) { const { data } = arr \u002F\u002F 我们只要 data 数据 \u002F\u002F 内部处理 console.log(data) } render(msg) msg是个对象，为实参，arr为形参，上述代码可以实现msg内部的data对象的输出，我们也可以按照下方的形式来写：",[19,80030,80031],{},"function({data}) {",[19,80033,80034],{},"console.log(data)",[19,80036,3040],{},[19,80038,80039],{},"render(msg)",[19,80041,80042],{},"实参传递给形参的时候解构了",[19,80044,80045],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[19,80047,80048],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[19,80050,80051],{},"function render({data:mydata}) {",[19,80053,80054],{},"  console.log(data)",[19,80056,3040],{},[32,80058,80060],{"id":80059},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[19,80062,80063],{},"有两种情况：一个是数组结构，一个是立即执行函数",[1826,80065,80066],{},[1829,80067,80068],{},"如果对一个数组进行遍历，有两种方式：",[19,80070,80071],{},"①法1",[19,80073,80074],{},"const arr=[1,2,3]",[19,80076,80077],{},"arr.map(function(item,index) {",[19,80079,80080],{},"  console.log(item)",[19,80082,54400],{},[19,80084,80085],{},[219,80086],{"alt":236,"src":80087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[19,80089,80090],{},"②法2",[19,80092,80093],{},"const str='pink'",[19,80095,80096],{},"[1,2,3].map(function(item,index) {",[19,80098,80099],{},"console.log(item)",[19,80101,54400],{},[19,80103,80104],{},[219,80105],{"alt":236,"src":80106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[19,80108,80109],{},"此时会报错",[19,80111,80112],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[19,80114,80099],{},[19,80116,54400],{},[19,80118,80119],{},"内部会当成这样处理，所以我们用分号进行隔开",[14,80121,80123],{"id":80122},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[19,80125,80126],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[19,80128,80129],{},"可以理解为加强版的for循环",[19,80131,80132],{},[219,80133],{"alt":236,"src":80134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[19,80136,80137],{},"里边不写return，不返回数组，只遍历不返回",[19,80139,80140],{},"map是返回数组",[19,80142,80143],{},"forEach主要用于遍历数组对象",[231,80145,80147],{"className":55003,"code":80146,"language":55005,"meta":236,"style":236},"  \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",[23,80148,80149,80157,80162,80167,80172,80177,80181,80186],{"__ignoreMap":236},[240,80150,80151,80153,80155],{"class":242,"line":243},[240,80152,452],{"class":257},[240,80154,53751],{"class":253},[240,80156,447],{"class":257},[240,80158,80159],{"class":242,"line":250},[240,80160,80161],{"class":257},"    const arr = ['red', 'green', 'pink']\n",[240,80163,80164],{"class":242,"line":261},[240,80165,80166],{"class":257},"    const result = arr.forEach(function (item, index) {\n",[240,80168,80169],{"class":242,"line":277},[240,80170,80171],{"class":257},"      console.log(item)\n",[240,80173,80174],{"class":242,"line":294},[240,80175,80176],{"class":257},"      console.log(index)\n",[240,80178,80179],{"class":242,"line":309},[240,80180,35407],{"class":257},[240,80182,80183],{"class":242,"line":529},[240,80184,80185],{"class":257},"    console.log(result)\n",[240,80187,80188,80190,80192],{"class":242,"line":549},[240,80189,54353],{"class":257},[240,80191,53751],{"class":253},[240,80193,447],{"class":257},[19,80195,80196],{},[219,80197],{"alt":236,"src":80198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[14,80200,80202],{"id":80201},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[19,80204,80205],{},[219,80206],{"alt":236,"src":80207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[19,80209,80210],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[231,80212,80214],{"className":55003,"code":80213,"language":55005,"meta":236,"style":236},"\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",[23,80215,80216,80224,80232,80237,80242,80246,80250,80255,80259,80264,80272],{"__ignoreMap":236},[240,80217,80218,80220,80222],{"class":242,"line":243},[240,80219,431],{"class":257},[240,80221,53738],{"class":253},[240,80223,447],{"class":257},[240,80225,80226,80228,80230],{"class":242,"line":250},[240,80227,452],{"class":257},[240,80229,53751],{"class":253},[240,80231,447],{"class":257},[240,80233,80234],{"class":242,"line":261},[240,80235,80236],{"class":257},"    const arr = [10, 20, 30]\n",[240,80238,80239],{"class":242,"line":277},[240,80240,80241],{"class":257},"    const newArr = arr.filter(function (item, index) {\n",[240,80243,80244],{"class":242,"line":294},[240,80245,80171],{"class":257},[240,80247,80248],{"class":242,"line":309},[240,80249,80176],{"class":257},[240,80251,80252],{"class":242,"line":529},[240,80253,80254],{"class":257},"      return item >= 20\n",[240,80256,80257],{"class":242,"line":549},[240,80258,35407],{"class":257},[240,80260,80261],{"class":242,"line":569},[240,80262,80263],{"class":257},"    console.log(newArr)\n",[240,80265,80266,80268,80270],{"class":242,"line":589},[240,80267,54353],{"class":257},[240,80269,53751],{"class":253},[240,80271,447],{"class":257},[240,80273,80274,80276,80278],{"class":242,"line":715},[240,80275,592],{"class":257},[240,80277,53738],{"class":253},[240,80279,447],{"class":257},[19,80281,80282],{},"这个也可以写成箭头函数：",[231,80284,80286],{"className":52579,"code":80285,"language":52581,"meta":236,"style":236},"const newArr = arr.filter(item => item >= 20)\n",[23,80287,80288],{"__ignoreMap":236},[240,80289,80290],{"class":242,"line":243},[240,80291,80285],{"class":257},[14,80293,80295],{"id":80294},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[19,80297,80298],{},[219,80299],{"alt":236,"src":80300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[19,80302,80303],{},"步骤：",[19,80305,80306],{},"①：渲染页面模块",[3100,80308,80309,80312],{},[1829,80310,80311],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[1829,80313,80314],{},"用forEach+字符串的形式",[19,80316,80317],{},"②：点击不同需求，显示不同页面内容",[3100,80319,80320,80323,80326,80329,80332],{},[1829,80321,80322],{},"点击采取事件委托方式 .filter",[1829,80324,80325],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[1829,80327,80328],{},"筛选条件是根据点击的 data-index 来判断",[1829,80330,80331],{},"可以使用对象解构，把事件对象解构",[1829,80333,80334],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[231,80336,80338],{"className":52579,"code":80337,"language":52581,"meta":236,"style":236},"\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",[23,80339,80340,80350,80364,80368,80376,80390,80410,80422,80430,80436,80446,80456,80466,80470,80474,80480,80493,80505,80515,80527,80531,80535,80542,80555,80567,80584,80602,80615,80619,80623,80635,80645,80649,80653,80660,80701,80728,80738,80742,80746,80754,80766,80770,80774,80782,80794,80806,80817,80821,80825,80834,80846,80857,80861,80865,80874,80886,80898,80902,80906,80913,80923,80935,80947,80962,80966,80970,80978,80994,81004,81014,81024,81036,81040,81044,81054,81065,81075,81079,81087,81095,81099,81107,81122,81148,81173,81198,81217,81225,81239,81244,81249,81254,81259,81264,81272,81280,81285,81296,81301,81311,81321,81331,81341,81345,81349,81358,81367,81376,81385,81389,81393,81402,81411,81420,81429,81433,81437,81446,81455,81464,81473,81477,81481,81490,81499,81508,81517,81521,81525,81534,81543,81552,81561,81565,81569,81578,81587,81596,81605,81609,81613,81622,81631,81639,81648,81652,81656,81660,81665,81677,81682,81694,81698,81715,81743,81752,81757,81767,81777,81786,81791,81796,81800,81805,81822,81826,81831,81839,81844,81871,81876,81896,81901,81913,81918,81923,81928,81939,81953,81990,82008,82041,82058,82082,82086,82091,82097,82101,82105,82109,82117,82125,82129],{"__ignoreMap":236},[240,80341,80342,80344,80346,80348],{"class":242,"line":243},[240,80343,53243],{"class":257},[240,80345,53246],{"class":253},[240,80347,53249],{"class":436},[240,80349,447],{"class":257},[240,80351,80352,80354,80356,80358,80360,80362],{"class":242,"line":250},[240,80353,431],{"class":257},[240,80355,52581],{"class":253},[240,80357,53260],{"class":436},[240,80359,440],{"class":257},[240,80361,53265],{"class":443},[240,80363,447],{"class":257},[240,80365,80366],{"class":242,"line":261},[240,80367,4353],{"emptyLinePlaceholder":2051},[240,80369,80370,80372,80374],{"class":242,"line":277},[240,80371,431],{"class":257},[240,80373,53278],{"class":253},[240,80375,447],{"class":257},[240,80377,80378,80380,80382,80384,80386,80388],{"class":242,"line":294},[240,80379,452],{"class":257},[240,80381,53288],{"class":253},[240,80383,53291],{"class":436},[240,80385,440],{"class":257},[240,80387,53296],{"class":443},[240,80389,447],{"class":257},[240,80391,80392,80394,80396,80398,80400,80402,80404,80406,80408],{"class":242,"line":309},[240,80393,452],{"class":257},[240,80395,53288],{"class":253},[240,80397,16869],{"class":436},[240,80399,440],{"class":257},[240,80401,53335],{"class":443},[240,80403,53315],{"class":436},[240,80405,440],{"class":257},[240,80407,53342],{"class":443},[240,80409,447],{"class":257},[240,80411,80412,80414,80416,80418,80420],{"class":242,"line":529},[240,80413,452],{"class":257},[240,80415,53351],{"class":253},[240,80417,53354],{"class":257},[240,80419,53351],{"class":253},[240,80421,447],{"class":257},[240,80423,80424,80426,80428],{"class":242,"line":549},[240,80425,452],{"class":257},[240,80427,2019],{"class":253},[240,80429,447],{"class":257},[240,80431,80432,80434],{"class":242,"line":569},[240,80433,8354],{"class":253},[240,80435,258],{"class":257},[240,80437,80438,80440,80442,80444],{"class":242,"line":589},[240,80439,56630],{"class":264},[240,80441,268],{"class":257},[240,80443,1274],{"class":264},[240,80445,274],{"class":257},[240,80447,80448,80450,80452,80454],{"class":242,"line":715},[240,80449,56641],{"class":264},[240,80451,268],{"class":257},[240,80453,1274],{"class":264},[240,80455,274],{"class":257},[240,80457,80458,80460,80462,80464],{"class":242,"line":727},[240,80459,74511],{"class":264},[240,80461,268],{"class":257},[240,80463,62436],{"class":264},[240,80465,274],{"class":257},[240,80467,80468],{"class":242,"line":1730},[240,80469,4140],{"class":257},[240,80471,80472],{"class":242,"line":3582},[240,80473,4353],{"emptyLinePlaceholder":2051},[240,80475,80476,80478],{"class":242,"line":3596},[240,80477,64047],{"class":436},[240,80479,258],{"class":257},[240,80481,80482,80484,80486,80489,80491],{"class":242,"line":3601},[240,80483,56705],{"class":264},[240,80485,268],{"class":257},[240,80487,80488],{"class":264},"990",[240,80490,289],{"class":288},[240,80492,274],{"class":257},[240,80494,80495,80497,80499,80501,80503],{"class":242,"line":3607},[240,80496,56641],{"class":264},[240,80498,268],{"class":257},[240,80500,1274],{"class":264},[240,80502,53498],{"class":264},[240,80504,274],{"class":257},[240,80506,80507,80509,80511,80513],{"class":242,"line":3628},[240,80508,56943],{"class":264},[240,80510,268],{"class":257},[240,80512,53420],{"class":264},[240,80514,274],{"class":257},[240,80516,80517,80520,80522,80525],{"class":242,"line":3633},[240,80518,80519],{"class":264},"      flex-wrap",[240,80521,268],{"class":257},[240,80523,80524],{"class":264},"wrap",[240,80526,274],{"class":257},[240,80528,80529],{"class":242,"line":3647},[240,80530,4140],{"class":257},[240,80532,80533],{"class":242,"line":3652},[240,80534,4353],{"emptyLinePlaceholder":2051},[240,80536,80537,80540],{"class":242,"line":3681},[240,80538,80539],{"class":436},"    .item",[240,80541,258],{"class":257},[240,80543,80544,80546,80548,80551,80553],{"class":242,"line":3686},[240,80545,56705],{"class":264},[240,80547,268],{"class":257},[240,80549,80550],{"class":264},"240",[240,80552,289],{"class":288},[240,80554,274],{"class":257},[240,80556,80557,80559,80561,80563,80565],{"class":242,"line":3703},[240,80558,63924],{"class":264},[240,80560,268],{"class":257},[240,80562,2546],{"class":264},[240,80564,289],{"class":288},[240,80566,274],{"class":257},[240,80568,80569,80571,80573,80575,80577,80580,80582],{"class":242,"line":3708},[240,80570,56630],{"class":264},[240,80572,268],{"class":257},[240,80574,1000],{"class":264},[240,80576,289],{"class":288},[240,80578,80579],{"class":264}," 30",[240,80581,289],{"class":288},[240,80583,274],{"class":257},[240,80585,80586,80588,80590,80592,80595,80598,80600],{"class":242,"line":3713},[240,80587,63784],{"class":264},[240,80589,268],{"class":257},[240,80591,30067],{"class":264},[240,80593,80594],{"class":264}," ease",[240,80596,80597],{"class":264}," .5",[240,80599,2793],{"class":288},[240,80601,274],{"class":257},[240,80603,80604,80607,80609,80611,80613],{"class":242,"line":3718},[240,80605,80606],{"class":264},"      margin-bottom",[240,80608,268],{"class":257},[240,80610,1000],{"class":264},[240,80612,289],{"class":288},[240,80614,274],{"class":257},[240,80616,80617],{"class":242,"line":3732},[240,80618,4140],{"class":257},[240,80620,80621],{"class":242,"line":3737},[240,80622,4353],{"emptyLinePlaceholder":2051},[240,80624,80625,80628,80630,80633],{"class":242,"line":4530},[240,80626,80627],{"class":436},"    .item:nth-child",[240,80629,789],{"class":257},[240,80631,80632],{"class":264},"4n",[240,80634,14392],{"class":257},[240,80636,80637,80639,80641,80643],{"class":242,"line":4544},[240,80638,63924],{"class":264},[240,80640,268],{"class":257},[240,80642,1274],{"class":264},[240,80644,274],{"class":257},[240,80646,80647],{"class":242,"line":4552},[240,80648,4140],{"class":257},[240,80650,80651],{"class":242,"line":4557},[240,80652,4353],{"emptyLinePlaceholder":2051},[240,80654,80655,80658],{"class":242,"line":4563},[240,80656,80657],{"class":436},"    .item:hover",[240,80659,258],{"class":257},[240,80661,80662,80665,80667,80669,80671,80673,80675,80677,80679,80682,80684,80686,80688,80690,80692,80694,80696,80699],{"class":242,"line":4569},[240,80663,80664],{"class":264},"      box-shadow",[240,80666,268],{"class":257},[240,80668,1274],{"class":264},[240,80670,289],{"class":288},[240,80672,6045],{"class":264},[240,80674,289],{"class":288},[240,80676,4101],{"class":264},[240,80678,289],{"class":288},[240,80680,80681],{"class":264}," rgba",[240,80683,789],{"class":257},[240,80685,1274],{"class":264},[240,80687,1277],{"class":257},[240,80689,1274],{"class":264},[240,80691,1277],{"class":257},[240,80693,1274],{"class":264},[240,80695,1277],{"class":257},[240,80697,80698],{"class":264},".2",[240,80700,796],{"class":257},[240,80702,80703,80706,80708,80711,80713,80715,80717,80720,80722,80724,80726],{"class":242,"line":4574},[240,80704,80705],{"class":264},"      transform",[240,80707,268],{"class":257},[240,80709,80710],{"class":264},"translate3d",[240,80712,789],{"class":257},[240,80714,1274],{"class":264},[240,80716,1277],{"class":257},[240,80718,80719],{"class":264},"-4",[240,80721,289],{"class":288},[240,80723,1277],{"class":257},[240,80725,1274],{"class":264},[240,80727,796],{"class":257},[240,80729,80730,80732,80734,80736],{"class":242,"line":9899},[240,80731,63949],{"class":264},[240,80733,268],{"class":257},[240,80735,63954],{"class":264},[240,80737,274],{"class":257},[240,80739,80740],{"class":242,"line":9923},[240,80741,4140],{"class":257},[240,80743,80744],{"class":242,"line":9928},[240,80745,4353],{"emptyLinePlaceholder":2051},[240,80747,80748,80750,80752],{"class":242,"line":9934},[240,80749,80539],{"class":436},[240,80751,57548],{"class":253},[240,80753,258],{"class":257},[240,80755,80756,80758,80760,80762,80764],{"class":242,"line":9961},[240,80757,56705],{"class":264},[240,80759,268],{"class":257},[240,80761,285],{"class":264},[240,80763,2429],{"class":288},[240,80765,274],{"class":257},[240,80767,80768],{"class":242,"line":9966},[240,80769,4140],{"class":257},[240,80771,80772],{"class":242,"line":9972},[240,80773,4353],{"emptyLinePlaceholder":2051},[240,80775,80776,80778,80780],{"class":242,"line":9984},[240,80777,80539],{"class":436},[240,80779,64228],{"class":436},[240,80781,258],{"class":257},[240,80783,80784,80786,80788,80790,80792],{"class":242,"line":9996},[240,80785,56856],{"class":264},[240,80787,268],{"class":257},[240,80789,2748],{"class":264},[240,80791,289],{"class":288},[240,80793,274],{"class":257},[240,80795,80796,80798,80800,80802,80804],{"class":242,"line":10008},[240,80797,80606],{"class":264},[240,80799,268],{"class":257},[240,80801,2546],{"class":264},[240,80803,289],{"class":288},[240,80805,274],{"class":257},[240,80807,80808,80810,80812,80815],{"class":242,"line":11667},[240,80809,59349],{"class":264},[240,80811,268],{"class":257},[240,80813,80814],{"class":264},"#666",[240,80816,274],{"class":257},[240,80818,80819],{"class":242,"line":11692},[240,80820,4140],{"class":257},[240,80822,80823],{"class":242,"line":11715},[240,80824,4353],{"emptyLinePlaceholder":2051},[240,80826,80827,80829,80832],{"class":242,"line":11739},[240,80828,80539],{"class":436},[240,80830,80831],{"class":436}," .price",[240,80833,258],{"class":257},[240,80835,80836,80838,80840,80842,80844],{"class":242,"line":11744},[240,80837,56856],{"class":264},[240,80839,268],{"class":257},[240,80841,2847],{"class":264},[240,80843,289],{"class":288},[240,80845,274],{"class":257},[240,80847,80848,80850,80852,80855],{"class":242,"line":11749},[240,80849,59349],{"class":264},[240,80851,268],{"class":257},[240,80853,80854],{"class":264},"firebrick",[240,80856,274],{"class":257},[240,80858,80859],{"class":242,"line":11754},[240,80860,4140],{"class":257},[240,80862,80863],{"class":242,"line":11763},[240,80864,4353],{"emptyLinePlaceholder":2051},[240,80866,80867,80869,80872],{"class":242,"line":11768},[240,80868,80539],{"class":436},[240,80870,80871],{"class":436}," .price::before",[240,80873,258],{"class":257},[240,80875,80876,80879,80881,80884],{"class":242,"line":11774},[240,80877,80878],{"class":264},"      content",[240,80880,268],{"class":257},[240,80882,80883],{"class":443},"'￥'",[240,80885,274],{"class":257},[240,80887,80888,80890,80892,80894,80896],{"class":242,"line":11795},[240,80889,56856],{"class":264},[240,80891,268],{"class":257},[240,80893,2648],{"class":264},[240,80895,289],{"class":288},[240,80897,274],{"class":257},[240,80899,80900],{"class":242,"line":11801},[240,80901,4140],{"class":257},[240,80903,80904],{"class":242,"line":11815},[240,80905,4353],{"emptyLinePlaceholder":2051},[240,80907,80908,80911],{"class":242,"line":11821},[240,80909,80910],{"class":436},"    .filter",[240,80912,258],{"class":257},[240,80914,80915,80917,80919,80921],{"class":242,"line":11848},[240,80916,56943],{"class":264},[240,80918,268],{"class":257},[240,80920,53420],{"class":264},[240,80922,274],{"class":257},[240,80924,80925,80927,80929,80931,80933],{"class":242,"line":11857},[240,80926,56705],{"class":264},[240,80928,268],{"class":257},[240,80930,80488],{"class":264},[240,80932,289],{"class":288},[240,80934,274],{"class":257},[240,80936,80937,80939,80941,80943,80945],{"class":242,"line":11863},[240,80938,56641],{"class":264},[240,80940,268],{"class":257},[240,80942,1274],{"class":264},[240,80944,53498],{"class":264},[240,80946,274],{"class":257},[240,80948,80949,80951,80953,80955,80957,80959],{"class":242,"line":11871},[240,80950,56630],{"class":264},[240,80952,268],{"class":257},[240,80954,2754],{"class":264},[240,80956,289],{"class":288},[240,80958,80579],{"class":264},[240,80960,80961],{"class":288},"px\n",[240,80963,80964],{"class":242,"line":11876},[240,80965,4140],{"class":257},[240,80967,80968],{"class":242,"line":18552},[240,80969,4353],{"emptyLinePlaceholder":2051},[240,80971,80972,80974,80976],{"class":242,"line":18558},[240,80973,80910],{"class":436},[240,80975,609],{"class":253},[240,80977,258],{"class":257},[240,80979,80980,80982,80984,80986,80988,80990,80992],{"class":242,"line":18581},[240,80981,56630],{"class":264},[240,80983,268],{"class":257},[240,80985,2546],{"class":264},[240,80987,289],{"class":288},[240,80989,10901],{"class":264},[240,80991,289],{"class":288},[240,80993,274],{"class":257},[240,80995,80996,80998,81000,81002],{"class":242,"line":18587},[240,80997,63647],{"class":264},[240,80999,268],{"class":257},[240,81001,63742],{"class":264},[240,81003,274],{"class":257},[240,81005,81006,81008,81010,81012],{"class":242,"line":18610},[240,81007,59349],{"class":264},[240,81009,268],{"class":257},[240,81011,80814],{"class":264},[240,81013,274],{"class":257},[240,81015,81016,81018,81020,81022],{"class":242,"line":18624},[240,81017,65893],{"class":264},[240,81019,268],{"class":257},[240,81021,826],{"class":264},[240,81023,274],{"class":257},[240,81025,81026,81028,81030,81032,81034],{"class":242,"line":18644},[240,81027,63674],{"class":264},[240,81029,268],{"class":257},[240,81031,1000],{"class":264},[240,81033,289],{"class":288},[240,81035,274],{"class":257},[240,81037,81038],{"class":242,"line":18650},[240,81039,4140],{"class":257},[240,81041,81042],{"class":242,"line":18661},[240,81043,4353],{"emptyLinePlaceholder":2051},[240,81045,81046,81048,81050,81052],{"class":242,"line":18684},[240,81047,80910],{"class":436},[240,81049,609],{"class":253},[240,81051,63824],{"class":436},[240,81053,258],{"class":257},[240,81055,81056,81058,81060,81063],{"class":242,"line":18706},[240,81057,56818],{"class":264},[240,81059,268],{"class":257},[240,81061,81062],{"class":264},"#05943c",[240,81064,274],{"class":257},[240,81066,81067,81069,81071,81073],{"class":242,"line":18711},[240,81068,59349],{"class":264},[240,81070,268],{"class":257},[240,81072,683],{"class":264},[240,81074,274],{"class":257},[240,81076,81077],{"class":242,"line":18717},[240,81078,4140],{"class":257},[240,81080,81081,81083,81085],{"class":242,"line":18731},[240,81082,54353],{"class":257},[240,81084,2019],{"class":253},[240,81086,447],{"class":257},[240,81088,81089,81091,81093],{"class":242,"line":18744},[240,81090,592],{"class":257},[240,81092,53278],{"class":253},[240,81094,447],{"class":257},[240,81096,81097],{"class":242,"line":18749},[240,81098,4353],{"emptyLinePlaceholder":2051},[240,81100,81101,81103,81105],{"class":242,"line":18763},[240,81102,431],{"class":257},[240,81104,53738],{"class":253},[240,81106,447],{"class":257},[240,81108,81109,81111,81113,81115,81117,81120],{"class":242,"line":18768},[240,81110,452],{"class":257},[240,81112,330],{"class":253},[240,81114,437],{"class":436},[240,81116,440],{"class":257},[240,81118,81119],{"class":443},"\"filter\"",[240,81121,447],{"class":257},[240,81123,81124,81126,81128,81130,81132,81134,81137,81139,81141,81144,81146],{"class":242,"line":18774},[240,81125,53285],{"class":257},[240,81127,254],{"class":253},[240,81129,457],{"class":436},[240,81131,440],{"class":257},[240,81133,462],{"class":443},[240,81135,81136],{"class":436}," data-index",[240,81138,440],{"class":257},[240,81140,5630],{"class":443},[240,81142,81143],{"class":257},">0-100元\u003C\u002F",[240,81145,254],{"class":253},[240,81147,447],{"class":257},[240,81149,81150,81152,81154,81156,81158,81160,81162,81164,81166,81169,81171],{"class":242,"line":18779},[240,81151,53285],{"class":257},[240,81153,254],{"class":253},[240,81155,457],{"class":436},[240,81157,440],{"class":257},[240,81159,462],{"class":443},[240,81161,81136],{"class":436},[240,81163,440],{"class":257},[240,81165,5653],{"class":443},[240,81167,81168],{"class":257},">100-300元\u003C\u002F",[240,81170,254],{"class":253},[240,81172,447],{"class":257},[240,81174,81175,81177,81179,81181,81183,81185,81187,81189,81191,81194,81196],{"class":242,"line":18793},[240,81176,53285],{"class":257},[240,81178,254],{"class":253},[240,81180,457],{"class":436},[240,81182,440],{"class":257},[240,81184,462],{"class":443},[240,81186,81136],{"class":436},[240,81188,440],{"class":257},[240,81190,5666],{"class":443},[240,81192,81193],{"class":257},">300元以上\u003C\u002F",[240,81195,254],{"class":253},[240,81197,447],{"class":257},[240,81199,81200,81202,81204,81206,81208,81210,81213,81215],{"class":242,"line":18798},[240,81201,53285],{"class":257},[240,81203,254],{"class":253},[240,81205,457],{"class":436},[240,81207,440],{"class":257},[240,81209,462],{"class":443},[240,81211,81212],{"class":257},">全部区间\u003C\u002F",[240,81214,254],{"class":253},[240,81216,447],{"class":257},[240,81218,81219,81221,81223],{"class":242,"line":18803},[240,81220,54353],{"class":257},[240,81222,330],{"class":253},[240,81224,447],{"class":257},[240,81226,81227,81229,81231,81233,81235,81237],{"class":242,"line":18817},[240,81228,452],{"class":257},[240,81230,330],{"class":253},[240,81232,437],{"class":436},[240,81234,440],{"class":257},[240,81236,64531],{"class":443},[240,81238,447],{"class":257},[240,81240,81241],{"class":242,"line":18829},[240,81242,81243],{"class":246},"    \u003C!-- \u003Cdiv class=\"item\">\n",[240,81245,81246],{"class":242,"line":18834},[240,81247,81248],{"class":246},"      \u003Cimg src=\"\" alt=\"\">\n",[240,81250,81251],{"class":242,"line":18847},[240,81252,81253],{"class":246},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[240,81255,81256],{"class":242,"line":18852},[240,81257,81258],{"class":246},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[240,81260,81261],{"class":242,"line":18857},[240,81262,81263],{"class":246},"    \u003C\u002Fdiv> -->\n",[240,81265,81266,81268,81270],{"class":242,"line":18862},[240,81267,54353],{"class":257},[240,81269,330],{"class":253},[240,81271,447],{"class":257},[240,81273,81274,81276,81278],{"class":242,"line":18875},[240,81275,452],{"class":257},[240,81277,53751],{"class":253},[240,81279,447],{"class":257},[240,81281,81282],{"class":242,"line":18880},[240,81283,81284],{"class":246},"    \u002F\u002F 2. 初始化数据\n",[240,81286,81287,81289,81292,81294],{"class":242,"line":34579},[240,81288,13172],{"class":288},[240,81290,81291],{"class":264}," goodsList",[240,81293,15514],{"class":288},[240,81295,57380],{"class":257},[240,81297,81298],{"class":242,"line":34585},[240,81299,81300],{"class":257},"      {\n",[240,81302,81303,81306,81309],{"class":242,"line":34591},[240,81304,81305],{"class":257},"        id: ",[240,81307,81308],{"class":443},"'4001172'",[240,81310,33412],{"class":257},[240,81312,81313,81316,81319],{"class":242,"line":34597},[240,81314,81315],{"class":257},"        name: ",[240,81317,81318],{"class":443},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[240,81320,33412],{"class":257},[240,81322,81323,81326,81329],{"class":242,"line":34603},[240,81324,81325],{"class":257},"        price: ",[240,81327,81328],{"class":443},"'289.00'",[240,81330,33412],{"class":257},[240,81332,81333,81336,81339],{"class":242,"line":34614},[240,81334,81335],{"class":257},"        picture: ",[240,81337,81338],{"class":443},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[240,81340,33412],{"class":257},[240,81342,81343],{"class":242,"line":34620},[240,81344,79806],{"class":257},[240,81346,81347],{"class":242,"line":34640},[240,81348,81300],{"class":257},[240,81350,81351,81353,81356],{"class":242,"line":34646},[240,81352,81305],{"class":257},[240,81354,81355],{"class":443},"'4001594'",[240,81357,33412],{"class":257},[240,81359,81360,81362,81365],{"class":242,"line":34657},[240,81361,81315],{"class":257},[240,81363,81364],{"class":443},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[240,81366,33412],{"class":257},[240,81368,81369,81371,81374],{"class":242,"line":34663},[240,81370,81325],{"class":257},[240,81372,81373],{"class":443},"'288.00'",[240,81375,33412],{"class":257},[240,81377,81378,81380,81383],{"class":242,"line":34669},[240,81379,81335],{"class":257},[240,81381,81382],{"class":443},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[240,81384,33412],{"class":257},[240,81386,81387],{"class":242,"line":34675},[240,81388,79806],{"class":257},[240,81390,81391],{"class":242,"line":34681},[240,81392,81300],{"class":257},[240,81394,81395,81397,81400],{"class":242,"line":34687},[240,81396,81305],{"class":257},[240,81398,81399],{"class":443},"'4001009'",[240,81401,33412],{"class":257},[240,81403,81404,81406,81409],{"class":242,"line":34693},[240,81405,81315],{"class":257},[240,81407,81408],{"class":443},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[240,81410,33412],{"class":257},[240,81412,81413,81415,81418],{"class":242,"line":34699},[240,81414,81325],{"class":257},[240,81416,81417],{"class":443},"'109.00'",[240,81419,33412],{"class":257},[240,81421,81422,81424,81427],{"class":242,"line":34719},[240,81423,81335],{"class":257},[240,81425,81426],{"class":443},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[240,81428,33412],{"class":257},[240,81430,81431],{"class":242,"line":34725},[240,81432,79806],{"class":257},[240,81434,81435],{"class":242,"line":34741},[240,81436,81300],{"class":257},[240,81438,81439,81441,81444],{"class":242,"line":34747},[240,81440,81305],{"class":257},[240,81442,81443],{"class":443},"'4001874'",[240,81445,33412],{"class":257},[240,81447,81448,81450,81453],{"class":242,"line":34761},[240,81449,81315],{"class":257},[240,81451,81452],{"class":443},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[240,81454,33412],{"class":257},[240,81456,81457,81459,81462],{"class":242,"line":34767},[240,81458,81325],{"class":257},[240,81460,81461],{"class":443},"'488.00'",[240,81463,33412],{"class":257},[240,81465,81466,81468,81471],{"class":242,"line":34782},[240,81467,81335],{"class":257},[240,81469,81470],{"class":443},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[240,81472,33412],{"class":257},[240,81474,81475],{"class":242,"line":34788},[240,81476,79806],{"class":257},[240,81478,81479],{"class":242,"line":34797},[240,81480,81300],{"class":257},[240,81482,81483,81485,81488],{"class":242,"line":34803},[240,81484,81305],{"class":257},[240,81486,81487],{"class":443},"'4001649'",[240,81489,33412],{"class":257},[240,81491,81492,81494,81497],{"class":242,"line":34812},[240,81493,81315],{"class":257},[240,81495,81496],{"class":443},"'大师监制龙泉青瓷茶叶罐'",[240,81498,33412],{"class":257},[240,81500,81501,81503,81506],{"class":242,"line":34818},[240,81502,81325],{"class":257},[240,81504,81505],{"class":443},"'139.00'",[240,81507,33412],{"class":257},[240,81509,81510,81512,81515],{"class":242,"line":34824},[240,81511,81335],{"class":257},[240,81513,81514],{"class":443},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[240,81516,33412],{"class":257},[240,81518,81519],{"class":242,"line":34833},[240,81520,79806],{"class":257},[240,81522,81523],{"class":242,"line":34839},[240,81524,81300],{"class":257},[240,81526,81527,81529,81532],{"class":242,"line":34850},[240,81528,81305],{"class":257},[240,81530,81531],{"class":443},"'3997185'",[240,81533,33412],{"class":257},[240,81535,81536,81538,81541],{"class":242,"line":34856},[240,81537,81315],{"class":257},[240,81539,81540],{"class":443},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[240,81542,33412],{"class":257},[240,81544,81545,81547,81550],{"class":242,"line":34875},[240,81546,81325],{"class":257},[240,81548,81549],{"class":443},"'108.00'",[240,81551,33412],{"class":257},[240,81553,81554,81556,81559],{"class":242,"line":34881},[240,81555,81335],{"class":257},[240,81557,81558],{"class":443},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[240,81560,33412],{"class":257},[240,81562,81563],{"class":242,"line":34892},[240,81564,79806],{"class":257},[240,81566,81567],{"class":242,"line":34898},[240,81568,81300],{"class":257},[240,81570,81571,81573,81576],{"class":242,"line":34918},[240,81572,81305],{"class":257},[240,81574,81575],{"class":443},"'3997403'",[240,81577,33412],{"class":257},[240,81579,81580,81582,81585],{"class":242,"line":34934},[240,81581,81315],{"class":257},[240,81583,81584],{"class":443},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[240,81586,33412],{"class":257},[240,81588,81589,81591,81594],{"class":242,"line":34940},[240,81590,81325],{"class":257},[240,81592,81593],{"class":443},"'100.00'",[240,81595,33412],{"class":257},[240,81597,81598,81600,81603],{"class":242,"line":34954},[240,81599,81335],{"class":257},[240,81601,81602],{"class":443},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[240,81604,33412],{"class":257},[240,81606,81607],{"class":242,"line":34960},[240,81608,79806],{"class":257},[240,81610,81611],{"class":242,"line":34966},[240,81612,81300],{"class":257},[240,81614,81615,81617,81620],{"class":242,"line":34977},[240,81616,81305],{"class":257},[240,81618,81619],{"class":443},"'3998274'",[240,81621,33412],{"class":257},[240,81623,81624,81626,81629],{"class":242,"line":34983},[240,81625,81315],{"class":257},[240,81627,81628],{"class":443},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[240,81630,33412],{"class":257},[240,81632,81633,81635,81637],{"class":242,"line":34989},[240,81634,81325],{"class":257},[240,81636,81505],{"class":443},[240,81638,33412],{"class":257},[240,81640,81641,81643,81646],{"class":242,"line":34999},[240,81642,81335],{"class":257},[240,81644,81645],{"class":443},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[240,81647,33412],{"class":257},[240,81649,81650],{"class":242,"line":35005},[240,81651,79806],{"class":257},[240,81653,81654],{"class":242,"line":35016},[240,81655,55045],{"class":257},[240,81657,81658],{"class":242,"line":35022},[240,81659,4353],{"emptyLinePlaceholder":2051},[240,81661,81662],{"class":242,"line":35032},[240,81663,81664],{"class":246},"    \u002F\u002F 1.渲染函数\n",[240,81666,81667,81669,81671,81673,81675],{"class":242,"line":35037},[240,81668,72007],{"class":288},[240,81670,72010],{"class":436},[240,81672,789],{"class":257},[240,81674,5832],{"class":792},[240,81676,14392],{"class":257},[240,81678,81679],{"class":242,"line":35043},[240,81680,81681],{"class":246},"      \u002F\u002F 声明空字符串\n",[240,81683,81684,81687,81690,81692],{"class":242,"line":35092},[240,81685,81686],{"class":288},"      let",[240,81688,81689],{"class":257}," str ",[240,81691,440],{"class":288},[240,81693,72027],{"class":443},[240,81695,81696],{"class":242,"line":35139},[240,81697,72032],{"class":246},[240,81699,81700,81702,81705,81707,81710,81713],{"class":242,"line":35144},[240,81701,59938],{"class":257},[240,81703,81704],{"class":436},"forEach",[240,81706,789],{"class":257},[240,81708,81709],{"class":792},"item",[240,81711,81712],{"class":288}," =>",[240,81714,258],{"class":257},[240,81716,81717,81719,81722,81725,81727,81730,81732,81735,81738,81740],{"class":242,"line":35150},[240,81718,63196],{"class":288},[240,81720,81721],{"class":257}," { ",[240,81723,81724],{"class":264},"name",[240,81726,1277],{"class":257},[240,81728,81729],{"class":264},"price",[240,81731,1277],{"class":257},[240,81733,81734],{"class":264},"picture",[240,81736,81737],{"class":257}," } ",[240,81739,440],{"class":288},[240,81741,81742],{"class":257}," item\n",[240,81744,81745,81748,81750],{"class":242,"line":35169},[240,81746,81747],{"class":257},"        str ",[240,81749,11428],{"class":288},[240,81751,72091],{"class":443},[240,81753,81754],{"class":242,"line":35175},[240,81755,81756],{"class":443},"          \u003Cdiv class=\"item\">\n",[240,81758,81759,81762,81764],{"class":242,"line":35195},[240,81760,81761],{"class":443},"            \u003Cimg src=\"${",[240,81763,81734],{"class":257},[240,81765,81766],{"class":443},"}\" alt=\"\">\n",[240,81768,81769,81772,81774],{"class":242,"line":35201},[240,81770,81771],{"class":443},"            \u003Cp class=\"name\">${",[240,81773,81724],{"class":257},[240,81775,81776],{"class":443},"}\u003C\u002Fp>\n",[240,81778,81779,81782,81784],{"class":242,"line":35207},[240,81780,81781],{"class":443},"            \u003Cp class=\"price\">${",[240,81783,81729],{"class":257},[240,81785,81776],{"class":443},[240,81787,81788],{"class":242,"line":35217},[240,81789,81790],{"class":443},"          \u003C\u002Fdiv>\n",[240,81792,81793],{"class":242,"line":35222},[240,81794,81795],{"class":443},"        `\n",[240,81797,81798],{"class":242,"line":35228},[240,81799,66738],{"class":257},[240,81801,81802],{"class":242,"line":35244},[240,81803,81804],{"class":246},"      \u002F\u002F 追加给List\n",[240,81806,81807,81809,81811,81813,81816,81818,81820],{"class":242,"line":35289},[240,81808,57704],{"class":257},[240,81810,56334],{"class":436},[240,81812,789],{"class":257},[240,81814,81815],{"class":443},"'.list'",[240,81817,76164],{"class":257},[240,81819,440],{"class":288},[240,81821,75900],{"class":257},[240,81823,81824],{"class":242,"line":35295},[240,81825,4140],{"class":257},[240,81827,81828],{"class":242,"line":35301},[240,81829,81830],{"class":246},"    \u002F\u002F 页面一打开就需要渲染\n",[240,81832,81833,81836],{"class":242,"line":35307},[240,81834,81835],{"class":436},"    render",[240,81837,81838],{"class":257},"(goodsList)\n",[240,81840,81841],{"class":242,"line":35318},[240,81842,81843],{"class":246},"    \u002F\u002F 2.过滤筛选\n",[240,81845,81846,81848,81850,81852,81855,81857,81859,81861,81863,81865,81867,81869],{"class":242,"line":35324},[240,81847,54343],{"class":257},[240,81849,56334],{"class":436},[240,81851,789],{"class":257},[240,81853,81854],{"class":443},"'.filter'",[240,81856,32772],{"class":257},[240,81858,59744],{"class":436},[240,81860,789],{"class":257},[240,81862,59749],{"class":443},[240,81864,1277],{"class":257},[240,81866,2192],{"class":792},[240,81868,81712],{"class":288},[240,81870,258],{"class":257},[240,81872,81873],{"class":242,"line":35330},[240,81874,81875],{"class":246},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[240,81877,81878,81880,81882,81885,81887,81889,81891,81893],{"class":242,"line":35336},[240,81879,60159],{"class":288},[240,81881,81721],{"class":257},[240,81883,81884],{"class":264},"tagName",[240,81886,1277],{"class":257},[240,81888,33483],{"class":264},[240,81890,81737],{"class":257},[240,81892,440],{"class":288},[240,81894,81895],{"class":257}," e.target\n",[240,81897,81898],{"class":242,"line":35354},[240,81899,81900],{"class":246},"      \u002F\u002F 判断\n",[240,81902,81903,81905,81907,81909,81911],{"class":242,"line":35368},[240,81904,56415],{"class":288},[240,81906,68957],{"class":257},[240,81908,56421],{"class":288},[240,81910,70179],{"class":443},[240,81912,14392],{"class":257},[240,81914,81915],{"class":242,"line":35377},[240,81916,81917],{"class":246},"        \u002F\u002F console.log(11)\n",[240,81919,81920],{"class":242,"line":35386},[240,81921,81922],{"class":246},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[240,81924,81925],{"class":242,"line":35395},[240,81926,81927],{"class":246},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[240,81929,81930,81932,81934,81936],{"class":242,"line":35404},[240,81931,53768],{"class":288},[240,81933,53771],{"class":257},[240,81935,440],{"class":288},[240,81937,81938],{"class":257}," goodsList\n",[240,81940,81941,81943,81946,81948,81951],{"class":242,"line":35410},[240,81942,4450],{"class":288},[240,81944,81945],{"class":257}," (dataset.index ",[240,81947,56421],{"class":288},[240,81949,81950],{"class":443}," '1'",[240,81952,14392],{"class":257},[240,81954,81955,81958,81960,81963,81966,81968,81970,81972,81975,81977,81979,81982,81984,81986,81988],{"class":242,"line":35416},[240,81956,81957],{"class":257},"          arr ",[240,81959,440],{"class":288},[240,81961,81962],{"class":257}," goodsList.",[240,81964,81965],{"class":436},"filter",[240,81967,789],{"class":257},[240,81969,81709],{"class":792},[240,81971,81712],{"class":288},[240,81973,81974],{"class":257}," item.price ",[240,81976,3664],{"class":288},[240,81978,6045],{"class":264},[240,81980,81981],{"class":288}," &&",[240,81983,81974],{"class":257},[240,81985,3545],{"class":288},[240,81987,7705],{"class":264},[240,81989,2129],{"class":257},[240,81991,81992,81995,81997,81999,82001,82003,82006],{"class":242,"line":35424},[240,81993,81994],{"class":257},"        } ",[240,81996,3655],{"class":288},[240,81998,3658],{"class":288},[240,82000,81945],{"class":257},[240,82002,56421],{"class":288},[240,82004,82005],{"class":443}," '2'",[240,82007,14392],{"class":257},[240,82009,82010,82012,82014,82016,82018,82020,82022,82024,82026,82028,82030,82032,82034,82036,82039],{"class":242,"line":35429},[240,82011,81957],{"class":257},[240,82013,440],{"class":288},[240,82015,81962],{"class":257},[240,82017,81965],{"class":436},[240,82019,789],{"class":257},[240,82021,81709],{"class":792},[240,82023,81712],{"class":288},[240,82025,81974],{"class":257},[240,82027,3664],{"class":288},[240,82029,7705],{"class":264},[240,82031,81981],{"class":288},[240,82033,81974],{"class":257},[240,82035,3545],{"class":288},[240,82037,82038],{"class":264}," 300",[240,82040,2129],{"class":257},[240,82042,82043,82045,82047,82049,82051,82053,82056],{"class":242,"line":35435},[240,82044,81994],{"class":257},[240,82046,3655],{"class":288},[240,82048,3658],{"class":288},[240,82050,81945],{"class":257},[240,82052,56421],{"class":288},[240,82054,82055],{"class":443}," '3'",[240,82057,14392],{"class":257},[240,82059,82060,82062,82064,82066,82068,82070,82072,82074,82076,82078,82080],{"class":242,"line":35446},[240,82061,81957],{"class":257},[240,82063,440],{"class":288},[240,82065,81962],{"class":257},[240,82067,81965],{"class":436},[240,82069,789],{"class":257},[240,82071,81709],{"class":792},[240,82073,81712],{"class":288},[240,82075,81974],{"class":257},[240,82077,3664],{"class":288},[240,82079,82038],{"class":264},[240,82081,2129],{"class":257},[240,82083,82084],{"class":242,"line":35452},[240,82085,4482],{"class":257},[240,82087,82088],{"class":242,"line":35472},[240,82089,82090],{"class":246},"        \u002F\u002F 渲染函数\n",[240,82092,82093,82095],{"class":242,"line":35478},[240,82094,72331],{"class":436},[240,82096,54348],{"class":257},[240,82098,82099],{"class":242,"line":35484},[240,82100,54334],{"class":257},[240,82102,82103],{"class":242,"line":35490},[240,82104,4353],{"emptyLinePlaceholder":2051},[240,82106,82107],{"class":242,"line":35507},[240,82108,35407],{"class":257},[240,82110,82111,82113,82115],{"class":242,"line":35513},[240,82112,54353],{"class":257},[240,82114,53751],{"class":253},[240,82116,447],{"class":257},[240,82118,82119,82121,82123],{"class":242,"line":35519},[240,82120,592],{"class":257},[240,82122,53738],{"class":253},[240,82124,447],{"class":257},[240,82126,82127],{"class":242,"line":35525},[240,82128,4353],{"emptyLinePlaceholder":2051},[240,82130,82131,82133,82135],{"class":242,"line":35531},[240,82132,592],{"class":257},[240,82134,52581],{"class":253},[240,82136,447],{"class":257},[14,82138,82140],{"id":82139},"_410-深入了解对象","4.10 深入了解对象",[32,82142,82144],{"id":82143},"_4101-创建对象","4.10.1 创建对象",[19,82146,82147],{},[219,82148],{"alt":236,"src":82149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[19,82151,82152],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[32,82154,82156],{"id":82155},"_4102-构造函数","4.10.2 构造函数",[19,82158,82159,82162],{},[68,82160,82161],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[19,82164,82165,82168],{},[68,82166,82167],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[231,82170,82172],{"className":52579,"code":82171,"language":52581,"meta":236,"style":236},"\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",[23,82173,82174,82182,82187,82208,82221,82233,82245,82249,82254,82281,82286,82313],{"__ignoreMap":236},[240,82175,82176,82178,82180],{"class":242,"line":243},[240,82177,431],{"class":257},[240,82179,53751],{"class":253},[240,82181,447],{"class":257},[240,82183,82184],{"class":242,"line":250},[240,82185,82186],{"class":246},"\u002F\u002F例：\n",[240,82188,82189,82191,82194,82196,82198,82200,82202,82204,82206],{"class":242,"line":261},[240,82190,56384],{"class":288},[240,82192,82193],{"class":436}," Pig",[240,82195,789],{"class":257},[240,82197,81724],{"class":792},[240,82199,2479],{"class":257},[240,82201,72144],{"class":792},[240,82203,2479],{"class":257},[240,82205,72161],{"class":792},[240,82207,14392],{"class":257},[240,82209,82210,82213,82216,82218],{"class":242,"line":277},[240,82211,82212],{"class":264},"    this",[240,82214,82215],{"class":257},".name",[240,82217,440],{"class":288},[240,82219,82220],{"class":257},"name\n",[240,82222,82223,82225,82228,82230],{"class":242,"line":294},[240,82224,82212],{"class":264},[240,82226,82227],{"class":257},".age",[240,82229,440],{"class":288},[240,82231,82232],{"class":257},"age\n",[240,82234,82235,82237,82240,82242],{"class":242,"line":309},[240,82236,82212],{"class":264},[240,82238,82239],{"class":257},".gender",[240,82241,440],{"class":288},[240,82243,82244],{"class":257},"gender    \n",[240,82246,82247],{"class":242,"line":529},[240,82248,312],{"class":257},[240,82250,82251],{"class":242,"line":549},[240,82252,82253],{"class":246},"\u002F\u002F创建佩奇对象\n",[240,82255,82256,82258,82261,82263,82265,82267,82270,82272,82274,82276,82279],{"class":242,"line":569},[240,82257,8743],{"class":288},[240,82259,82260],{"class":264}," Peppa",[240,82262,13668],{"class":288},[240,82264,82193],{"class":436},[240,82266,789],{"class":257},[240,82268,82269],{"class":443},"'佩奇'",[240,82271,2479],{"class":257},[240,82273,2445],{"class":264},[240,82275,2479],{"class":257},[240,82277,82278],{"class":443},"'女'",[240,82280,2129],{"class":257},[240,82282,82283],{"class":242,"line":589},[240,82284,82285],{"class":246},"\u002F\u002F创建乔治对象\n",[240,82287,82288,82290,82293,82295,82297,82299,82302,82304,82306,82308,82311],{"class":242,"line":715},[240,82289,8743],{"class":288},[240,82291,82292],{"class":264}," George",[240,82294,13668],{"class":288},[240,82296,82193],{"class":436},[240,82298,789],{"class":257},[240,82300,82301],{"class":443},"'乔治'",[240,82303,2479],{"class":257},[240,82305,1692],{"class":264},[240,82307,2479],{"class":257},[240,82309,82310],{"class":443},"'男'",[240,82312,2129],{"class":257},[240,82314,82315,82317,82319],{"class":242,"line":727},[240,82316,592],{"class":257},[240,82318,53751],{"class":253},[240,82320,447],{"class":257},[19,82322,82323],{},[219,82324],{"alt":236,"src":82325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[19,82327,82328],{},[219,82329],{"alt":236,"src":82330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[19,82332,82333],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[19,82335,82336],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[19,82338,82339],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[19,82341,82342],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[19,82344,82345],{},"这里用等号是因为：对象.属性=值",[19,82347,82348],{},"①利用对象字面量创建对象",[19,82350,82351],{},"const o={",[19,82353,82354],{},"name:'pink'",[19,82356,82357],{},"} ②利用new Object创建对象",[19,82359,82360],{},"const o=new Object({name:'pink'})",[19,82362,82363],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[19,82365,82366],{},"构造函数创建对象的执行过程：",[19,82368,82369],{},[219,82370],{"alt":236,"src":82371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[32,82373,82375],{"id":82374},"_4103-实例成员","4.10.3 实例成员",[19,82377,82378],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[1826,82380,82381,82384,82387],{},[1829,82382,82383],{},"实例对象的属性和方法即为实例成员",[1829,82385,82386],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[1829,82388,82389],{},"构造函数创建的实例对象彼此独立互不影响",[32,82391,82393],{"id":82392},"_4104-静态成员","4.10.4 静态成员",[19,82395,82396],{},[219,82397],{"alt":236,"src":82398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[19,82400,82401],{},"静态成员有Date.now() Math.PI Math.random()",[19,82403,82404],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[19,82406,82407],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[19,82409,82410],{},"function Pig(name) n {",[19,82412,82413],{},"this.name=name",[19,82415,3040],{},[19,82417,82418],{},"Pig.eyes=2",[19,82420,82421],{},"Pig.sayHai=function () { console.log(this) }",[19,82423,82424],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[19,82426,82427],{},"console.log(Pig.eyes) \u002F\u002F2",[19,82429,13283],{},[1826,82431,82432,82435,82438,82441,82444],{},[1829,82433,82434],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[1829,82436,82437],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[1829,82439,82440],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[1829,82442,82443],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[1829,82445,82446],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[19,82448,82449],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[32,82451,82453],{"id":82452},"_4105-内置构造函数","4.10.5 内置构造函数",[19,82455,82456],{},"内置构造函数包含：",[19,82458,82459],{},[219,82460],{"alt":236,"src":82461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[19,82463,82464],{},[219,82465],{"alt":236,"src":82466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[19,82468,82469],{},"这些基本数据类型，js对他们进行了包装",[53751,82471,82472],{},"\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",[23945,82474,82476],{"id":82475},"_41051-object","4.10.5.1 Object",[19,82478,82479],{},"Object 是内置的构造函数，用于创建普通对象",[19,82481,82482],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[231,82484,82486],{"className":52579,"code":82485,"language":52581,"meta":236,"style":236},"const user=new Object({name:'小明',age:15})\n",[23,82487,82488],{"__ignoreMap":236},[240,82489,82490],{"class":242,"line":243},[240,82491,82485],{"class":257},[19,82493,82494],{},"三个常用的静态方法：",[24857,82496,82498],{"id":82497},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[19,82500,82501],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[19,82503,82504],{},[219,82505],{"alt":236,"src":82506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[19,82508,82509],{},[219,82510],{"alt":236,"src":82511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[231,82513,82515],{"className":55003,"code":82514,"language":55005,"meta":236,"style":236},"\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",[23,82516,82517,82525,82533,82538,82543,82548,82553,82558,82563,82571],{"__ignoreMap":236},[240,82518,82519,82521,82523],{"class":242,"line":243},[240,82520,431],{"class":257},[240,82522,53738],{"class":253},[240,82524,447],{"class":257},[240,82526,82527,82529,82531],{"class":242,"line":250},[240,82528,452],{"class":257},[240,82530,53751],{"class":253},[240,82532,447],{"class":257},[240,82534,82535],{"class":242,"line":261},[240,82536,82537],{"class":257},"    const o = { name: 'pink', age: 6 }\n",[240,82539,82540],{"class":242,"line":277},[240,82541,82542],{"class":257},"    \u002F\u002F 获得所有属性名\n",[240,82544,82545],{"class":242,"line":294},[240,82546,82547],{"class":257},"    const arr = Object.keys(o)\n",[240,82549,82550],{"class":242,"line":309},[240,82551,82552],{"class":257},"    console.log(arr)\n",[240,82554,82555],{"class":242,"line":529},[240,82556,82557],{"class":257},"    \u002F\u002F 获得所有属性值\n",[240,82559,82560],{"class":242,"line":549},[240,82561,82562],{"class":257},"    console.log(Object.values(o))\n",[240,82564,82565,82567,82569],{"class":242,"line":569},[240,82566,54353],{"class":257},[240,82568,53751],{"class":253},[240,82570,447],{"class":257},[240,82572,82573,82575,82577],{"class":242,"line":589},[240,82574,592],{"class":257},[240,82576,53738],{"class":253},[240,82578,447],{"class":257},[24857,82580,82582],{"id":82581},"_410512-object-assign","4.10.5.1.2 Object. assign",[19,82584,82585],{},"Object.assign(oo,o)",[19,82587,82588],{},"后的东西添加给前 是追加",[19,82590,82591],{},[219,82592],{"alt":236,"src":82593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[19,82595,82596],{},[219,82597],{"alt":236,"src":82598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[231,82600,82602],{"className":55003,"code":82601,"language":55005,"meta":236,"style":236},"\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",[23,82603,82604,82612,82620,82624,82628,82632,82636,82640,82644,82649,82654,82659,82664,82669,82677],{"__ignoreMap":236},[240,82605,82606,82608,82610],{"class":242,"line":243},[240,82607,431],{"class":257},[240,82609,53738],{"class":253},[240,82611,447],{"class":257},[240,82613,82614,82616,82618],{"class":242,"line":250},[240,82615,452],{"class":257},[240,82617,53751],{"class":253},[240,82619,447],{"class":257},[240,82621,82622],{"class":242,"line":261},[240,82623,82537],{"class":257},[240,82625,82626],{"class":242,"line":277},[240,82627,82542],{"class":257},[240,82629,82630],{"class":242,"line":294},[240,82631,82547],{"class":257},[240,82633,82634],{"class":242,"line":309},[240,82635,82552],{"class":257},[240,82637,82638],{"class":242,"line":529},[240,82639,82557],{"class":257},[240,82641,82642],{"class":242,"line":549},[240,82643,82562],{"class":257},[240,82645,82646],{"class":242,"line":569},[240,82647,82648],{"class":257},"    const oo = {}\n",[240,82650,82651],{"class":242,"line":589},[240,82652,82653],{"class":257},"    Object.assign(oo, o)\n",[240,82655,82656],{"class":242,"line":715},[240,82657,82658],{"class":257},"    console.log(oo)\n",[240,82660,82661],{"class":242,"line":727},[240,82662,82663],{"class":257},"    Object.assign(o, { gender: '女' })\n",[240,82665,82666],{"class":242,"line":1730},[240,82667,82668],{"class":257},"    console.log(o)\n",[240,82670,82671,82673,82675],{"class":242,"line":3582},[240,82672,54353],{"class":257},[240,82674,53751],{"class":253},[240,82676,447],{"class":257},[240,82678,82679,82681,82683],{"class":242,"line":3596},[240,82680,592],{"class":257},[240,82682,53738],{"class":253},[240,82684,447],{"class":257},[19,82686,82687],{},[219,82688],{"alt":236,"src":82689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[23945,82691,82693],{"id":82692},"_41052-array","4.10.5.2 Array",[19,82695,82696],{},"Array 是内置的构造函数，用于创建数组",[19,82698,82699],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[231,82701,82703],{"className":52579,"code":82702,"language":52581,"meta":236,"style":236},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[23,82704,82705,82710],{"__ignoreMap":236},[240,82706,82707],{"class":242,"line":243},[240,82708,82709],{"class":257},"const arr=new Array(3,5)\n",[240,82711,82712],{"class":242,"line":250},[240,82713,82714],{"class":257},"console.log(arr)  \u002F\u002F[3,5]\n",[19,82716,82717],{},"Array的实例方法，这个方法是实例成员",[19,82719,82720],{},[219,82721],{"alt":236,"src":82722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[24857,82724,82726],{"id":82725},"_410521-reduce","4.10.5.2.1 reduce",[19,82728,82729],{},[219,82730],{"alt":236,"src":82731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[231,82733,82735],{"className":55003,"code":82734,"language":55005,"meta":236,"style":236},"\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",[23,82736,82737,82745,82753,82758,82763,82768,82773,82777,82782,82787,82792,82796,82801,82806,82810,82815,82820,82825,82833],{"__ignoreMap":236},[240,82738,82739,82741,82743],{"class":242,"line":243},[240,82740,431],{"class":257},[240,82742,53738],{"class":253},[240,82744,447],{"class":257},[240,82746,82747,82749,82751],{"class":242,"line":250},[240,82748,452],{"class":257},[240,82750,53751],{"class":253},[240,82752,447],{"class":257},[240,82754,82755],{"class":242,"line":261},[240,82756,82757],{"class":257},"    const arr = [1, 5, 8]\n",[240,82759,82760],{"class":242,"line":277},[240,82761,82762],{"class":257},"    \u002F\u002F 1.没有初始值\n",[240,82764,82765],{"class":242,"line":294},[240,82766,82767],{"class":257},"    const total = arr.reduce(function (prev, current) {\n",[240,82769,82770],{"class":242,"line":309},[240,82771,82772],{"class":257},"      return prev + current\n",[240,82774,82775],{"class":242,"line":529},[240,82776,35407],{"class":257},[240,82778,82779],{"class":242,"line":549},[240,82780,82781],{"class":257},"    console.log(total)   \u002F\u002F14\n",[240,82783,82784],{"class":242,"line":569},[240,82785,82786],{"class":257},"    \u002F\u002F 2.有初始值\n",[240,82788,82789],{"class":242,"line":589},[240,82790,82791],{"class":257},"    const total1 = arr.reduce(function (prev, current) {\n",[240,82793,82794],{"class":242,"line":715},[240,82795,82772],{"class":257},[240,82797,82798],{"class":242,"line":727},[240,82799,82800],{"class":257},"    }, 10)\n",[240,82802,82803],{"class":242,"line":1730},[240,82804,82805],{"class":257},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[240,82807,82808],{"class":242,"line":3582},[240,82809,4353],{"emptyLinePlaceholder":2051},[240,82811,82812],{"class":242,"line":3596},[240,82813,82814],{"class":257},"    \u002F\u002F 3.箭头函数写法\n",[240,82816,82817],{"class":242,"line":3601},[240,82818,82819],{"class":257},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[240,82821,82822],{"class":242,"line":3607},[240,82823,82824],{"class":257},"    console.log(total2)   \u002F\u002F24\n",[240,82826,82827,82829,82831],{"class":242,"line":3628},[240,82828,54353],{"class":257},[240,82830,53751],{"class":253},[240,82832,447],{"class":257},[240,82834,82835,82837,82839],{"class":242,"line":3633},[240,82836,592],{"class":257},[240,82838,53738],{"class":253},[240,82840,447],{"class":257},[19,82842,82843],{},"执行过程：",[1826,82845,82846,82849,82852],{},[1829,82847,82848],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[1829,82850,82851],{},"每一次循环，把返回值给作为下一次循环的上一次值",[1829,82853,82854],{},"如果有起始值，则起始值作为上一次值",[231,82856,82858],{"className":55003,"code":82857,"language":55005,"meta":236,"style":236},"\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",[23,82859,82860,82868,82876,82880,82884,82888,82892,82896,82900,82905,82910,82915,82920,82925,82929,82933,82937,82941,82945,82949,82954,82958,82963,82967,82972,82977,82981,82985,82989,82997],{"__ignoreMap":236},[240,82861,82862,82864,82866],{"class":242,"line":243},[240,82863,431],{"class":257},[240,82865,53738],{"class":253},[240,82867,447],{"class":257},[240,82869,82870,82872,82874],{"class":242,"line":250},[240,82871,452],{"class":257},[240,82873,53751],{"class":253},[240,82875,447],{"class":257},[240,82877,82878],{"class":242,"line":261},[240,82879,82757],{"class":257},[240,82881,82882],{"class":242,"line":277},[240,82883,82762],{"class":257},[240,82885,82886],{"class":242,"line":294},[240,82887,82767],{"class":257},[240,82889,82890],{"class":242,"line":309},[240,82891,82772],{"class":257},[240,82893,82894],{"class":242,"line":529},[240,82895,35407],{"class":257},[240,82897,82898],{"class":242,"line":549},[240,82899,82781],{"class":257},[240,82901,82902],{"class":242,"line":569},[240,82903,82904],{"class":257},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[240,82906,82907],{"class":242,"line":589},[240,82908,82909],{"class":257},"    \u002F\u002F     1              5                    6\n",[240,82911,82912],{"class":242,"line":715},[240,82913,82914],{"class":257},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[240,82916,82917],{"class":242,"line":727},[240,82918,82919],{"class":257},"    \u002F\u002F     6              8                    14\n",[240,82921,82922],{"class":242,"line":1730},[240,82923,82924],{"class":257},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[240,82926,82927],{"class":242,"line":3582},[240,82928,82786],{"class":257},[240,82930,82931],{"class":242,"line":3596},[240,82932,82791],{"class":257},[240,82934,82935],{"class":242,"line":3601},[240,82936,82772],{"class":257},[240,82938,82939],{"class":242,"line":3607},[240,82940,82800],{"class":257},[240,82942,82943],{"class":242,"line":3628},[240,82944,82805],{"class":257},[240,82946,82947],{"class":242,"line":3633},[240,82948,82904],{"class":257},[240,82950,82951],{"class":242,"line":3647},[240,82952,82953],{"class":257},"    \u002F\u002F     10             1                     11\n",[240,82955,82956],{"class":242,"line":3652},[240,82957,82914],{"class":257},[240,82959,82960],{"class":242,"line":3681},[240,82961,82962],{"class":257},"    \u002F\u002F     11             5                    16\n",[240,82964,82965],{"class":242,"line":3686},[240,82966,82914],{"class":257},[240,82968,82969],{"class":242,"line":3703},[240,82970,82971],{"class":257},"    \u002F\u002F     16             8                    24\n",[240,82973,82974],{"class":242,"line":3708},[240,82975,82976],{"class":257},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[240,82978,82979],{"class":242,"line":3713},[240,82980,82814],{"class":257},[240,82982,82983],{"class":242,"line":3718},[240,82984,82819],{"class":257},[240,82986,82987],{"class":242,"line":3732},[240,82988,82824],{"class":257},[240,82990,82991,82993,82995],{"class":242,"line":3737},[240,82992,54353],{"class":257},[240,82994,53751],{"class":253},[240,82996,447],{"class":257},[240,82998,82999,83001,83003],{"class":242,"line":4530},[240,83000,592],{"class":257},[240,83002,53738],{"class":253},[240,83004,447],{"class":257},[24857,83006,83008],{"id":83007},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[19,83010,83011],{},[219,83012],{"alt":236,"src":83013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[231,83015,83017],{"className":55003,"code":83016,"language":55005,"meta":236,"style":236},"\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",[23,83018,83019,83027,83035,83040,83045,83050,83055,83059,83064,83069,83074,83079,83084,83089,83093,83098,83102,83107,83115],{"__ignoreMap":236},[240,83020,83021,83023,83025],{"class":242,"line":243},[240,83022,431],{"class":257},[240,83024,53738],{"class":253},[240,83026,447],{"class":257},[240,83028,83029,83031,83033],{"class":242,"line":250},[240,83030,452],{"class":257},[240,83032,53751],{"class":253},[240,83034,447],{"class":257},[240,83036,83037],{"class":242,"line":261},[240,83038,83039],{"class":257},"    const arr = [\n",[240,83041,83042],{"class":242,"line":277},[240,83043,83044],{"class":257},"      { name: '张三', salary: 10000 },\n",[240,83046,83047],{"class":242,"line":294},[240,83048,83049],{"class":257},"      { name: '李四', salary: 10000 },\n",[240,83051,83052],{"class":242,"line":309},[240,83053,83054],{"class":257},"      { name: '王五', salary: 10000 }\n",[240,83056,83057],{"class":242,"line":529},[240,83058,55045],{"class":257},[240,83060,83061],{"class":242,"line":549},[240,83062,83063],{"class":257},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[240,83065,83066],{"class":242,"line":569},[240,83067,83068],{"class":257},"    \u002F\u002F prev是累计值\n",[240,83070,83071],{"class":242,"line":589},[240,83072,83073],{"class":257},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[240,83075,83076],{"class":242,"line":715},[240,83077,83078],{"class":257},"    console.log(total)\n",[240,83080,83081],{"class":242,"line":727},[240,83082,83083],{"class":257},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[240,83085,83086],{"class":242,"line":1730},[240,83087,83088],{"class":257},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[240,83090,83091],{"class":242,"line":3582},[240,83092,83083],{"class":257},[240,83094,83095],{"class":242,"line":3596},[240,83096,83097],{"class":257},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[240,83099,83100],{"class":242,"line":3601},[240,83101,83083],{"class":257},[240,83103,83104],{"class":242,"line":3607},[240,83105,83106],{"class":257},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[240,83108,83109,83111,83113],{"class":242,"line":3628},[240,83110,54353],{"class":257},[240,83112,53751],{"class":253},[240,83114,447],{"class":257},[240,83116,83117,83119,83121],{"class":242,"line":3633},[240,83118,592],{"class":257},[240,83120,53738],{"class":253},[240,83122,447],{"class":257},[24857,83124,83126],{"id":83125},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[19,83128,83129],{},[219,83130],{"alt":236,"src":83131},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[19,83133,83134],{},[219,83135],{"alt":236,"src":83136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[1826,83138,83139],{},[1829,83140,83141],{},"find()",[19,83143,83144],{},"循环查找，找到第一个就ok",[19,83146,83147],{},[254,83148,83151],{"href":83149,"rel":83150},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[25811],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[231,83153,83155],{"className":52579,"code":83154,"language":52581,"meta":236,"style":236},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[23,83156,83157,83162,83167],{"__ignoreMap":236},[240,83158,83159],{"class":242,"line":243},[240,83160,83161],{"class":257},"const array1 = [5, 12, 8, 130, 44]\n",[240,83163,83164],{"class":242,"line":250},[240,83165,83166],{"class":257},"const found = array1.find((element) => element > 10)\n",[240,83168,83169],{"class":242,"line":261},[240,83170,83171],{"class":257},"console.log(found)  \u002F\u002F12\n",[19,83173,83174,83176,83177,83182,83183,83186,83187,83189,83190,83195,83196,83198,83199,83201,83202,83204,83205],{},[23,83175,83141],{}," 方法是一个",[254,83178,83181],{"href":83179,"rel":83180},"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",[25811],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[23,83184,83185],{},"callbackFn"," 函数，直到 ",[23,83188,83185],{}," 返回一个",[254,83191,83194],{"href":83192,"rel":83193},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[25811],"真值","。然后 ",[23,83197,83141],{}," 返回该元素并停止迭代数组。如果 ",[23,83200,83185],{}," 从未返回真值，则 ",[23,83203,83141],{}," 返回 ",[23,83206,83207],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[231,83209,83211],{"className":55003,"code":83210,"language":55005,"meta":236,"style":236},"\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",[23,83212,83213,83221,83229,83234,83239,83244,83248,83253,83258,83262,83267,83272,83276,83280,83285,83290,83294,83298,83303,83308,83313,83318,83323,83327,83332,83337,83342,83347,83351,83356,83364],{"__ignoreMap":236},[240,83214,83215,83217,83219],{"class":242,"line":243},[240,83216,431],{"class":257},[240,83218,53738],{"class":253},[240,83220,447],{"class":257},[240,83222,83223,83225,83227],{"class":242,"line":250},[240,83224,452],{"class":257},[240,83226,53751],{"class":253},[240,83228,447],{"class":257},[240,83230,83231],{"class":242,"line":261},[240,83232,83233],{"class":257},"    const arr = ['red', 'blue', 'green']\n",[240,83235,83236],{"class":242,"line":277},[240,83237,83238],{"class":257},"    const found = arr.find(item => item === 'pink')\n",[240,83240,83241],{"class":242,"line":294},[240,83242,83243],{"class":257},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[240,83245,83246],{"class":242,"line":309},[240,83247,4353],{"emptyLinePlaceholder":2051},[240,83249,83250],{"class":242,"line":529},[240,83251,83252],{"class":257},"    \u002F\u002F 使用场景，用于查找数据\n",[240,83254,83255],{"class":242,"line":549},[240,83256,83257],{"class":257},"    const arr1 = [\n",[240,83259,83260],{"class":242,"line":569},[240,83261,81300],{"class":257},[240,83263,83264],{"class":242,"line":589},[240,83265,83266],{"class":257},"        name: '小米',\n",[240,83268,83269],{"class":242,"line":715},[240,83270,83271],{"class":257},"        price: 1999\n",[240,83273,83274],{"class":242,"line":727},[240,83275,79806],{"class":257},[240,83277,83278],{"class":242,"line":1730},[240,83279,81300],{"class":257},[240,83281,83282],{"class":242,"line":3582},[240,83283,83284],{"class":257},"        name: '华为',\n",[240,83286,83287],{"class":242,"line":3596},[240,83288,83289],{"class":257},"        price: 3999\n",[240,83291,83292],{"class":242,"line":3601},[240,83293,54334],{"class":257},[240,83295,83296],{"class":242,"line":3607},[240,83297,55045],{"class":257},[240,83299,83300],{"class":242,"line":3628},[240,83301,83302],{"class":257},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[240,83304,83305],{"class":242,"line":3633},[240,83306,83307],{"class":257},"    \u002F\u002F const found1 = arr1.find(item => {\n",[240,83309,83310],{"class":242,"line":3647},[240,83311,83312],{"class":257},"    \u002F\u002F   if (item.name === '小米') {\n",[240,83314,83315],{"class":242,"line":3652},[240,83316,83317],{"class":257},"    \u002F\u002F     return item\n",[240,83319,83320],{"class":242,"line":3681},[240,83321,83322],{"class":257},"    \u002F\u002F   }\n",[240,83324,83325],{"class":242,"line":3686},[240,83326,65213],{"class":257},[240,83328,83329],{"class":242,"line":3703},[240,83330,83331],{"class":257},"    \u002F\u002F 另一种写法\n",[240,83333,83334],{"class":242,"line":3708},[240,83335,83336],{"class":257},"    const found1 = arr1.find(item => {\n",[240,83338,83339],{"class":242,"line":3713},[240,83340,83341],{"class":257},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[240,83343,83344],{"class":242,"line":3718},[240,83345,83346],{"class":257},"      return item.name = '小米'\n",[240,83348,83349],{"class":242,"line":3732},[240,83350,35407],{"class":257},[240,83352,83353],{"class":242,"line":3737},[240,83354,83355],{"class":257},"    console.log(found1)\n",[240,83357,83358,83360,83362],{"class":242,"line":4530},[240,83359,54353],{"class":257},[240,83361,53751],{"class":253},[240,83363,447],{"class":257},[240,83365,83366,83368,83370],{"class":242,"line":4544},[240,83367,592],{"class":257},[240,83369,53738],{"class":253},[240,83371,447],{"class":257},[19,83373,83374],{},[219,83375],{"alt":236,"src":83376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[19,83378,83379],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[1826,83381,83382],{"start":250},[1829,83383,83384],{},"every()返回的是布尔值",[19,83386,83387],{},[254,83388,83391],{"href":83389,"rel":83390},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[25811],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[19,83393,83394],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[19,83396,83397],{},"some是只有有一个就没问题",[19,83399,83400],{},"every是必须全是才行",[231,83402,83406],{"className":83403,"code":83404,"language":83405,"meta":236,"style":236},"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",[23,83407,83408,83424,83438,83442,83451],{"__ignoreMap":236},[240,83409,83410,83412,83415,83417,83419,83422],{"class":242,"line":243},[240,83411,56384],{"class":288},[240,83413,83414],{"class":257}," isBigEnough(element, ",[240,83416,75973],{"class":288},[240,83418,1277],{"class":257},[240,83420,83421],{"class":288},"array",[240,83423,14392],{"class":257},[240,83425,83426,83429,83432,83434,83436],{"class":242,"line":250},[240,83427,83428],{"class":288},"  return",[240,83430,83431],{"class":257}," element ",[240,83433,3664],{"class":288},[240,83435,3991],{"class":264},[240,83437,274],{"class":257},[240,83439,83440],{"class":242,"line":261},[240,83441,312],{"class":257},[240,83443,83444,83447,83449],{"class":242,"line":277},[240,83445,83446],{"class":257},"[12, 5, 8, 130, 44].every(isBigEnough); ",[240,83448,35275],{"class":288},[240,83450,56451],{"class":257},[240,83452,83453,83456,83458],{"class":242,"line":294},[240,83454,83455],{"class":257},"[12, 54, 18, 130, 44].every(isBigEnough); ",[240,83457,35275],{"class":288},[240,83459,59871],{"class":257},[231,83461,83463],{"className":55003,"code":83462,"language":55005,"meta":236,"style":236},"\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",[23,83464,83465,83473,83481,83486,83490,83495,83500,83508],{"__ignoreMap":236},[240,83466,83467,83469,83471],{"class":242,"line":243},[240,83468,431],{"class":257},[240,83470,53738],{"class":253},[240,83472,447],{"class":257},[240,83474,83475,83477,83479],{"class":242,"line":250},[240,83476,452],{"class":257},[240,83478,53751],{"class":253},[240,83480,447],{"class":257},[240,83482,83483],{"class":242,"line":261},[240,83484,83485],{"class":257},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[240,83487,83488],{"class":242,"line":277},[240,83489,80236],{"class":257},[240,83491,83492],{"class":242,"line":294},[240,83493,83494],{"class":257},"    const flag = arr.every(item => item >= 10)\n",[240,83496,83497],{"class":242,"line":309},[240,83498,83499],{"class":257},"    console.log(flag)    \u002F\u002Ftrue\n",[240,83501,83502,83504,83506],{"class":242,"line":529},[240,83503,54353],{"class":257},[240,83505,53751],{"class":253},[240,83507,447],{"class":257},[240,83509,83510,83512,83514],{"class":242,"line":549},[240,83511,592],{"class":257},[240,83513,53738],{"class":253},[240,83515,447],{"class":257},[231,83517,83519],{"className":55003,"code":83518,"language":55005,"meta":236,"style":236},"\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",[23,83520,83521,83529,83537,83541,83546,83551,83556,83564],{"__ignoreMap":236},[240,83522,83523,83525,83527],{"class":242,"line":243},[240,83524,431],{"class":257},[240,83526,53738],{"class":253},[240,83528,447],{"class":257},[240,83530,83531,83533,83535],{"class":242,"line":250},[240,83532,452],{"class":257},[240,83534,53751],{"class":253},[240,83536,447],{"class":257},[240,83538,83539],{"class":242,"line":261},[240,83540,83485],{"class":257},[240,83542,83543],{"class":242,"line":277},[240,83544,83545],{"class":257},"    const arr = [10, 0, 5]\n",[240,83547,83548],{"class":242,"line":294},[240,83549,83550],{"class":257},"    const flag = arr.some(item => item >= 10)\n",[240,83552,83553],{"class":242,"line":309},[240,83554,83555],{"class":257},"    console.log(flag)   \u002F\u002Ftrue\n",[240,83557,83558,83560,83562],{"class":242,"line":529},[240,83559,54353],{"class":257},[240,83561,53751],{"class":253},[240,83563,447],{"class":257},[240,83565,83566,83568,83570],{"class":242,"line":549},[240,83567,592],{"class":257},[240,83569,53738],{"class":253},[240,83571,447],{"class":257},[24857,83573,83575],{"id":83574},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[19,83577,83578],{},[219,83579],{"alt":236,"src":83580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[231,83582,83584],{"className":52579,"code":83583,"language":52581,"meta":236,"style":236},"\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",[23,83585,83586,83596,83610,83614,83622,83636,83656,83668,83676,83683,83695,83707,83719,83731,83741,83751,83755,83763,83771,83775,83783,83795,83803,83825,83830,83835,83868,83876,83884,83888],{"__ignoreMap":236},[240,83587,83588,83590,83592,83594],{"class":242,"line":243},[240,83589,53243],{"class":257},[240,83591,53246],{"class":253},[240,83593,53249],{"class":436},[240,83595,447],{"class":257},[240,83597,83598,83600,83602,83604,83606,83608],{"class":242,"line":250},[240,83599,431],{"class":257},[240,83601,52581],{"class":253},[240,83603,53260],{"class":436},[240,83605,440],{"class":257},[240,83607,53265],{"class":443},[240,83609,447],{"class":257},[240,83611,83612],{"class":242,"line":261},[240,83613,4353],{"emptyLinePlaceholder":2051},[240,83615,83616,83618,83620],{"class":242,"line":277},[240,83617,431],{"class":257},[240,83619,53278],{"class":253},[240,83621,447],{"class":257},[240,83623,83624,83626,83628,83630,83632,83634],{"class":242,"line":294},[240,83625,452],{"class":257},[240,83627,53288],{"class":253},[240,83629,53291],{"class":436},[240,83631,440],{"class":257},[240,83633,53296],{"class":443},[240,83635,447],{"class":257},[240,83637,83638,83640,83642,83644,83646,83648,83650,83652,83654],{"class":242,"line":309},[240,83639,452],{"class":257},[240,83641,53288],{"class":253},[240,83643,16869],{"class":436},[240,83645,440],{"class":257},[240,83647,53335],{"class":443},[240,83649,53315],{"class":436},[240,83651,440],{"class":257},[240,83653,53342],{"class":443},[240,83655,447],{"class":257},[240,83657,83658,83660,83662,83664,83666],{"class":242,"line":529},[240,83659,452],{"class":257},[240,83661,53351],{"class":253},[240,83663,53354],{"class":257},[240,83665,53351],{"class":253},[240,83667,447],{"class":257},[240,83669,83670,83672,83674],{"class":242,"line":549},[240,83671,452],{"class":257},[240,83673,2019],{"class":253},[240,83675,447],{"class":257},[240,83677,83678,83681],{"class":242,"line":569},[240,83679,83680],{"class":253},"    div",[240,83682,258],{"class":257},[240,83684,83685,83687,83689,83691,83693],{"class":242,"line":589},[240,83686,56705],{"class":264},[240,83688,268],{"class":257},[240,83690,3676],{"class":264},[240,83692,289],{"class":288},[240,83694,274],{"class":257},[240,83696,83697,83699,83701,83703,83705],{"class":242,"line":715},[240,83698,56719],{"class":264},[240,83700,268],{"class":257},[240,83702,302],{"class":264},[240,83704,289],{"class":288},[240,83706,274],{"class":257},[240,83708,83709,83711,83713,83715,83717],{"class":242,"line":727},[240,83710,59292],{"class":264},[240,83712,268],{"class":257},[240,83714,302],{"class":264},[240,83716,289],{"class":288},[240,83718,274],{"class":257},[240,83720,83721,83723,83725,83727,83729],{"class":242,"line":1730},[240,83722,67056],{"class":264},[240,83724,268],{"class":257},[240,83726,2597],{"class":264},[240,83728,289],{"class":288},[240,83730,274],{"class":257},[240,83732,83733,83735,83737,83739],{"class":242,"line":3582},[240,83734,59219],{"class":264},[240,83736,268],{"class":257},[240,83738,971],{"class":264},[240,83740,274],{"class":257},[240,83742,83743,83745,83747,83749],{"class":242,"line":3596},[240,83744,56818],{"class":264},[240,83746,268],{"class":257},[240,83748,1924],{"class":264},[240,83750,274],{"class":257},[240,83752,83753],{"class":242,"line":3601},[240,83754,4140],{"class":257},[240,83756,83757,83759,83761],{"class":242,"line":3607},[240,83758,54353],{"class":257},[240,83760,2019],{"class":253},[240,83762,447],{"class":257},[240,83764,83765,83767,83769],{"class":242,"line":3628},[240,83766,592],{"class":257},[240,83768,53278],{"class":253},[240,83770,447],{"class":257},[240,83772,83773],{"class":242,"line":3633},[240,83774,4353],{"emptyLinePlaceholder":2051},[240,83776,83777,83779,83781],{"class":242,"line":3647},[240,83778,431],{"class":257},[240,83780,53738],{"class":253},[240,83782,447],{"class":257},[240,83784,83785,83787,83789,83791,83793],{"class":242,"line":3652},[240,83786,452],{"class":257},[240,83788,330],{"class":253},[240,83790,57247],{"class":257},[240,83792,330],{"class":253},[240,83794,447],{"class":257},[240,83796,83797,83799,83801],{"class":242,"line":3681},[240,83798,452],{"class":257},[240,83800,53751],{"class":253},[240,83802,447],{"class":257},[240,83804,83805,83807,83810,83812,83815,83818,83820,83823],{"class":242,"line":3686},[240,83806,13172],{"class":288},[240,83808,83809],{"class":264}," spec",[240,83811,15514],{"class":288},[240,83813,83814],{"class":257}," { size: ",[240,83816,83817],{"class":443},"'40cm*40cm'",[240,83819,57397],{"class":257},[240,83821,83822],{"class":443},"'黑色'",[240,83824,57537],{"class":257},[240,83826,83827],{"class":242,"line":3703},[240,83828,83829],{"class":246},"    \u002F\u002F const arr = Object.values(spec)\n",[240,83831,83832],{"class":242,"line":3708},[240,83833,83834],{"class":246},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[240,83836,83837,83839,83841,83843,83846,83848,83850,83853,83856,83859,83861,83863,83866],{"class":242,"line":3713},[240,83838,54343],{"class":257},[240,83840,56334],{"class":436},[240,83842,789],{"class":257},[240,83844,83845],{"class":443},"'div'",[240,83847,76164],{"class":257},[240,83849,440],{"class":288},[240,83851,83852],{"class":257}," Object.",[240,83854,83855],{"class":436},"values",[240,83857,83858],{"class":257},"(spec).",[240,83860,76138],{"class":436},[240,83862,789],{"class":257},[240,83864,83865],{"class":443},"'\u002F'",[240,83867,2129],{"class":257},[240,83869,83870,83872,83874],{"class":242,"line":3718},[240,83871,54353],{"class":257},[240,83873,53751],{"class":253},[240,83875,447],{"class":257},[240,83877,83878,83880,83882],{"class":242,"line":3732},[240,83879,592],{"class":257},[240,83881,53738],{"class":253},[240,83883,447],{"class":257},[240,83885,83886],{"class":242,"line":3737},[240,83887,4353],{"emptyLinePlaceholder":2051},[240,83889,83890,83892,83894],{"class":242,"line":4530},[240,83891,592],{"class":257},[240,83893,52581],{"class":253},[240,83895,447],{"class":257},[19,83897,83898],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[24857,83900,83902],{"id":83901},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[19,83904,83905],{},"静态方法，将伪数组转换为真数组",[19,83907,83908],{},[219,83909],{"alt":236,"src":83910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[231,83912,83914],{"className":55003,"code":83913,"language":55005,"meta":236,"style":236},"\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",[23,83915,83916,83924,83932,83944,83956,83968,83976,83984,83989,83994,83999,84004,84012],{"__ignoreMap":236},[240,83917,83918,83920,83922],{"class":242,"line":243},[240,83919,431],{"class":257},[240,83921,53738],{"class":253},[240,83923,447],{"class":257},[240,83925,83926,83928,83930],{"class":242,"line":250},[240,83927,452],{"class":257},[240,83929,3100],{"class":253},[240,83931,447],{"class":257},[240,83933,83934,83936,83938,83940,83942],{"class":242,"line":261},[240,83935,53285],{"class":257},[240,83937,1829],{"class":253},[240,83939,57247],{"class":257},[240,83941,1829],{"class":253},[240,83943,447],{"class":257},[240,83945,83946,83948,83950,83952,83954],{"class":242,"line":277},[240,83947,53285],{"class":257},[240,83949,1829],{"class":253},[240,83951,57247],{"class":257},[240,83953,1829],{"class":253},[240,83955,447],{"class":257},[240,83957,83958,83960,83962,83964,83966],{"class":242,"line":294},[240,83959,53285],{"class":257},[240,83961,1829],{"class":253},[240,83963,57247],{"class":257},[240,83965,1829],{"class":253},[240,83967,447],{"class":257},[240,83969,83970,83972,83974],{"class":242,"line":309},[240,83971,54353],{"class":257},[240,83973,3100],{"class":253},[240,83975,447],{"class":257},[240,83977,83978,83980,83982],{"class":242,"line":529},[240,83979,452],{"class":257},[240,83981,53751],{"class":253},[240,83983,447],{"class":257},[240,83985,83986],{"class":242,"line":549},[240,83987,83988],{"class":257},"    const lis = document.querySelectorAll('li')\n",[240,83990,83991],{"class":242,"line":569},[240,83992,83993],{"class":257},"    const liss = Array.from(lis)\n",[240,83995,83996],{"class":242,"line":589},[240,83997,83998],{"class":257},"    liss.pop()\n",[240,84000,84001],{"class":242,"line":715},[240,84002,84003],{"class":257},"    console.log(liss)\n",[240,84005,84006,84008,84010],{"class":242,"line":727},[240,84007,54353],{"class":257},[240,84009,53751],{"class":253},[240,84011,447],{"class":257},[240,84013,84014,84016,84018],{"class":242,"line":1730},[240,84015,592],{"class":257},[240,84017,53738],{"class":253},[240,84019,447],{"class":257},[19,84021,84022],{},[219,84023],{"alt":236,"src":84024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[23945,84026,84028],{"id":84027},"_41053-string","4.10.5.3 String",[19,84030,84031],{},[219,84032],{"alt":236,"src":84033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[24857,84035,84037],{"id":84036},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[231,84039,84041],{"className":55003,"code":84040,"language":55005,"meta":236,"style":236},"\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",[23,84042,84043,84051,84059,84064,84069,84074,84078,84083,84088,84093,84101],{"__ignoreMap":236},[240,84044,84045,84047,84049],{"class":242,"line":243},[240,84046,431],{"class":257},[240,84048,53738],{"class":253},[240,84050,447],{"class":257},[240,84052,84053,84055,84057],{"class":242,"line":250},[240,84054,452],{"class":257},[240,84056,53751],{"class":253},[240,84058,447],{"class":257},[240,84060,84061],{"class":242,"line":261},[240,84062,84063],{"class":257},"    \u002F\u002F 把字符串转化为数组\n",[240,84065,84066],{"class":242,"line":277},[240,84067,84068],{"class":257},"    const str = 'pink,red'\n",[240,84070,84071],{"class":242,"line":294},[240,84072,84073],{"class":257},"    const arr = str.split(',')\n",[240,84075,84076],{"class":242,"line":309},[240,84077,82552],{"class":257},[240,84079,84080],{"class":242,"line":529},[240,84081,84082],{"class":257},"    const str1 = '2025-8-25'\n",[240,84084,84085],{"class":242,"line":549},[240,84086,84087],{"class":257},"    const arr1 = str1.split('-')\n",[240,84089,84090],{"class":242,"line":569},[240,84091,84092],{"class":257},"    console.log(arr1)\n",[240,84094,84095,84097,84099],{"class":242,"line":589},[240,84096,54353],{"class":257},[240,84098,53751],{"class":253},[240,84100,447],{"class":257},[240,84102,84103,84105,84107],{"class":242,"line":715},[240,84104,592],{"class":257},[240,84106,53738],{"class":253},[240,84108,447],{"class":257},[24857,84110,84112],{"id":84111},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[19,84114,7133],{},[19,84116,84117],{},"substring(indexStart)",[19,84119,84120],{},"substring(indexStart, indexEnd)",[3100,84122,84123,84134,84146,84156],{},[1829,84124,84125,84126,84129,84130,84133],{},"如果省略了 ",[23,84127,84128],{},"indexEnd","，则 ",[23,84131,84132],{},"substring()"," 提取字符直到字符串的末尾",[1829,84135,84136,84137,84140,84141,84129,84143,84145],{},"如果 ",[23,84138,84139],{},"indexStart"," 等于 ",[23,84142,84128],{},[23,84144,84132],{}," 返回一个空字符串",[1829,84147,84136,84148,84150,84151,84129,84153,84155],{},[23,84149,84139],{}," 大于 ",[23,84152,84128],{},[23,84154,84132],{}," 的效果就像交换了这两个参数一样",[1829,84157,84158],{},"结束的索引号不包含想要截取的部分",[231,84160,84162],{"className":83403,"code":84161,"language":83405,"meta":236,"style":236},"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",[23,84163,84164,84176,84180,84214,84244,84248,84279,84283,84310,84340,84370,84374,84405],{"__ignoreMap":236},[240,84165,84166,84169,84171,84174],{"class":242,"line":243},[240,84167,84168],{"class":257},"const anyString ",[240,84170,440],{"class":288},[240,84172,84173],{"class":443}," \"Mozilla\"",[240,84175,274],{"class":257},[240,84177,84178],{"class":242,"line":250},[240,84179,4353],{"emptyLinePlaceholder":2051},[240,84181,84182,84185,84187,84189,84191,84194,84196,84199,84201,84203,84205,84207,84209,84211],{"class":242,"line":261},[240,84183,84184],{"class":264},"console",[240,84186,2657],{"class":257},[240,84188,60178],{"class":264},[240,84190,789],{"class":257},[240,84192,84193],{"class":264},"anyString",[240,84195,2657],{"class":257},[240,84197,84198],{"class":264},"substring",[240,84200,789],{"class":257},[240,84202,1274],{"class":264},[240,84204,1277],{"class":257},[240,84206,1643],{"class":264},[240,84208,77168],{"class":257},[240,84210,35275],{"class":288},[240,84212,84213],{"class":443}," 'M'\n",[240,84215,84216,84218,84220,84222,84224,84226,84228,84230,84232,84234,84236,84238,84240,84242],{"class":242,"line":277},[240,84217,84184],{"class":264},[240,84219,2657],{"class":257},[240,84221,60178],{"class":264},[240,84223,789],{"class":257},[240,84225,84193],{"class":264},[240,84227,2657],{"class":257},[240,84229,84198],{"class":264},[240,84231,789],{"class":257},[240,84233,1643],{"class":264},[240,84235,1277],{"class":257},[240,84237,1274],{"class":264},[240,84239,77168],{"class":257},[240,84241,35275],{"class":288},[240,84243,84213],{"class":443},[240,84245,84246],{"class":242,"line":294},[240,84247,4353],{"emptyLinePlaceholder":2051},[240,84249,84250,84252,84254,84256,84258,84260,84262,84264,84266,84268,84270,84272,84274,84276],{"class":242,"line":309},[240,84251,84184],{"class":264},[240,84253,2657],{"class":257},[240,84255,60178],{"class":264},[240,84257,789],{"class":257},[240,84259,84193],{"class":264},[240,84261,2657],{"class":257},[240,84263,84198],{"class":264},[240,84265,789],{"class":257},[240,84267,1274],{"class":264},[240,84269,1277],{"class":257},[240,84271,2445],{"class":264},[240,84273,77168],{"class":257},[240,84275,35275],{"class":288},[240,84277,84278],{"class":443}," 'Mozill'\n",[240,84280,84281],{"class":242,"line":529},[240,84282,4353],{"emptyLinePlaceholder":2051},[240,84284,84285,84287,84289,84291,84293,84295,84297,84299,84301,84303,84305,84307],{"class":242,"line":549},[240,84286,84184],{"class":264},[240,84288,2657],{"class":257},[240,84290,60178],{"class":264},[240,84292,789],{"class":257},[240,84294,84193],{"class":264},[240,84296,2657],{"class":257},[240,84298,84198],{"class":264},[240,84300,789],{"class":257},[240,84302,1716],{"class":264},[240,84304,77168],{"class":257},[240,84306,35275],{"class":288},[240,84308,84309],{"class":443}," 'lla'\n",[240,84311,84312,84314,84316,84318,84320,84322,84324,84326,84328,84330,84332,84334,84336,84338],{"class":242,"line":569},[240,84313,84184],{"class":264},[240,84315,2657],{"class":257},[240,84317,60178],{"class":264},[240,84319,789],{"class":257},[240,84321,84193],{"class":264},[240,84323,2657],{"class":257},[240,84325,84198],{"class":264},[240,84327,789],{"class":257},[240,84329,1716],{"class":264},[240,84331,1277],{"class":257},[240,84333,2470],{"class":264},[240,84335,77224],{"class":257},[240,84337,35275],{"class":288},[240,84339,84309],{"class":443},[240,84341,84342,84344,84346,84348,84350,84352,84354,84356,84358,84360,84362,84364,84366,84368],{"class":242,"line":589},[240,84343,84184],{"class":264},[240,84345,2657],{"class":257},[240,84347,60178],{"class":264},[240,84349,789],{"class":257},[240,84351,84193],{"class":264},[240,84353,2657],{"class":257},[240,84355,84198],{"class":264},[240,84357,789],{"class":257},[240,84359,2470],{"class":264},[240,84361,1277],{"class":257},[240,84363,1716],{"class":264},[240,84365,77168],{"class":257},[240,84367,35275],{"class":288},[240,84369,84309],{"class":443},[240,84371,84372],{"class":242,"line":715},[240,84373,4353],{"emptyLinePlaceholder":2051},[240,84375,84376,84378,84380,84382,84384,84386,84388,84390,84392,84394,84396,84398,84400,84402],{"class":242,"line":727},[240,84377,84184],{"class":264},[240,84379,2657],{"class":257},[240,84381,60178],{"class":264},[240,84383,789],{"class":257},[240,84385,84193],{"class":264},[240,84387,2657],{"class":257},[240,84389,84198],{"class":264},[240,84391,789],{"class":257},[240,84393,1274],{"class":264},[240,84395,1277],{"class":257},[240,84397,2470],{"class":264},[240,84399,77168],{"class":257},[240,84401,35275],{"class":288},[240,84403,84404],{"class":443}," 'Mozilla'\n",[240,84406,84407,84409,84411,84413,84415,84417,84419,84421,84423,84425,84427,84429,84431,84433],{"class":242,"line":1730},[240,84408,84184],{"class":264},[240,84410,2657],{"class":257},[240,84412,60178],{"class":264},[240,84414,789],{"class":257},[240,84416,84193],{"class":264},[240,84418,2657],{"class":257},[240,84420,84198],{"class":264},[240,84422,789],{"class":257},[240,84424,1274],{"class":264},[240,84426,1277],{"class":257},[240,84428,2546],{"class":264},[240,84430,77168],{"class":257},[240,84432,35275],{"class":288},[240,84434,84404],{"class":443},[24857,84436,84438],{"id":84437},"_410533-startswith","4.10.5.3.3 startsWith",[19,84440,84441,84444,84445,84450,84451,84453,84454],{},[23,84442,84443],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[68,84446,84447],{},[23,84448,84449],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[23,84452,3322],{}," 或 ",[23,84455,67943],{},[231,84457,84459],{"className":79409,"code":84458,"language":79411,"meta":236,"style":236},"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",[23,84460,84461,84473,84492,84497,84517],{"__ignoreMap":236},[240,84462,84463,84465,84468,84470],{"class":242,"line":243},[240,84464,8743],{"class":288},[240,84466,84467],{"class":257}," str1 ",[240,84469,440],{"class":288},[240,84471,84472],{"class":443}," \"Saturday night plans\"\n",[240,84474,84475,84477,84479,84482,84485,84487,84490],{"class":242,"line":250},[240,84476,79446],{"class":257},[240,84478,60178],{"class":436},[240,84480,84481],{"class":257},"(str1.",[240,84483,84484],{"class":436},"startsWith",[240,84486,789],{"class":257},[240,84488,84489],{"class":443},"\"Sat\"",[240,84491,32443],{"class":257},[240,84493,84494],{"class":242,"line":261},[240,84495,84496],{"class":246},"\u002F\u002F Expected output: true\n",[240,84498,84499,84501,84503,84505,84507,84509,84511,84513,84515],{"class":242,"line":277},[240,84500,79446],{"class":257},[240,84502,60178],{"class":436},[240,84504,84481],{"class":257},[240,84506,84484],{"class":436},[240,84508,789],{"class":257},[240,84510,84489],{"class":443},[240,84512,1277],{"class":257},[240,84514,1692],{"class":264},[240,84516,32443],{"class":257},[240,84518,84519],{"class":242,"line":294},[240,84520,84521],{"class":246},"\u002F\u002F Expected output: false\n",[231,84523,84525],{"className":52579,"code":84524,"language":52581,"meta":236,"style":236},"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",[23,84526,84527,84532,84537,84541,84546,84551],{"__ignoreMap":236},[240,84528,84529],{"class":242,"line":243},[240,84530,84531],{"class":257},"startsWith(searchString)\n",[240,84533,84534],{"class":242,"line":250},[240,84535,84536],{"class":257},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[240,84538,84539],{"class":242,"line":261},[240,84540,4353],{"emptyLinePlaceholder":2051},[240,84542,84543],{"class":242,"line":277},[240,84544,84545],{"class":257},"const str3 = 'pink老师上课中'\n",[240,84547,84548],{"class":242,"line":294},[240,84549,84550],{"class":257},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[240,84552,84553],{"class":242,"line":309},[240,84554,84555],{"class":257},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[24857,84557,84559],{"id":84558},"_410534-includes","4.10.5.3.4 includes",[19,84561,84562],{},"includes(searchString) includes(searchString, position)",[1826,84564,84565],{},[1829,84566,84567],{},"searchString:",[19,84569,84570,84571,84573,84574,84579,84580,84585,84586,23447,84589,84592,84593,84596],{},"一个要在 ",[23,84572,3262],{}," 中查找的字符串。",[254,84575,84578],{"href":84576,"rel":84577},"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",[25811],"不能是正则表达式","。所有非正则表达式的值都会被",[254,84581,84584],{"href":84582,"rel":84583},"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",[25811],"强制转换为字符串","，因此如果该参数被省略或传入 ",[23,84587,84588],{},"undefined",[23,84590,84591],{},"includes()"," 方法会在字符串中搜索 ",[23,84594,84595],{},"\"undefined\"","，这通常不是你想要的",[1826,84598,84599],{"start":250},[1829,84600,84601,2954],{},[23,84602,84603],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[19,84605,84606,84607,84610,84611],{},"在字符串中开始搜索 ",[23,84608,84609],{},"searchString"," 的位置。默认值为 ",[23,84612,1274],{},[1826,84614,84615],{"start":261},[1829,84616,84617],{},"返回值：",[19,84619,84620,84621,84623,84624,84628,84629],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[23,84622,84609],{}," 为空字符串的情况），则返回 ",[68,84625,84626],{},[23,84627,3322],{}," ，否则返回 ",[68,84630,84631],{},[23,84632,67943],{},[1826,84634,84635],{"start":277},[1829,84636,84637],{},"异常：",[19,84639,84136,84640,15744,84642,84646],{},[23,84641,84609],{},[254,84643,84645],{"href":84576,"rel":84644},[25811],"是一个正则表达式","，则会抛出",[19,84648,84649],{},"只要是有就是true，不需要非得以谁开头结尾",[231,84651,84653],{"className":79409,"code":84652,"language":79411,"meta":236,"style":236},"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",[23,84654,84655,84666,84689,84708,84728,84750,84769],{"__ignoreMap":236},[240,84656,84657,84659,84661,84663],{"class":242,"line":243},[240,84658,8743],{"class":288},[240,84660,81689],{"class":257},[240,84662,440],{"class":288},[240,84664,84665],{"class":443}," \"To be, or not to be, that is the question.\"\n",[240,84667,84668,84670,84672,84675,84678,84680,84683,84686],{"class":242,"line":250},[240,84669,79446],{"class":257},[240,84671,60178],{"class":436},[240,84673,84674],{"class":257},"(str.",[240,84676,84677],{"class":436},"includes",[240,84679,789],{"class":257},[240,84681,84682],{"class":443},"\"To be\"",[240,84684,84685],{"class":257},"))",[240,84687,84688],{"class":246},"  \u002F\u002F true\n",[240,84690,84691,84693,84695,84697,84699,84701,84704,84706],{"class":242,"line":261},[240,84692,79446],{"class":257},[240,84694,60178],{"class":436},[240,84696,84674],{"class":257},[240,84698,84677],{"class":436},[240,84700,789],{"class":257},[240,84702,84703],{"class":443},"\"question\"",[240,84705,84685],{"class":257},[240,84707,84688],{"class":246},[240,84709,84710,84712,84714,84716,84718,84720,84723,84725],{"class":242,"line":277},[240,84711,79446],{"class":257},[240,84713,60178],{"class":436},[240,84715,84674],{"class":257},[240,84717,84677],{"class":436},[240,84719,789],{"class":257},[240,84721,84722],{"class":443},"\"nonexistent\"",[240,84724,84685],{"class":257},[240,84726,84727],{"class":246},"  \u002F\u002F false\n",[240,84729,84730,84732,84734,84736,84738,84740,84742,84744,84746,84748],{"class":242,"line":294},[240,84731,79446],{"class":257},[240,84733,60178],{"class":436},[240,84735,84674],{"class":257},[240,84737,84677],{"class":436},[240,84739,789],{"class":257},[240,84741,84682],{"class":443},[240,84743,1277],{"class":257},[240,84745,1643],{"class":264},[240,84747,84685],{"class":257},[240,84749,84727],{"class":246},[240,84751,84752,84754,84756,84758,84760,84762,84765,84767],{"class":242,"line":309},[240,84753,79446],{"class":257},[240,84755,60178],{"class":436},[240,84757,84674],{"class":257},[240,84759,84677],{"class":436},[240,84761,789],{"class":257},[240,84763,84764],{"class":443},"\"TO BE\"",[240,84766,84685],{"class":257},[240,84768,84727],{"class":246},[240,84770,84771,84773,84775,84777,84779,84781,84783,84785],{"class":242,"line":529},[240,84772,79446],{"class":257},[240,84774,60178],{"class":436},[240,84776,84674],{"class":257},[240,84778,84677],{"class":436},[240,84780,789],{"class":257},[240,84782,9603],{"class":443},[240,84784,84685],{"class":257},[240,84786,84688],{"class":246},[24857,84788,84790],{"id":84789},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[231,84792,84794],{"className":55003,"code":84793,"language":55005,"meta":236,"style":236},"\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",[23,84795,84796,84804,84812,84817,84822,84827,84832,84837,84845],{"__ignoreMap":236},[240,84797,84798,84800,84802],{"class":242,"line":243},[240,84799,431],{"class":257},[240,84801,53738],{"class":253},[240,84803,447],{"class":257},[240,84805,84806,84808,84810],{"class":242,"line":250},[240,84807,452],{"class":257},[240,84809,53751],{"class":253},[240,84811,447],{"class":257},[240,84813,84814],{"class":242,"line":261},[240,84815,84816],{"class":257},"    const num = 10\n",[240,84818,84819],{"class":242,"line":277},[240,84820,84821],{"class":257},"    \u002F\u002F 强制转换\n",[240,84823,84824],{"class":242,"line":294},[240,84825,84826],{"class":257},"    console.log(String(num))\n",[240,84828,84829],{"class":242,"line":309},[240,84830,84831],{"class":257},"    \u002F\u002F toString()方法转换\n",[240,84833,84834],{"class":242,"line":529},[240,84835,84836],{"class":257},"    console.log(num.toString())\n",[240,84838,84839,84841,84843],{"class":242,"line":549},[240,84840,54353],{"class":257},[240,84842,53751],{"class":253},[240,84844,447],{"class":257},[240,84846,84847,84849,84851],{"class":242,"line":569},[240,84848,592],{"class":257},[240,84850,53738],{"class":253},[240,84852,447],{"class":257},[24857,84854,84856],{"id":84855},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[19,84858,84859],{},[219,84860],{"alt":236,"src":84861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[231,84863,84865],{"className":52579,"code":84864,"language":52581,"meta":236,"style":236},"\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",[23,84866,84867,84877,84891,84895,84903,84917,84937,84949,84957,84961,84969,84981,84989,85001,85006,85011,85016,85063,85079,85087,85095,85099],{"__ignoreMap":236},[240,84868,84869,84871,84873,84875],{"class":242,"line":243},[240,84870,53243],{"class":257},[240,84872,53246],{"class":253},[240,84874,53249],{"class":436},[240,84876,447],{"class":257},[240,84878,84879,84881,84883,84885,84887,84889],{"class":242,"line":250},[240,84880,431],{"class":257},[240,84882,52581],{"class":253},[240,84884,53260],{"class":436},[240,84886,440],{"class":257},[240,84888,53265],{"class":443},[240,84890,447],{"class":257},[240,84892,84893],{"class":242,"line":261},[240,84894,4353],{"emptyLinePlaceholder":2051},[240,84896,84897,84899,84901],{"class":242,"line":277},[240,84898,431],{"class":257},[240,84900,53278],{"class":253},[240,84902,447],{"class":257},[240,84904,84905,84907,84909,84911,84913,84915],{"class":242,"line":294},[240,84906,452],{"class":257},[240,84908,53288],{"class":253},[240,84910,53291],{"class":436},[240,84912,440],{"class":257},[240,84914,53296],{"class":443},[240,84916,447],{"class":257},[240,84918,84919,84921,84923,84925,84927,84929,84931,84933,84935],{"class":242,"line":309},[240,84920,452],{"class":257},[240,84922,53288],{"class":253},[240,84924,16869],{"class":436},[240,84926,440],{"class":257},[240,84928,53335],{"class":443},[240,84930,53315],{"class":436},[240,84932,440],{"class":257},[240,84934,53342],{"class":443},[240,84936,447],{"class":257},[240,84938,84939,84941,84943,84945,84947],{"class":242,"line":529},[240,84940,452],{"class":257},[240,84942,53351],{"class":253},[240,84944,53354],{"class":257},[240,84946,53351],{"class":253},[240,84948,447],{"class":257},[240,84950,84951,84953,84955],{"class":242,"line":549},[240,84952,592],{"class":257},[240,84954,53278],{"class":253},[240,84956,447],{"class":257},[240,84958,84959],{"class":242,"line":569},[240,84960,4353],{"emptyLinePlaceholder":2051},[240,84962,84963,84965,84967],{"class":242,"line":589},[240,84964,431],{"class":257},[240,84966,53738],{"class":253},[240,84968,447],{"class":257},[240,84970,84971,84973,84975,84977,84979],{"class":242,"line":715},[240,84972,452],{"class":257},[240,84974,330],{"class":253},[240,84976,57247],{"class":257},[240,84978,330],{"class":253},[240,84980,447],{"class":257},[240,84982,84983,84985,84987],{"class":242,"line":727},[240,84984,452],{"class":257},[240,84986,53751],{"class":253},[240,84988,447],{"class":257},[240,84990,84991,84993,84996,84998],{"class":242,"line":1730},[240,84992,13172],{"class":288},[240,84994,84995],{"class":264}," gift",[240,84997,15514],{"class":288},[240,84999,85000],{"class":443}," '50g的茶叶，清洗球'\n",[240,85002,85003],{"class":242,"line":3582},[240,85004,85005],{"class":246},"    \u002F\u002F 1.把字符串拆分为数组\n",[240,85007,85008],{"class":242,"line":3596},[240,85009,85010],{"class":246},"    \u002F\u002F console.log(gift.split(','))\n",[240,85012,85013],{"class":242,"line":3601},[240,85014,85015],{"class":246},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[240,85017,85018,85020,85022,85024,85027,85030,85032,85035,85037,85039,85041,85043,85045,85048,85050,85053,85055,85057,85059,85061],{"class":242,"line":3607},[240,85019,13172],{"class":288},[240,85021,75834],{"class":264},[240,85023,15514],{"class":288},[240,85025,85026],{"class":257}," gift.",[240,85028,85029],{"class":436},"split",[240,85031,789],{"class":257},[240,85033,85034],{"class":443},"'，'",[240,85036,32772],{"class":257},[240,85038,75959],{"class":436},[240,85040,789],{"class":257},[240,85042,81709],{"class":792},[240,85044,81712],{"class":288},[240,85046,85047],{"class":443}," `\u003Cspan>【赠品】${",[240,85049,81709],{"class":257},[240,85051,85052],{"class":443},"}\u003C\u002Fspan>\u003Cbr>`",[240,85054,32772],{"class":257},[240,85056,76138],{"class":436},[240,85058,789],{"class":257},[240,85060,76143],{"class":443},[240,85062,2129],{"class":257},[240,85064,85065,85067,85069,85071,85073,85075,85077],{"class":242,"line":3628},[240,85066,54343],{"class":257},[240,85068,56334],{"class":436},[240,85070,789],{"class":257},[240,85072,83845],{"class":443},[240,85074,76164],{"class":257},[240,85076,440],{"class":288},[240,85078,75900],{"class":257},[240,85080,85081,85083,85085],{"class":242,"line":3633},[240,85082,54353],{"class":257},[240,85084,53751],{"class":253},[240,85086,447],{"class":257},[240,85088,85089,85091,85093],{"class":242,"line":3647},[240,85090,592],{"class":257},[240,85092,53738],{"class":253},[240,85094,447],{"class":257},[240,85096,85097],{"class":242,"line":3652},[240,85098,4353],{"emptyLinePlaceholder":2051},[240,85100,85101,85103,85105],{"class":242,"line":3681},[240,85102,592],{"class":257},[240,85104,52581],{"class":253},[240,85106,447],{"class":257},[23945,85108,85110],{"id":85109},"_41054-number","4.10.5.4 Number",[19,85112,85113],{},[219,85114],{"alt":236,"src":85115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[19,85117,85118],{},"整数也可以进行toFixed来保留小数",[19,85120,85121],{},"比如：",[19,85123,85124],{},"const price=10",[19,85126,85127],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[23945,85129,85131],{"id":85130},"_41055-购物车展示","4.10.5.5 购物车展示",[19,85133,85134],{},[219,85135],{"alt":236,"src":85136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[231,85138,85140],{"className":52579,"code":85139,"language":52581,"meta":236,"style":236},"\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",[23,85141,85142,85152,85166,85170,85178,85192,85212,85224,85232,85238,85248,85258,85268,85272,85276,85282,85294,85308,85312,85316,85322,85334,85350,85360,85376,85380,85384,85390,85400,85410,85414,85418,85426,85438,85450,85462,85466,85470,85478,85490,85494,85498,85509,85519,85531,85543,85553,85557,85561,85569,85578,85590,85600,85610,85614,85618,85626,85635,85642,85652,85664,85668,85672,85681,85691,85702,85714,85726,85730,85734,85743,85753,85764,85768,85772,85778,85790,85802,85812,85822,85840,85852,85856,85860,85869,85881,85891,85901,85913,85917,85925,85933,85937,85945,85959,85967,85981,86009,86017,86025,86035,86039,86047,86055,86064,86072,86081,86091,86095,86099,86107,86115,86124,86132,86140,86153,86157,86161,86169,86177,86186,86194,86202,86217,86221,86225,86233,86241,86250,86258,86266,86280,86288,86292,86296,86301,86327,86332,86369,86374,86397,86402,86456,86461,86497,86501,86507,86512,86521,86535,86544,86563,86572,86582,86587,86592,86605,86610,86664,86690,86698,86706,86710],{"__ignoreMap":236},[240,85143,85144,85146,85148,85150],{"class":242,"line":243},[240,85145,53243],{"class":257},[240,85147,53246],{"class":253},[240,85149,53249],{"class":436},[240,85151,447],{"class":257},[240,85153,85154,85156,85158,85160,85162,85164],{"class":242,"line":250},[240,85155,431],{"class":257},[240,85157,52581],{"class":253},[240,85159,53260],{"class":436},[240,85161,440],{"class":257},[240,85163,53265],{"class":443},[240,85165,447],{"class":257},[240,85167,85168],{"class":242,"line":261},[240,85169,4353],{"emptyLinePlaceholder":2051},[240,85171,85172,85174,85176],{"class":242,"line":277},[240,85173,431],{"class":257},[240,85175,53278],{"class":253},[240,85177,447],{"class":257},[240,85179,85180,85182,85184,85186,85188,85190],{"class":242,"line":294},[240,85181,452],{"class":257},[240,85183,53288],{"class":253},[240,85185,53291],{"class":436},[240,85187,440],{"class":257},[240,85189,53296],{"class":443},[240,85191,447],{"class":257},[240,85193,85194,85196,85198,85200,85202,85204,85206,85208,85210],{"class":242,"line":309},[240,85195,452],{"class":257},[240,85197,53288],{"class":253},[240,85199,16869],{"class":436},[240,85201,440],{"class":257},[240,85203,53335],{"class":443},[240,85205,53315],{"class":436},[240,85207,440],{"class":257},[240,85209,53342],{"class":443},[240,85211,447],{"class":257},[240,85213,85214,85216,85218,85220,85222],{"class":242,"line":529},[240,85215,452],{"class":257},[240,85217,53351],{"class":253},[240,85219,53354],{"class":257},[240,85221,53351],{"class":253},[240,85223,447],{"class":257},[240,85225,85226,85228,85230],{"class":242,"line":549},[240,85227,452],{"class":257},[240,85229,2019],{"class":253},[240,85231,447],{"class":257},[240,85233,85234,85236],{"class":242,"line":569},[240,85235,8354],{"class":253},[240,85237,258],{"class":257},[240,85239,85240,85242,85244,85246],{"class":242,"line":589},[240,85241,56630],{"class":264},[240,85243,268],{"class":257},[240,85245,1274],{"class":264},[240,85247,274],{"class":257},[240,85249,85250,85252,85254,85256],{"class":242,"line":715},[240,85251,56641],{"class":264},[240,85253,268],{"class":257},[240,85255,1274],{"class":264},[240,85257,274],{"class":257},[240,85259,85260,85262,85264,85266],{"class":242,"line":727},[240,85261,74511],{"class":264},[240,85263,268],{"class":257},[240,85265,62436],{"class":264},[240,85267,274],{"class":257},[240,85269,85270],{"class":242,"line":1730},[240,85271,4140],{"class":257},[240,85273,85274],{"class":242,"line":3582},[240,85275,4353],{"emptyLinePlaceholder":2051},[240,85277,85278,85280],{"class":242,"line":3596},[240,85279,64047],{"class":436},[240,85281,258],{"class":257},[240,85283,85284,85286,85288,85290,85292],{"class":242,"line":3601},[240,85285,56705],{"class":264},[240,85287,268],{"class":257},[240,85289,80488],{"class":264},[240,85291,289],{"class":288},[240,85293,274],{"class":257},[240,85295,85296,85298,85300,85302,85304,85306],{"class":242,"line":3607},[240,85297,56641],{"class":264},[240,85299,268],{"class":257},[240,85301,285],{"class":264},[240,85303,289],{"class":288},[240,85305,53498],{"class":264},[240,85307,274],{"class":257},[240,85309,85310],{"class":242,"line":3628},[240,85311,4140],{"class":257},[240,85313,85314],{"class":242,"line":3633},[240,85315,4353],{"emptyLinePlaceholder":2051},[240,85317,85318,85320],{"class":242,"line":3647},[240,85319,80539],{"class":436},[240,85321,258],{"class":257},[240,85323,85324,85326,85328,85330,85332],{"class":242,"line":3652},[240,85325,56630],{"class":264},[240,85327,268],{"class":257},[240,85329,2674],{"class":264},[240,85331,289],{"class":288},[240,85333,274],{"class":257},[240,85335,85336,85338,85340,85342,85344,85346,85348],{"class":242,"line":3681},[240,85337,63784],{"class":264},[240,85339,268],{"class":257},[240,85341,30067],{"class":264},[240,85343,80594],{"class":264},[240,85345,80597],{"class":264},[240,85347,2793],{"class":288},[240,85349,274],{"class":257},[240,85351,85352,85354,85356,85358],{"class":242,"line":3686},[240,85353,56943],{"class":264},[240,85355,268],{"class":257},[240,85357,53420],{"class":264},[240,85359,274],{"class":257},[240,85361,85362,85364,85366,85368,85370,85372,85374],{"class":242,"line":3703},[240,85363,63901],{"class":264},[240,85365,268],{"class":257},[240,85367,1643],{"class":264},[240,85369,289],{"class":288},[240,85371,53463],{"class":264},[240,85373,64168],{"class":264},[240,85375,274],{"class":257},[240,85377,85378],{"class":242,"line":3708},[240,85379,4140],{"class":257},[240,85381,85382],{"class":242,"line":3713},[240,85383,4353],{"emptyLinePlaceholder":2051},[240,85385,85386,85388],{"class":242,"line":3718},[240,85387,80657],{"class":436},[240,85389,258],{"class":257},[240,85391,85392,85394,85396,85398],{"class":242,"line":3732},[240,85393,63949],{"class":264},[240,85395,268],{"class":257},[240,85397,63954],{"class":264},[240,85399,274],{"class":257},[240,85401,85402,85404,85406,85408],{"class":242,"line":3737},[240,85403,56818],{"class":264},[240,85405,268],{"class":257},[240,85407,63742],{"class":264},[240,85409,274],{"class":257},[240,85411,85412],{"class":242,"line":4530},[240,85413,4140],{"class":257},[240,85415,85416],{"class":242,"line":4544},[240,85417,4353],{"emptyLinePlaceholder":2051},[240,85419,85420,85422,85424],{"class":242,"line":4552},[240,85421,80539],{"class":436},[240,85423,57548],{"class":253},[240,85425,258],{"class":257},[240,85427,85428,85430,85432,85434,85436],{"class":242,"line":4557},[240,85429,56705],{"class":264},[240,85431,268],{"class":257},[240,85433,386],{"class":264},[240,85435,289],{"class":288},[240,85437,274],{"class":257},[240,85439,85440,85442,85444,85446,85448],{"class":242,"line":4563},[240,85441,56719],{"class":264},[240,85443,268],{"class":257},[240,85445,386],{"class":264},[240,85447,289],{"class":288},[240,85449,274],{"class":257},[240,85451,85452,85454,85456,85458,85460],{"class":242,"line":4569},[240,85453,63674],{"class":264},[240,85455,268],{"class":257},[240,85457,1741],{"class":264},[240,85459,289],{"class":288},[240,85461,274],{"class":257},[240,85463,85464],{"class":242,"line":4574},[240,85465,4140],{"class":257},[240,85467,85468],{"class":242,"line":9899},[240,85469,4353],{"emptyLinePlaceholder":2051},[240,85471,85472,85474,85476],{"class":242,"line":9923},[240,85473,80539],{"class":436},[240,85475,64228],{"class":436},[240,85477,258],{"class":257},[240,85479,85480,85482,85484,85486,85488],{"class":242,"line":9928},[240,85481,56705],{"class":264},[240,85483,268],{"class":257},[240,85485,3676],{"class":264},[240,85487,289],{"class":288},[240,85489,274],{"class":257},[240,85491,85492],{"class":242,"line":9934},[240,85493,4140],{"class":257},[240,85495,85496],{"class":242,"line":9961},[240,85497,4353],{"emptyLinePlaceholder":2051},[240,85499,85500,85502,85504,85507],{"class":242,"line":9966},[240,85501,80539],{"class":436},[240,85503,64228],{"class":436},[240,85505,85506],{"class":436}," .tag",[240,85508,258],{"class":257},[240,85510,85511,85513,85515,85517],{"class":242,"line":9972},[240,85512,56943],{"class":264},[240,85514,268],{"class":257},[240,85516,271],{"class":264},[240,85518,274],{"class":257},[240,85520,85521,85523,85525,85527,85529],{"class":242,"line":9984},[240,85522,56630],{"class":264},[240,85524,268],{"class":257},[240,85526,1668],{"class":264},[240,85528,289],{"class":288},[240,85530,274],{"class":257},[240,85532,85533,85535,85537,85539,85541],{"class":242,"line":9996},[240,85534,56856],{"class":264},[240,85536,268],{"class":257},[240,85538,2597],{"class":264},[240,85540,289],{"class":288},[240,85542,274],{"class":257},[240,85544,85545,85547,85549,85551],{"class":242,"line":10008},[240,85546,59349],{"class":264},[240,85548,268],{"class":257},[240,85550,63994],{"class":264},[240,85552,274],{"class":257},[240,85554,85555],{"class":242,"line":11667},[240,85556,4140],{"class":257},[240,85558,85559],{"class":242,"line":11692},[240,85560,4353],{"emptyLinePlaceholder":2051},[240,85562,85563,85565,85567],{"class":242,"line":11715},[240,85564,80539],{"class":436},[240,85566,80831],{"class":436},[240,85568,33412],{"class":257},[240,85570,85571,85573,85576],{"class":242,"line":11739},[240,85572,80539],{"class":436},[240,85574,85575],{"class":436}," .sub-total",[240,85577,258],{"class":257},[240,85579,85580,85582,85584,85586,85588],{"class":242,"line":11744},[240,85581,56856],{"class":264},[240,85583,268],{"class":257},[240,85585,2748],{"class":264},[240,85587,289],{"class":288},[240,85589,274],{"class":257},[240,85591,85592,85594,85596,85598],{"class":242,"line":11749},[240,85593,59349],{"class":264},[240,85595,268],{"class":257},[240,85597,80854],{"class":264},[240,85599,274],{"class":257},[240,85601,85602,85604,85606,85608],{"class":242,"line":11754},[240,85603,63761],{"class":264},[240,85605,268],{"class":257},[240,85607,1643],{"class":264},[240,85609,274],{"class":257},[240,85611,85612],{"class":242,"line":11763},[240,85613,4140],{"class":257},[240,85615,85616],{"class":242,"line":11768},[240,85617,4353],{"emptyLinePlaceholder":2051},[240,85619,85620,85622,85624],{"class":242,"line":11774},[240,85621,80539],{"class":436},[240,85623,80871],{"class":436},[240,85625,33412],{"class":257},[240,85627,85628,85630,85633],{"class":242,"line":11795},[240,85629,80539],{"class":436},[240,85631,85632],{"class":436}," .sub-total::before",[240,85634,33412],{"class":257},[240,85636,85637,85640],{"class":242,"line":11801},[240,85638,85639],{"class":436},"    .amount::before",[240,85641,258],{"class":257},[240,85643,85644,85646,85648,85650],{"class":242,"line":11815},[240,85645,80878],{"class":264},[240,85647,268],{"class":257},[240,85649,80883],{"class":443},[240,85651,274],{"class":257},[240,85653,85654,85656,85658,85660,85662],{"class":242,"line":11821},[240,85655,56856],{"class":264},[240,85657,268],{"class":257},[240,85659,2597],{"class":264},[240,85661,289],{"class":288},[240,85663,274],{"class":257},[240,85665,85666],{"class":242,"line":11848},[240,85667,4140],{"class":257},[240,85669,85670],{"class":242,"line":11857},[240,85671,4353],{"emptyLinePlaceholder":2051},[240,85673,85674,85676,85679],{"class":242,"line":11863},[240,85675,80539],{"class":436},[240,85677,85678],{"class":436}," .spec",[240,85680,258],{"class":257},[240,85682,85683,85685,85687,85689],{"class":242,"line":11871},[240,85684,63761],{"class":264},[240,85686,268],{"class":257},[240,85688,1668],{"class":264},[240,85690,274],{"class":257},[240,85692,85693,85695,85697,85700],{"class":242,"line":11876},[240,85694,59349],{"class":264},[240,85696,268],{"class":257},[240,85698,85699],{"class":264},"#888",[240,85701,274],{"class":257},[240,85703,85704,85706,85708,85710,85712],{"class":242,"line":18552},[240,85705,56856],{"class":264},[240,85707,268],{"class":257},[240,85709,2648],{"class":264},[240,85711,289],{"class":288},[240,85713,274],{"class":257},[240,85715,85716,85718,85720,85722,85724],{"class":242,"line":18558},[240,85717,63924],{"class":264},[240,85719,268],{"class":257},[240,85721,1000],{"class":264},[240,85723,289],{"class":288},[240,85725,274],{"class":257},[240,85727,85728],{"class":242,"line":18581},[240,85729,4140],{"class":257},[240,85731,85732],{"class":242,"line":18587},[240,85733,4353],{"emptyLinePlaceholder":2051},[240,85735,85736,85738,85741],{"class":242,"line":18610},[240,85737,80539],{"class":436},[240,85739,85740],{"class":436}," .count",[240,85742,258],{"class":257},[240,85744,85745,85747,85749,85751],{"class":242,"line":18624},[240,85746,63761],{"class":264},[240,85748,268],{"class":257},[240,85750,1643],{"class":264},[240,85752,274],{"class":257},[240,85754,85755,85757,85759,85762],{"class":242,"line":18644},[240,85756,59349],{"class":264},[240,85758,268],{"class":257},[240,85760,85761],{"class":264},"#aaa",[240,85763,274],{"class":257},[240,85765,85766],{"class":242,"line":18650},[240,85767,4140],{"class":257},[240,85769,85770],{"class":242,"line":18661},[240,85771,4353],{"emptyLinePlaceholder":2051},[240,85773,85774,85776],{"class":242,"line":18684},[240,85775,74390],{"class":436},[240,85777,258],{"class":257},[240,85779,85780,85782,85784,85786,85788],{"class":242,"line":18706},[240,85781,56705],{"class":264},[240,85783,268],{"class":257},[240,85785,80488],{"class":264},[240,85787,289],{"class":288},[240,85789,274],{"class":257},[240,85791,85792,85794,85796,85798,85800],{"class":242,"line":18711},[240,85793,56641],{"class":264},[240,85795,268],{"class":257},[240,85797,1274],{"class":264},[240,85799,53498],{"class":264},[240,85801,274],{"class":257},[240,85803,85804,85806,85808,85810],{"class":242,"line":18717},[240,85805,56943],{"class":264},[240,85807,268],{"class":257},[240,85809,53420],{"class":264},[240,85811,274],{"class":257},[240,85813,85814,85816,85818,85820],{"class":242,"line":18731},[240,85815,56954],{"class":264},[240,85817,268],{"class":257},[240,85819,53522],{"class":264},[240,85821,274],{"class":257},[240,85823,85824,85827,85829,85831,85833,85835,85838],{"class":242,"line":18744},[240,85825,85826],{"class":264},"      border-top",[240,85828,268],{"class":257},[240,85830,1643],{"class":264},[240,85832,289],{"class":288},[240,85834,53463],{"class":264},[240,85836,85837],{"class":264}," #4e4e4e",[240,85839,274],{"class":257},[240,85841,85842,85844,85846,85848,85850],{"class":242,"line":18749},[240,85843,56630],{"class":264},[240,85845,268],{"class":257},[240,85847,1000],{"class":264},[240,85849,289],{"class":288},[240,85851,274],{"class":257},[240,85853,85854],{"class":242,"line":18763},[240,85855,4140],{"class":257},[240,85857,85858],{"class":242,"line":18768},[240,85859,4353],{"emptyLinePlaceholder":2051},[240,85861,85862,85864,85867],{"class":242,"line":18774},[240,85863,74390],{"class":436},[240,85865,85866],{"class":436}," .amount",[240,85868,258],{"class":257},[240,85870,85871,85873,85875,85877,85879],{"class":242,"line":18779},[240,85872,56856],{"class":264},[240,85874,268],{"class":257},[240,85876,2748],{"class":264},[240,85878,289],{"class":288},[240,85880,274],{"class":257},[240,85882,85883,85885,85887,85889],{"class":242,"line":18793},[240,85884,59349],{"class":264},[240,85886,268],{"class":257},[240,85888,80854],{"class":264},[240,85890,274],{"class":257},[240,85892,85893,85895,85897,85899],{"class":242,"line":18798},[240,85894,64258],{"class":264},[240,85896,268],{"class":257},[240,85898,53432],{"class":264},[240,85900,274],{"class":257},[240,85902,85903,85905,85907,85909,85911],{"class":242,"line":18803},[240,85904,63674],{"class":264},[240,85906,268],{"class":257},[240,85908,2754],{"class":264},[240,85910,289],{"class":288},[240,85912,274],{"class":257},[240,85914,85915],{"class":242,"line":18817},[240,85916,4140],{"class":257},[240,85918,85919,85921,85923],{"class":242,"line":18829},[240,85920,54353],{"class":257},[240,85922,2019],{"class":253},[240,85924,447],{"class":257},[240,85926,85927,85929,85931],{"class":242,"line":18834},[240,85928,592],{"class":257},[240,85930,53278],{"class":253},[240,85932,447],{"class":257},[240,85934,85935],{"class":242,"line":18847},[240,85936,4353],{"emptyLinePlaceholder":2051},[240,85938,85939,85941,85943],{"class":242,"line":18852},[240,85940,431],{"class":257},[240,85942,53738],{"class":253},[240,85944,447],{"class":257},[240,85946,85947,85949,85951,85953,85955,85957],{"class":242,"line":18857},[240,85948,452],{"class":257},[240,85950,330],{"class":253},[240,85952,437],{"class":436},[240,85954,440],{"class":257},[240,85956,64531],{"class":443},[240,85958,447],{"class":257},[240,85960,85961,85963,85965],{"class":242,"line":18862},[240,85962,54353],{"class":257},[240,85964,330],{"class":253},[240,85966,447],{"class":257},[240,85968,85969,85971,85973,85975,85977,85979],{"class":242,"line":18875},[240,85970,452],{"class":257},[240,85972,330],{"class":253},[240,85974,437],{"class":436},[240,85976,440],{"class":257},[240,85978,64503],{"class":443},[240,85980,447],{"class":257},[240,85982,85983,85985,85987,85990,85992,85994,85996,85999,86001,86003,86005,86007],{"class":242,"line":18880},[240,85984,53285],{"class":257},[240,85986,330],{"class":253},[240,85988,85989],{"class":257},">合计：\u003C",[240,85991,240],{"class":253},[240,85993,437],{"class":436},[240,85995,440],{"class":257},[240,85997,85998],{"class":443},"\"amount\"",[240,86000,57247],{"class":257},[240,86002,240],{"class":253},[240,86004,57247],{"class":257},[240,86006,330],{"class":253},[240,86008,447],{"class":257},[240,86010,86011,86013,86015],{"class":242,"line":34579},[240,86012,54353],{"class":257},[240,86014,330],{"class":253},[240,86016,447],{"class":257},[240,86018,86019,86021,86023],{"class":242,"line":34585},[240,86020,452],{"class":257},[240,86022,53751],{"class":253},[240,86024,447],{"class":257},[240,86026,86027,86029,86031,86033],{"class":242,"line":34591},[240,86028,13172],{"class":288},[240,86030,81291],{"class":264},[240,86032,15514],{"class":288},[240,86034,57380],{"class":257},[240,86036,86037],{"class":242,"line":34597},[240,86038,81300],{"class":257},[240,86040,86041,86043,86045],{"class":242,"line":34603},[240,86042,81305],{"class":257},[240,86044,81308],{"class":443},[240,86046,33412],{"class":257},[240,86048,86049,86051,86053],{"class":242,"line":34614},[240,86050,81315],{"class":257},[240,86052,81318],{"class":443},[240,86054,33412],{"class":257},[240,86056,86057,86059,86062],{"class":242,"line":34620},[240,86058,81325],{"class":257},[240,86060,86061],{"class":264},"289.9",[240,86063,33412],{"class":257},[240,86065,86066,86068,86070],{"class":242,"line":34640},[240,86067,81335],{"class":257},[240,86069,81338],{"class":443},[240,86071,33412],{"class":257},[240,86073,86074,86077,86079],{"class":242,"line":34646},[240,86075,86076],{"class":257},"        count: ",[240,86078,1668],{"class":264},[240,86080,33412],{"class":257},[240,86082,86083,86086,86089],{"class":242,"line":34657},[240,86084,86085],{"class":257},"        spec: { color: ",[240,86087,86088],{"class":443},"'白色'",[240,86090,57537],{"class":257},[240,86092,86093],{"class":242,"line":34663},[240,86094,79806],{"class":257},[240,86096,86097],{"class":242,"line":34669},[240,86098,81300],{"class":257},[240,86100,86101,86103,86105],{"class":242,"line":34675},[240,86102,81305],{"class":257},[240,86104,81399],{"class":443},[240,86106,33412],{"class":257},[240,86108,86109,86111,86113],{"class":242,"line":34681},[240,86110,81315],{"class":257},[240,86112,81408],{"class":443},[240,86114,33412],{"class":257},[240,86116,86117,86119,86122],{"class":242,"line":34687},[240,86118,81325],{"class":257},[240,86120,86121],{"class":264},"109.8",[240,86123,33412],{"class":257},[240,86125,86126,86128,86130],{"class":242,"line":34693},[240,86127,81335],{"class":257},[240,86129,81426],{"class":443},[240,86131,33412],{"class":257},[240,86133,86134,86136,86138],{"class":242,"line":34699},[240,86135,86076],{"class":257},[240,86137,1692],{"class":264},[240,86139,33412],{"class":257},[240,86141,86142,86145,86147,86149,86151],{"class":242,"line":34719},[240,86143,86144],{"class":257},"        spec: { size: ",[240,86146,83817],{"class":443},[240,86148,57397],{"class":257},[240,86150,83822],{"class":443},[240,86152,57537],{"class":257},[240,86154,86155],{"class":242,"line":34725},[240,86156,79806],{"class":257},[240,86158,86159],{"class":242,"line":34741},[240,86160,81300],{"class":257},[240,86162,86163,86165,86167],{"class":242,"line":34747},[240,86164,81305],{"class":257},[240,86166,81443],{"class":443},[240,86168,33412],{"class":257},[240,86170,86171,86173,86175],{"class":242,"line":34761},[240,86172,81315],{"class":257},[240,86174,81452],{"class":443},[240,86176,33412],{"class":257},[240,86178,86179,86181,86184],{"class":242,"line":34767},[240,86180,81325],{"class":257},[240,86182,86183],{"class":264},"488",[240,86185,33412],{"class":257},[240,86187,86188,86190,86192],{"class":242,"line":34782},[240,86189,81335],{"class":257},[240,86191,81470],{"class":443},[240,86193,33412],{"class":257},[240,86195,86196,86198,86200],{"class":242,"line":34788},[240,86197,86076],{"class":257},[240,86199,1643],{"class":264},[240,86201,33412],{"class":257},[240,86203,86204,86206,86209,86212,86215],{"class":242,"line":34797},[240,86205,86085],{"class":257},[240,86207,86208],{"class":443},"'青色'",[240,86210,86211],{"class":257},", sum: ",[240,86213,86214],{"class":443},"'一大四小'",[240,86216,57537],{"class":257},[240,86218,86219],{"class":242,"line":34803},[240,86220,79806],{"class":257},[240,86222,86223],{"class":242,"line":34812},[240,86224,81300],{"class":257},[240,86226,86227,86229,86231],{"class":242,"line":34818},[240,86228,81305],{"class":257},[240,86230,81487],{"class":443},[240,86232,33412],{"class":257},[240,86234,86235,86237,86239],{"class":242,"line":34824},[240,86236,81315],{"class":257},[240,86238,81496],{"class":443},[240,86240,33412],{"class":257},[240,86242,86243,86245,86248],{"class":242,"line":34833},[240,86244,81325],{"class":257},[240,86246,86247],{"class":264},"139",[240,86249,33412],{"class":257},[240,86251,86252,86254,86256],{"class":242,"line":34839},[240,86253,81335],{"class":257},[240,86255,81514],{"class":443},[240,86257,33412],{"class":257},[240,86259,86260,86262,86264],{"class":242,"line":34850},[240,86261,86076],{"class":257},[240,86263,1643],{"class":264},[240,86265,33412],{"class":257},[240,86267,86268,86270,86273,86275,86278],{"class":242,"line":34856},[240,86269,86144],{"class":257},[240,86271,86272],{"class":443},"'小号'",[240,86274,57397],{"class":257},[240,86276,86277],{"class":443},"'紫色'",[240,86279,57403],{"class":257},[240,86281,86282,86285],{"class":242,"line":34875},[240,86283,86284],{"class":257},"        gift: ",[240,86286,86287],{"class":443},"'50g茶叶,清洗球'\n",[240,86289,86290],{"class":242,"line":34881},[240,86291,54334],{"class":257},[240,86293,86294],{"class":242,"line":34892},[240,86295,55045],{"class":257},[240,86297,86298],{"class":242,"line":34898},[240,86299,86300],{"class":246},"    \u002F\u002F  1.根据数据渲染页面\n",[240,86302,86303,86305,86307,86309,86311,86313,86315,86317,86319,86321,86323,86325],{"class":242,"line":34918},[240,86304,54343],{"class":257},[240,86306,56334],{"class":436},[240,86308,789],{"class":257},[240,86310,81815],{"class":443},[240,86312,76164],{"class":257},[240,86314,440],{"class":288},[240,86316,81962],{"class":257},[240,86318,75959],{"class":436},[240,86320,789],{"class":257},[240,86322,81709],{"class":792},[240,86324,81712],{"class":288},[240,86326,258],{"class":257},[240,86328,86329],{"class":242,"line":34934},[240,86330,86331],{"class":246},"      \u002F\u002F 对象解构\n",[240,86333,86334,86336,86338,86340,86342,86344,86346,86349,86351,86353,86355,86358,86360,86363,86365,86367],{"class":242,"line":34940},[240,86335,60159],{"class":288},[240,86337,81721],{"class":257},[240,86339,81734],{"class":264},[240,86341,1277],{"class":257},[240,86343,81724],{"class":264},[240,86345,1277],{"class":257},[240,86347,86348],{"class":264},"count",[240,86350,1277],{"class":257},[240,86352,81729],{"class":264},[240,86354,1277],{"class":257},[240,86356,86357],{"class":264},"spec",[240,86359,1277],{"class":257},[240,86361,86362],{"class":264},"gift",[240,86364,81737],{"class":257},[240,86366,440],{"class":288},[240,86368,81742],{"class":257},[240,86370,86371],{"class":242,"line":34954},[240,86372,86373],{"class":246},"      \u002F\u002F 规格文字模块处理\n",[240,86375,86376,86378,86381,86383,86385,86387,86389,86391,86393,86395],{"class":242,"line":34960},[240,86377,60159],{"class":288},[240,86379,86380],{"class":264}," text",[240,86382,15514],{"class":288},[240,86384,83852],{"class":257},[240,86386,83855],{"class":436},[240,86388,83858],{"class":257},[240,86390,76138],{"class":436},[240,86392,789],{"class":257},[240,86394,83865],{"class":443},[240,86396,2129],{"class":257},[240,86398,86399],{"class":242,"line":34966},[240,86400,86401],{"class":246},"      \u002F\u002F 处理赠品模块\n",[240,86403,86404,86406,86408,86410,86413,86415,86417,86419,86421,86424,86426,86428,86430,86432,86434,86437,86439,86442,86444,86446,86448,86450,86452,86454],{"class":242,"line":34977},[240,86405,60159],{"class":288},[240,86407,75834],{"class":264},[240,86409,15514],{"class":288},[240,86411,86412],{"class":257}," gift ",[240,86414,3079],{"class":288},[240,86416,85026],{"class":257},[240,86418,85029],{"class":436},[240,86420,789],{"class":257},[240,86422,86423],{"class":443},"','",[240,86425,32772],{"class":257},[240,86427,75959],{"class":436},[240,86429,789],{"class":257},[240,86431,81709],{"class":792},[240,86433,81712],{"class":288},[240,86435,86436],{"class":443}," `\u003Cspan class=\"tag\">【赠品】${",[240,86438,81709],{"class":257},[240,86440,86441],{"class":443},"}\u003C\u002Fspan>`",[240,86443,32772],{"class":257},[240,86445,76138],{"class":436},[240,86447,789],{"class":257},[240,86449,76143],{"class":443},[240,86451,1230],{"class":257},[240,86453,2954],{"class":288},[240,86455,72027],{"class":443},[240,86457,86458],{"class":242,"line":34983},[240,86459,86460],{"class":246},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[240,86462,86463,86465,86468,86470,86473,86475,86477,86479,86482,86484,86486,86488,86491,86493,86495],{"class":242,"line":34989},[240,86464,60159],{"class":288},[240,86466,86467],{"class":264}," subtotal",[240,86469,15514],{"class":288},[240,86471,86472],{"class":257}," ((price ",[240,86474,2554],{"class":288},[240,86476,7705],{"class":264},[240,86478,8469],{"class":288},[240,86480,86481],{"class":257}," count) ",[240,86483,2683],{"class":288},[240,86485,7705],{"class":264},[240,86487,32772],{"class":257},[240,86489,86490],{"class":436},"toFixed",[240,86492,789],{"class":257},[240,86494,1668],{"class":264},[240,86496,2129],{"class":257},[240,86498,86499],{"class":242,"line":34999},[240,86500,4353],{"emptyLinePlaceholder":2051},[240,86502,86503,86505],{"class":242,"line":35005},[240,86504,75897],{"class":288},[240,86506,72091],{"class":443},[240,86508,86509],{"class":242,"line":35016},[240,86510,86511],{"class":443},"        \u003Cdiv class=\"item\">\n",[240,86513,86514,86517,86519],{"class":242,"line":35022},[240,86515,86516],{"class":443},"          \u003Cimg src=\"${",[240,86518,81734],{"class":257},[240,86520,81766],{"class":443},[240,86522,86523,86526,86528,86531,86533],{"class":242,"line":35032},[240,86524,86525],{"class":443},"          \u003Cp class=\"name\">${",[240,86527,81724],{"class":257},[240,86529,86530],{"class":443},"}${",[240,86532,3262],{"class":257},[240,86534,81776],{"class":443},[240,86536,86537,86540,86542],{"class":242,"line":35037},[240,86538,86539],{"class":443},"          \u003Cp class=\"spec\">${",[240,86541,7139],{"class":257},[240,86543,81776],{"class":443},[240,86545,86546,86549,86551,86553,86555,86557,86559,86561],{"class":242,"line":35043},[240,86547,86548],{"class":443},"          \u003Cp class=\"price\">${",[240,86550,81729],{"class":257},[240,86552,2657],{"class":443},[240,86554,86490],{"class":436},[240,86556,789],{"class":443},[240,86558,1668],{"class":264},[240,86560,2529],{"class":443},[240,86562,81776],{"class":443},[240,86564,86565,86568,86570],{"class":242,"line":35092},[240,86566,86567],{"class":443},"          \u003Cp class=\"count\">x${",[240,86569,86348],{"class":257},[240,86571,81776],{"class":443},[240,86573,86574,86577,86580],{"class":242,"line":35139},[240,86575,86576],{"class":443},"          \u003Cp class=\"sub-total\">${",[240,86578,86579],{"class":257},"subtotal",[240,86581,81776],{"class":443},[240,86583,86584],{"class":242,"line":35144},[240,86585,86586],{"class":443},"        \u003C\u002Fdiv> \n",[240,86588,86589],{"class":242,"line":35150},[240,86590,86591],{"class":443},"             `\n",[240,86593,86594,86597,86599,86601,86603],{"class":242,"line":35169},[240,86595,86596],{"class":257},"    }).",[240,86598,76138],{"class":436},[240,86600,789],{"class":257},[240,86602,76143],{"class":443},[240,86604,2129],{"class":257},[240,86606,86607],{"class":242,"line":35175},[240,86608,86609],{"class":246},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[240,86611,86612,86614,86616,86618,86620,86623,86625,86628,86630,86632,86634,86637,86640,86642,86645,86647,86649,86651,86654,86656,86658,86660,86662],{"class":242,"line":35195},[240,86613,13172],{"class":288},[240,86615,64708],{"class":264},[240,86617,15514],{"class":288},[240,86619,81962],{"class":257},[240,86621,86622],{"class":436},"reduce",[240,86624,4329],{"class":257},[240,86626,86627],{"class":792},"prev",[240,86629,1277],{"class":257},[240,86631,81709],{"class":792},[240,86633,1230],{"class":257},[240,86635,86636],{"class":288},"=>",[240,86638,86639],{"class":257}," prev ",[240,86641,2580],{"class":288},[240,86643,86644],{"class":257}," (item.price ",[240,86646,2554],{"class":288},[240,86648,7705],{"class":264},[240,86650,8469],{"class":288},[240,86652,86653],{"class":257}," item.count) ",[240,86655,2683],{"class":288},[240,86657,7705],{"class":264},[240,86659,1277],{"class":257},[240,86661,1274],{"class":264},[240,86663,2129],{"class":257},[240,86665,86666,86668,86670,86672,86675,86677,86679,86682,86684,86686,86688],{"class":242,"line":35201},[240,86667,54343],{"class":257},[240,86669,56334],{"class":436},[240,86671,789],{"class":257},[240,86673,86674],{"class":443},"'.amount'",[240,86676,76164],{"class":257},[240,86678,440],{"class":288},[240,86680,86681],{"class":257}," total.",[240,86683,86490],{"class":436},[240,86685,789],{"class":257},[240,86687,1668],{"class":264},[240,86689,2129],{"class":257},[240,86691,86692,86694,86696],{"class":242,"line":35207},[240,86693,54353],{"class":257},[240,86695,53751],{"class":253},[240,86697,447],{"class":257},[240,86699,86700,86702,86704],{"class":242,"line":35217},[240,86701,592],{"class":257},[240,86703,53738],{"class":253},[240,86705,447],{"class":257},[240,86707,86708],{"class":242,"line":35222},[240,86709,4353],{"emptyLinePlaceholder":2051},[240,86711,86712,86714,86716],{"class":242,"line":35228},[240,86713,592],{"class":257},[240,86715,52581],{"class":253},[240,86717,447],{"class":257},[14,86719,86721],{"id":86720},"_411-编程思想","4.11 编程思想",[32,86723,86725],{"id":86724},"_4111-面向过程介绍","4.11.1 面向过程介绍",[19,86727,86728,86731],{},[68,86729,86730],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[19,86733,86734],{},"调用就可以了",[19,86736,86737],{},[219,86738],{"alt":236,"src":86739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[32,86741,86743],{"id":86742},"_4112-面向对象","4.11.2 面向对象",[19,86745,86746],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[19,86748,86749],{},[219,86750],{"alt":236,"src":86751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[19,86753,86754],{},"面向对象的特性：",[3100,86756,86757,86760,86763],{},[1829,86758,86759],{},"封装性",[1829,86761,86762],{},"继承性",[1829,86764,86765],{},"多态性",[32,86767,86769],{"id":86768},"_4113-两者比较","4.11.3 两者比较",[19,86771,86772],{},[219,86773],{"alt":236,"src":86774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[14,86776,86778],{"id":86777},"_412-构造函数回顾","4.12 构造函数回顾",[19,86780,86781],{},[219,86782],{"alt":236,"src":86783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[19,86785,86786],{},[219,86787],{"alt":236,"src":86788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[19,86790,86791],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[19,86793,86794],{},[219,86795],{"alt":236,"src":86796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[14,86798,86800],{"id":86799},"_413-原型","4.13 原型",[32,86802,86804],{"id":86803},"_4131-原型对象的认识","4.13.1 原型对象的认识",[19,86806,86807],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[19,86809,86810],{},[219,86811],{"alt":236,"src":86812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[19,86814,86815],{},[219,86816],{"alt":236,"src":86817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[19,86819,86820],{},"原型是构造函数的属性，它也是一个对象",[19,86822,86823],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[19,86825,86826],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[231,86828,86830],{"className":55003,"code":86829,"language":55005,"meta":236,"style":236},"\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",[23,86831,86832,86840,86845,86853,86858,86863,86868,86873,86878,86882,86886,86890,86895,86900,86904,86909,86914,86919,86924,86929,86933,86941],{"__ignoreMap":236},[240,86833,86834,86836,86838],{"class":242,"line":243},[240,86835,431],{"class":257},[240,86837,53738],{"class":253},[240,86839,447],{"class":257},[240,86841,86842],{"class":242,"line":250},[240,86843,86844],{"class":246},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[240,86846,86847,86849,86851],{"class":242,"line":261},[240,86848,452],{"class":257},[240,86850,53751],{"class":253},[240,86852,447],{"class":257},[240,86854,86855],{"class":242,"line":277},[240,86856,86857],{"class":257},"    function Star(uname, age) {\n",[240,86859,86860],{"class":242,"line":294},[240,86861,86862],{"class":257},"      this.uname = uname,\n",[240,86864,86865],{"class":242,"line":309},[240,86866,86867],{"class":257},"        this.age = age\n",[240,86869,86870],{"class":242,"line":529},[240,86871,86872],{"class":257},"      \u002F\u002F this.sing = function () {\n",[240,86874,86875],{"class":242,"line":549},[240,86876,86877],{"class":257},"      \u002F\u002F   console.log('唱歌')\n",[240,86879,86880],{"class":242,"line":569},[240,86881,4353],{"emptyLinePlaceholder":2051},[240,86883,86884],{"class":242,"line":589},[240,86885,61968],{"class":257},[240,86887,86888],{"class":242,"line":715},[240,86889,4140],{"class":257},[240,86891,86892],{"class":242,"line":727},[240,86893,86894],{"class":257},"    Star.prototype.sing = function () {\n",[240,86896,86897],{"class":242,"line":1730},[240,86898,86899],{"class":257},"      console.log('唱歌')\n",[240,86901,86902],{"class":242,"line":3582},[240,86903,4140],{"class":257},[240,86905,86906],{"class":242,"line":3596},[240,86907,86908],{"class":257},"    \u002F\u002F console.dir(Star.prototype)\n",[240,86910,86911],{"class":242,"line":3601},[240,86912,86913],{"class":257},"    const pink = new Star('pink', 18)\n",[240,86915,86916],{"class":242,"line":3607},[240,86917,86918],{"class":257},"    const red = new Star('red', 20)\n",[240,86920,86921],{"class":242,"line":3628},[240,86922,86923],{"class":257},"    pink.sing()\n",[240,86925,86926],{"class":242,"line":3633},[240,86927,86928],{"class":257},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[240,86930,86931],{"class":242,"line":3647},[240,86932,4353],{"emptyLinePlaceholder":2051},[240,86934,86935,86937,86939],{"class":242,"line":3652},[240,86936,54353],{"class":257},[240,86938,53751],{"class":253},[240,86940,447],{"class":257},[240,86942,86943,86945,86947],{"class":242,"line":3681},[240,86944,592],{"class":257},[240,86946,53738],{"class":253},[240,86948,447],{"class":257},[19,86950,86951],{},[219,86952],{"alt":236,"src":86953},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[231,86955,86957],{"className":55003,"code":86956,"language":55005,"meta":236,"style":236},"\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",[23,86958,86959,86967,86975,86980,86985,86990,86995,86999,87004,87009,87014,87018,87023,87027,87031,87036,87040,87048],{"__ignoreMap":236},[240,86960,86961,86963,86965],{"class":242,"line":243},[240,86962,431],{"class":257},[240,86964,53738],{"class":253},[240,86966,447],{"class":257},[240,86968,86969,86971,86973],{"class":242,"line":250},[240,86970,452],{"class":257},[240,86972,53751],{"class":253},[240,86974,447],{"class":257},[240,86976,86977],{"class":242,"line":261},[240,86978,86979],{"class":257},"    let that\n",[240,86981,86982],{"class":242,"line":277},[240,86983,86984],{"class":257},"    function Star(uname) {\n",[240,86986,86987],{"class":242,"line":294},[240,86988,86989],{"class":257},"      this.uname = uname\n",[240,86991,86992],{"class":242,"line":309},[240,86993,86994],{"class":257},"      that = this\n",[240,86996,86997],{"class":242,"line":529},[240,86998,4140],{"class":257},[240,87000,87001],{"class":242,"line":549},[240,87002,87003],{"class":257},"    \u002F\u002F 实例对象是 ldh\n",[240,87005,87006],{"class":242,"line":569},[240,87007,87008],{"class":257},"    const ldh = new Star('刘德华')\n",[240,87010,87011],{"class":242,"line":589},[240,87012,87013],{"class":257},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[240,87015,87016],{"class":242,"line":715},[240,87017,4353],{"emptyLinePlaceholder":2051},[240,87019,87020],{"class":242,"line":727},[240,87021,87022],{"class":257},"    Star.sing = function () {\n",[240,87024,87025],{"class":242,"line":1730},[240,87026,86899],{"class":257},[240,87028,87029],{"class":242,"line":3582},[240,87030,4140],{"class":257},[240,87032,87033],{"class":242,"line":3596},[240,87034,87035],{"class":257},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[240,87037,87038],{"class":242,"line":3601},[240,87039,4353],{"emptyLinePlaceholder":2051},[240,87041,87042,87044,87046],{"class":242,"line":3607},[240,87043,54353],{"class":257},[240,87045,53751],{"class":253},[240,87047,447],{"class":257},[240,87049,87050,87052,87054],{"class":242,"line":3628},[240,87051,592],{"class":257},[240,87053,53738],{"class":253},[240,87055,447],{"class":257},[19,87057,87058],{},"构造函数的this指向的是实例对象；",[19,87060,87061],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[32,87063,87065],{"id":87064},"_4132-数组扩展方法","4.13.2 数组扩展方法",[19,87067,87068],{},[219,87069],{"alt":236,"src":87070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[231,87072,87074],{"className":55003,"code":87073,"language":55005,"meta":236,"style":236},"\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",[23,87075,87076,87084,87092,87097,87102,87107,87112,87117,87122,87127,87132,87137,87142,87146,87151,87156,87161,87166,87170,87175,87180,87185,87190,87194,87199,87204,87209,87214,87218,87223,87227,87235],{"__ignoreMap":236},[240,87077,87078,87080,87082],{"class":242,"line":243},[240,87079,431],{"class":257},[240,87081,53738],{"class":253},[240,87083,447],{"class":257},[240,87085,87086,87088,87090],{"class":242,"line":250},[240,87087,452],{"class":257},[240,87089,53751],{"class":253},[240,87091,447],{"class":257},[240,87093,87094],{"class":242,"line":261},[240,87095,87096],{"class":257},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[240,87098,87099],{"class":242,"line":277},[240,87100,87101],{"class":257},"    const arr = [1, 2, 3]\n",[240,87103,87104],{"class":242,"line":294},[240,87105,87106],{"class":257},"    \u002F\u002F 自己定义数组的扩展方法\n",[240,87108,87109],{"class":242,"line":309},[240,87110,87111],{"class":257},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[240,87113,87114],{"class":242,"line":529},[240,87115,87116],{"class":257},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[240,87118,87119],{"class":242,"line":549},[240,87120,87121],{"class":257},"    \u002F\u002F ①.最大值\n",[240,87123,87124],{"class":242,"line":569},[240,87125,87126],{"class":257},"    Array.prototype.max = function () {\n",[240,87128,87129],{"class":242,"line":589},[240,87130,87131],{"class":257},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[240,87133,87134],{"class":242,"line":715},[240,87135,87136],{"class":257},"      return Math.max(...this)\n",[240,87138,87139],{"class":242,"line":727},[240,87140,87141],{"class":257},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[240,87143,87144],{"class":242,"line":1730},[240,87145,4140],{"class":257},[240,87147,87148],{"class":242,"line":3582},[240,87149,87150],{"class":257},"    console.log(arr.max())\n",[240,87152,87153],{"class":242,"line":3596},[240,87154,87155],{"class":257},"    \u002F\u002F ②最小值\n",[240,87157,87158],{"class":242,"line":3601},[240,87159,87160],{"class":257},"    Array.prototype.min = function () {\n",[240,87162,87163],{"class":242,"line":3607},[240,87164,87165],{"class":257},"      return Math.min(...this)\n",[240,87167,87168],{"class":242,"line":3628},[240,87169,4140],{"class":257},[240,87171,87172],{"class":242,"line":3633},[240,87173,87174],{"class":257},"    console.log(arr.min())\n",[240,87176,87177],{"class":242,"line":3647},[240,87178,87179],{"class":257},"    \u002F\u002F③求和\n",[240,87181,87182],{"class":242,"line":3652},[240,87183,87184],{"class":257},"    Array.prototype.sum = function () {\n",[240,87186,87187],{"class":242,"line":3681},[240,87188,87189],{"class":257},"      return this.reduce((prev, current) => prev + current, 0)\n",[240,87191,87192],{"class":242,"line":3686},[240,87193,4140],{"class":257},[240,87195,87196],{"class":242,"line":3703},[240,87197,87198],{"class":257},"    console.log(arr.sum())\n",[240,87200,87201],{"class":242,"line":3708},[240,87202,87203],{"class":257},"    \u002F\u002F ③排序\n",[240,87205,87206],{"class":242,"line":3713},[240,87207,87208],{"class":257},"    Array.prototype.rever = function () {\n",[240,87210,87211],{"class":242,"line":3718},[240,87212,87213],{"class":257},"      return this.reverse()\n",[240,87215,87216],{"class":242,"line":3732},[240,87217,4140],{"class":257},[240,87219,87220],{"class":242,"line":3737},[240,87221,87222],{"class":257},"    console.log(arr.rever())\n",[240,87224,87225],{"class":242,"line":4530},[240,87226,4353],{"emptyLinePlaceholder":2051},[240,87228,87229,87231,87233],{"class":242,"line":4544},[240,87230,54353],{"class":257},[240,87232,53751],{"class":253},[240,87234,447],{"class":257},[240,87236,87237,87239,87241],{"class":242,"line":4552},[240,87238,592],{"class":257},[240,87240,53738],{"class":253},[240,87242,447],{"class":257},[19,87244,87245],{},[219,87246],{"alt":236,"src":87247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[32,87249,87251],{"id":87250},"_4133-constructor-属性","4.13.3 constructor 属性",[19,87253,87254],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[19,87256,87257],{},[219,87258],{"alt":236,"src":87259},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[231,87261,87263],{"className":55003,"code":87262,"language":55005,"meta":236,"style":236},"\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",[23,87264,87265,87273,87281,87286,87291,87295,87300,87305,87310,87318],{"__ignoreMap":236},[240,87266,87267,87269,87271],{"class":242,"line":243},[240,87268,431],{"class":257},[240,87270,53738],{"class":253},[240,87272,447],{"class":257},[240,87274,87275,87277,87279],{"class":242,"line":250},[240,87276,452],{"class":257},[240,87278,53751],{"class":253},[240,87280,447],{"class":257},[240,87282,87283],{"class":242,"line":261},[240,87284,87285],{"class":257},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[240,87287,87288],{"class":242,"line":277},[240,87289,87290],{"class":257},"    function Star() {\n",[240,87292,87293],{"class":242,"line":294},[240,87294,4140],{"class":257},[240,87296,87297],{"class":242,"line":309},[240,87298,87299],{"class":257},"    const ldh = new Star()\n",[240,87301,87302],{"class":242,"line":529},[240,87303,87304],{"class":257},"    console.log(Star.prototype)\n",[240,87306,87307],{"class":242,"line":549},[240,87308,87309],{"class":257},"    console.log(Star.prototype.constructor === Star)\n",[240,87311,87312,87314,87316],{"class":242,"line":569},[240,87313,54353],{"class":257},[240,87315,53751],{"class":253},[240,87317,447],{"class":257},[240,87319,87320,87322,87324],{"class":242,"line":589},[240,87321,592],{"class":257},[240,87323,53738],{"class":253},[240,87325,447],{"class":257},[19,87327,87328],{},[219,87329],{"alt":236,"src":87330},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[19,87332,87333],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[231,87335,87337],{"className":55003,"code":87336,"language":55005,"meta":236,"style":236},"  \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",[23,87338,87339,87347,87351,87355,87359,87364,87369,87374,87378,87383,87388,87393,87398,87403,87408,87412,87416,87421,87426,87431,87435,87440,87445,87449,87453,87457],{"__ignoreMap":236},[240,87340,87341,87343,87345],{"class":242,"line":243},[240,87342,452],{"class":257},[240,87344,53751],{"class":253},[240,87346,447],{"class":257},[240,87348,87349],{"class":242,"line":250},[240,87350,87285],{"class":257},[240,87352,87353],{"class":242,"line":261},[240,87354,87290],{"class":257},[240,87356,87357],{"class":242,"line":277},[240,87358,4140],{"class":257},[240,87360,87361],{"class":242,"line":294},[240,87362,87363],{"class":257},"    \u002F\u002F const ldh = new Star()\n",[240,87365,87366],{"class":242,"line":309},[240,87367,87368],{"class":257},"    \u002F\u002F console.log(Star.prototype)\n",[240,87370,87371],{"class":242,"line":529},[240,87372,87373],{"class":257},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[240,87375,87376],{"class":242,"line":549},[240,87377,4353],{"emptyLinePlaceholder":2051},[240,87379,87380],{"class":242,"line":569},[240,87381,87382],{"class":257},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[240,87384,87385],{"class":242,"line":589},[240,87386,87387],{"class":257},"    \u002F\u002F Star.prototype.sing = function () {\n",[240,87389,87390],{"class":242,"line":715},[240,87391,87392],{"class":257},"    \u002F\u002F   console.log('唱歌')\n",[240,87394,87395],{"class":242,"line":727},[240,87396,87397],{"class":257},"    \u002F\u002F }\n",[240,87399,87400],{"class":242,"line":1730},[240,87401,87402],{"class":257},"    \u002F\u002F Star.prototype.dance = function () {\n",[240,87404,87405],{"class":242,"line":3582},[240,87406,87407],{"class":257},"    \u002F\u002F   console.log('跳舞')\n",[240,87409,87410],{"class":242,"line":3596},[240,87411,87397],{"class":257},[240,87413,87414],{"class":242,"line":3601},[240,87415,87304],{"class":257},[240,87417,87418],{"class":242,"line":3607},[240,87419,87420],{"class":257},"    Star.prototype = {\n",[240,87422,87423],{"class":242,"line":3628},[240,87424,87425],{"class":257},"      sing: function () {\n",[240,87427,87428],{"class":242,"line":3633},[240,87429,87430],{"class":257},"        console.log('唱歌')\n",[240,87432,87433],{"class":242,"line":3647},[240,87434,79806],{"class":257},[240,87436,87437],{"class":242,"line":3652},[240,87438,87439],{"class":257},"      dance: function () {\n",[240,87441,87442],{"class":242,"line":3681},[240,87443,87444],{"class":257},"        console.log('跳舞')\n",[240,87446,87447],{"class":242,"line":3686},[240,87448,54334],{"class":257},[240,87450,87451],{"class":242,"line":3703},[240,87452,4140],{"class":257},[240,87454,87455],{"class":242,"line":3708},[240,87456,87304],{"class":257},[240,87458,87459,87461,87463],{"class":242,"line":3713},[240,87460,54353],{"class":257},[240,87462,53751],{"class":253},[240,87464,447],{"class":257},[19,87466,87467],{},"进行输出结果后会发现：",[19,87469,87470],{},[219,87471],{"alt":236,"src":87472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[19,87474,87475],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[19,87477,87478],{},"所以，要重新指回创造这个原型对象的构造函数",[231,87480,87482],{"className":73129,"code":87481,"language":73131,"meta":236,"style":236},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[23,87483,87484,87498,87503,87508,87519,87532,87537,87548,87562,87566],{"__ignoreMap":236},[240,87485,87486,87489,87491,87494,87496],{"class":242,"line":243},[240,87487,87488],{"class":264},"Star",[240,87490,2657],{"class":257},[240,87492,87493],{"class":264},"prototype",[240,87495,15514],{"class":288},[240,87497,258],{"class":257},[240,87499,87500],{"class":242,"line":250},[240,87501,87502],{"class":246},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[240,87504,87505],{"class":242,"line":261},[240,87506,87507],{"class":257},"  constructor: Star,\n",[240,87509,87510,87513,87515,87517],{"class":242,"line":277},[240,87511,87512],{"class":436},"  sing",[240,87514,268],{"class":257},[240,87516,56384],{"class":288},[240,87518,56387],{"class":257},[240,87520,87521,87523,87525,87527,87530],{"class":242,"line":294},[240,87522,75668],{"class":257},[240,87524,60178],{"class":436},[240,87526,789],{"class":257},[240,87528,87529],{"class":443},"'唱歌'",[240,87531,2129],{"class":257},[240,87533,87534],{"class":242,"line":309},[240,87535,87536],{"class":257},"   },\n",[240,87538,87539,87542,87544,87546],{"class":242,"line":529},[240,87540,87541],{"class":436},"   dance",[240,87543,268],{"class":257},[240,87545,56384],{"class":288},[240,87547,56387],{"class":257},[240,87549,87550,87553,87555,87557,87560],{"class":242,"line":549},[240,87551,87552],{"class":257},"     console.",[240,87554,60178],{"class":436},[240,87556,789],{"class":257},[240,87558,87559],{"class":443},"'跳舞'",[240,87561,2129],{"class":257},[240,87563,87564],{"class":242,"line":569},[240,87565,6261],{"class":257},[240,87567,87568],{"class":242,"line":589},[240,87569,312],{"class":257},[19,87571,87572],{},[219,87573],{"alt":236,"src":87574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[19,87576,87577],{},"总结1：",[19,87579,87580],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[19,87582,87583],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[19,87585,87586],{},"constructor指的是他的来源",[19,87588,87589],{},[219,87590],{"alt":236,"src":87591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[19,87593,87594],{},[219,87595],{"alt":236,"src":87596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[19,87598,87599],{},"总结2：",[19,87601,87602],{},[219,87603],{"alt":236,"src":87604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[19,87606,87607],{},[219,87608],{"alt":236,"src":87609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[19,87611,87612],{},[219,87613],{"alt":236,"src":87614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[32,87616,87618],{"id":87617},"_4134-对象原型","4.13.4 对象原型",[19,87620,87621],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[19,87623,87624],{},"对象原型就是__proto__这个属性",[19,87626,87627],{},[219,87628],{"alt":236,"src":87629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[19,87631,87632],{},[219,87633],{"alt":236,"src":87634},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[19,87636,87637],{},[219,87638],{"alt":236,"src":87639},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[19,87641,87642],{},[219,87643],{"alt":236,"src":87644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[231,87646,87648],{"className":55003,"code":87647,"language":55005,"meta":236,"style":236},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[23,87649,87650,87658,87666,87670,87674,87678,87683,87691],{"__ignoreMap":236},[240,87651,87652,87654,87656],{"class":242,"line":243},[240,87653,431],{"class":257},[240,87655,53738],{"class":253},[240,87657,447],{"class":257},[240,87659,87660,87662,87664],{"class":242,"line":250},[240,87661,452],{"class":257},[240,87663,53751],{"class":253},[240,87665,447],{"class":257},[240,87667,87668],{"class":242,"line":261},[240,87669,87290],{"class":257},[240,87671,87672],{"class":242,"line":277},[240,87673,4140],{"class":257},[240,87675,87676],{"class":242,"line":294},[240,87677,87299],{"class":257},[240,87679,87680],{"class":242,"line":309},[240,87681,87682],{"class":257},"    console.log(ldh)\n",[240,87684,87685,87687,87689],{"class":242,"line":529},[240,87686,54353],{"class":257},[240,87688,53751],{"class":253},[240,87690,447],{"class":257},[240,87692,87693,87695,87697],{"class":242,"line":549},[240,87694,592],{"class":257},[240,87696,53738],{"class":253},[240,87698,447],{"class":257},[19,87700,87701],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[19,87703,87704],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[19,87706,87707],{},[219,87708],{"alt":236,"src":87709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[19,87711,87712],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[19,87714,87715],{},"对象原型指向原型对象",[19,87717,87718],{},[219,87719],{"alt":236,"src":87720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[19,87722,87723],{},[219,87724],{"alt":236,"src":87725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[19,87727,87728],{},[219,87729],{"alt":236,"src":87730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[32,87732,87734],{"id":87733},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[19,87736,87737],{},[219,87738],{"alt":236,"src":87739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[1826,87741,87742,87745,87748,87751],{},[1829,87743,87744],{},"构造函数通过new的形式实例化得到实例对象",[1829,87746,87747],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[1829,87749,87750],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[1829,87752,87753],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[19,87755,87756],{},[219,87757],{"alt":236,"src":87758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[19,87760,87761],{},"题目梳理：",[19,87763,87764],{},[219,87765],{"alt":236,"src":87766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[32,87768,87770],{"id":87769},"_4136-原型继承","4.13.6 原型继承",[19,87772,87773],{},[219,87774],{"alt":236,"src":87775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[19,87777,87778],{},[219,87779],{"alt":236,"src":87780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[19,87782,87783],{},[219,87784],{"alt":236,"src":87785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[19,87787,87788],{},[219,87789],{"alt":236,"src":87790},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[19,87792,87793],{},[219,87794],{"alt":236,"src":87795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[19,87797,87798],{},[219,87799],{"alt":236,"src":87800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[19,87802,87803],{},[219,87804],{"alt":236,"src":87805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[19,87807,87808],{},[219,87809],{"alt":236,"src":87810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[19,87812,87813],{},"回顾：构造函数每次new得到对象都是不同的",[32,87815,87817],{"id":87816},"_4137-原型链","4.13.7 原型链",[19,87819,87820],{},[219,87821],{"alt":236,"src":87822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[19,87824,87825],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[19,87827,87828],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[19,87830,87831],{},"大哥是Object",[19,87833,87834],{},[219,87835],{"alt":236,"src":87836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[19,87838,87839],{},[219,87840],{"alt":236,"src":87841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[19,87843,87844],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[19,87846,87847],{},"万物皆对象",[32,87849,87851],{"id":87850},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[19,87853,87854],{},"模态框",[19,87856,87857],{},"以后遇见这个效果直接使用这个就行",[19,87859,87860],{},[219,87861],{"alt":236,"src":87862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[19,87864,87865],{},[219,87866],{"alt":236,"src":87867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[19,87869,87870],{},[219,87871],{"alt":236,"src":87872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[19,87874,87875],{},[219,87876],{"alt":236,"src":87877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[19,87879,87880],{},"补充知识点：",[1826,87882,87883],{},[1829,87884,87885],{},"append()",[19,87887,87888],{},[219,87889],{"alt":236,"src":87890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[231,87892,87894],{"className":52579,"code":87893,"language":52581,"meta":236,"style":236},"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",[23,87895,87896,87901,87906,87911,87915,87919,87923,87928,87933,87938,87942],{"__ignoreMap":236},[240,87897,87898],{"class":242,"line":243},[240,87899,87900],{"class":257},"append(param1)\n",[240,87902,87903],{"class":242,"line":250},[240,87904,87905],{"class":257},"append(param1, param2)\n",[240,87907,87908],{"class":242,"line":261},[240,87909,87910],{"class":257},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[240,87912,87913],{"class":242,"line":277},[240,87914,4353],{"emptyLinePlaceholder":2051},[240,87916,87917],{"class":242,"line":294},[240,87918,4353],{"emptyLinePlaceholder":2051},[240,87920,87921],{"class":242,"line":309},[240,87922,4353],{"emptyLinePlaceholder":2051},[240,87924,87925],{"class":242,"line":529},[240,87926,87927],{"class":257},"let div = document.createElement(\"div\");\n",[240,87929,87930],{"class":242,"line":549},[240,87931,87932],{"class":257},"let p = document.createElement(\"p\");\n",[240,87934,87935],{"class":242,"line":569},[240,87936,87937],{"class":257},"div.append(p);\n",[240,87939,87940],{"class":242,"line":589},[240,87941,4353],{"emptyLinePlaceholder":2051},[240,87943,87944,87947,87949],{"class":242,"line":715},[240,87945,87946],{"class":257},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[240,87948,19],{"class":253},[240,87950,87951],{"class":257},"> ]\n",[1826,87953,87954],{"start":250},[1829,87955,87956],{},"remove()",[19,87958,87959],{},"自己删自己",[19,87961,87962],{},[219,87963],{"alt":236,"src":87964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[231,87966,87968],{"className":52579,"code":87967,"language":52581,"meta":236,"style":236},"\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",[23,87969,87970,87980,87994,87998,88006,88020,88040,88052,88060,88067,88079,88092,88127,88139,88149,88161,88173,88185,88212,88222,88226,88230,88239,88251,88265,88275,88287,88291,88295,88305,88316,88326,88336,88349,88362,88372,88376,88380,88389,88399,88411,88415,88419,88428,88438,88448,88460,88464,88468,88478,88494,88505,88515,88525,88537,88549,88561,88565,88569,88582,88593,88597,88605,88613,88617,88625,88645,88665,88673,88678,88704,88709,88714,88733,88738,88750,88755,88766,88776,88786,88791,88796,88800,88805,88810,88815,88835,88840,88860,88865,88879,88884,88889,88894,88910,88914,88919,88948,88953,88958,88963,88974,88978,88982,88986,88991,89016,89021,89046,89051,89060,89064,89069,89094,89098,89123,89127,89136,89140,89145,89163,89173,89177,89185,89193,89197],{"__ignoreMap":236},[240,87971,87972,87974,87976,87978],{"class":242,"line":243},[240,87973,53243],{"class":257},[240,87975,53246],{"class":253},[240,87977,53249],{"class":436},[240,87979,447],{"class":257},[240,87981,87982,87984,87986,87988,87990,87992],{"class":242,"line":250},[240,87983,431],{"class":257},[240,87985,52581],{"class":253},[240,87987,53260],{"class":436},[240,87989,440],{"class":257},[240,87991,53265],{"class":443},[240,87993,447],{"class":257},[240,87995,87996],{"class":242,"line":261},[240,87997,4353],{"emptyLinePlaceholder":2051},[240,87999,88000,88002,88004],{"class":242,"line":277},[240,88001,431],{"class":257},[240,88003,53278],{"class":253},[240,88005,447],{"class":257},[240,88007,88008,88010,88012,88014,88016,88018],{"class":242,"line":294},[240,88009,452],{"class":257},[240,88011,53288],{"class":253},[240,88013,53291],{"class":436},[240,88015,440],{"class":257},[240,88017,53296],{"class":443},[240,88019,447],{"class":257},[240,88021,88022,88024,88026,88028,88030,88032,88034,88036,88038],{"class":242,"line":309},[240,88023,452],{"class":257},[240,88025,53288],{"class":253},[240,88027,16869],{"class":436},[240,88029,440],{"class":257},[240,88031,53335],{"class":443},[240,88033,53315],{"class":436},[240,88035,440],{"class":257},[240,88037,53342],{"class":443},[240,88039,447],{"class":257},[240,88041,88042,88044,88046,88048,88050],{"class":242,"line":529},[240,88043,452],{"class":257},[240,88045,53351],{"class":253},[240,88047,53354],{"class":257},[240,88049,53351],{"class":253},[240,88051,447],{"class":257},[240,88053,88054,88056,88058],{"class":242,"line":549},[240,88055,452],{"class":257},[240,88057,2019],{"class":253},[240,88059,447],{"class":257},[240,88061,88062,88065],{"class":242,"line":569},[240,88063,88064],{"class":436},"    .modal",[240,88066,258],{"class":257},[240,88068,88069,88071,88073,88075,88077],{"class":242,"line":589},[240,88070,56705],{"class":264},[240,88072,268],{"class":257},[240,88074,5925],{"class":264},[240,88076,289],{"class":288},[240,88078,274],{"class":257},[240,88080,88081,88084,88086,88088,88090],{"class":242,"line":715},[240,88082,88083],{"class":264},"      min-height",[240,88085,268],{"class":257},[240,88087,285],{"class":264},[240,88089,289],{"class":288},[240,88091,274],{"class":257},[240,88093,88094,88096,88098,88100,88102,88104,88106,88108,88110,88112,88114,88116,88118,88120,88122,88125],{"class":242,"line":727},[240,88095,80664],{"class":264},[240,88097,268],{"class":257},[240,88099,1274],{"class":264},[240,88101,6045],{"class":264},[240,88103,3991],{"class":264},[240,88105,289],{"class":288},[240,88107,80681],{"class":264},[240,88109,789],{"class":257},[240,88111,1274],{"class":264},[240,88113,1277],{"class":257},[240,88115,1274],{"class":264},[240,88117,1277],{"class":257},[240,88119,1274],{"class":264},[240,88121,1277],{"class":257},[240,88123,88124],{"class":264},"0.1",[240,88126,796],{"class":257},[240,88128,88129,88131,88133,88135,88137],{"class":242,"line":1730},[240,88130,57067],{"class":264},[240,88132,268],{"class":257},[240,88134,1716],{"class":264},[240,88136,289],{"class":288},[240,88138,274],{"class":257},[240,88140,88141,88143,88145,88147],{"class":242,"line":3582},[240,88142,56693],{"class":264},[240,88144,268],{"class":257},[240,88146,1158],{"class":264},[240,88148,274],{"class":257},[240,88150,88151,88154,88156,88159],{"class":242,"line":3596},[240,88152,88153],{"class":264},"      z-index",[240,88155,268],{"class":257},[240,88157,88158],{"class":264},"999",[240,88160,274],{"class":257},[240,88162,88163,88165,88167,88169,88171],{"class":242,"line":3601},[240,88164,56772],{"class":264},[240,88166,268],{"class":257},[240,88168,2754],{"class":264},[240,88170,2429],{"class":288},[240,88172,274],{"class":257},[240,88174,88175,88177,88179,88181,88183],{"class":242,"line":3607},[240,88176,56881],{"class":264},[240,88178,268],{"class":257},[240,88180,2754],{"class":264},[240,88182,2429],{"class":288},[240,88184,274],{"class":257},[240,88186,88187,88189,88191,88193,88195,88198,88200,88202,88204,88206,88208,88210],{"class":242,"line":3628},[240,88188,80705],{"class":264},[240,88190,268],{"class":257},[240,88192,80710],{"class":264},[240,88194,789],{"class":257},[240,88196,88197],{"class":264},"-50",[240,88199,2429],{"class":288},[240,88201,1277],{"class":257},[240,88203,88197],{"class":264},[240,88205,2429],{"class":288},[240,88207,1277],{"class":257},[240,88209,1274],{"class":264},[240,88211,796],{"class":257},[240,88213,88214,88216,88218,88220],{"class":242,"line":3633},[240,88215,56818],{"class":264},[240,88217,268],{"class":257},[240,88219,683],{"class":264},[240,88221,274],{"class":257},[240,88223,88224],{"class":242,"line":3647},[240,88225,4140],{"class":257},[240,88227,88228],{"class":242,"line":3652},[240,88229,4353],{"emptyLinePlaceholder":2051},[240,88231,88232,88234,88237],{"class":242,"line":3681},[240,88233,88064],{"class":436},[240,88235,88236],{"class":436}," .header",[240,88238,258],{"class":257},[240,88240,88241,88243,88245,88247,88249],{"class":242,"line":3686},[240,88242,59292],{"class":264},[240,88244,268],{"class":257},[240,88246,302],{"class":264},[240,88248,289],{"class":288},[240,88250,274],{"class":257},[240,88252,88253,88255,88257,88259,88261,88263],{"class":242,"line":3703},[240,88254,56630],{"class":264},[240,88256,268],{"class":257},[240,88258,1274],{"class":264},[240,88260,3991],{"class":264},[240,88262,289],{"class":288},[240,88264,274],{"class":257},[240,88266,88267,88269,88271,88273],{"class":242,"line":3708},[240,88268,56693],{"class":264},[240,88270,268],{"class":257},[240,88272,56698],{"class":264},[240,88274,274],{"class":257},[240,88276,88277,88279,88281,88283,88285],{"class":242,"line":3713},[240,88278,56856],{"class":264},[240,88280,268],{"class":257},[240,88282,1000],{"class":264},[240,88284,289],{"class":288},[240,88286,274],{"class":257},[240,88288,88289],{"class":242,"line":3718},[240,88290,4140],{"class":257},[240,88292,88293],{"class":242,"line":3732},[240,88294,4353],{"emptyLinePlaceholder":2051},[240,88296,88297,88299,88301,88303],{"class":242,"line":3737},[240,88298,88064],{"class":436},[240,88300,88236],{"class":436},[240,88302,4984],{"class":253},[240,88304,258],{"class":257},[240,88306,88307,88310,88312,88314],{"class":242,"line":4530},[240,88308,88309],{"class":264},"      font-style",[240,88311,268],{"class":257},[240,88313,65764],{"class":264},[240,88315,274],{"class":257},[240,88317,88318,88320,88322,88324],{"class":242,"line":4544},[240,88319,59349],{"class":264},[240,88321,268],{"class":257},[240,88323,63994],{"class":264},[240,88325,274],{"class":257},[240,88327,88328,88330,88332,88334],{"class":242,"line":4552},[240,88329,56693],{"class":264},[240,88331,268],{"class":257},[240,88333,56765],{"class":264},[240,88335,274],{"class":257},[240,88337,88338,88341,88343,88345,88347],{"class":242,"line":4557},[240,88339,88340],{"class":264},"      right",[240,88342,268],{"class":257},[240,88344,2674],{"class":264},[240,88346,289],{"class":288},[240,88348,274],{"class":257},[240,88350,88351,88353,88355,88358,88360],{"class":242,"line":4563},[240,88352,56881],{"class":264},[240,88354,268],{"class":257},[240,88356,88357],{"class":264},"-2",[240,88359,289],{"class":288},[240,88361,274],{"class":257},[240,88363,88364,88366,88368,88370],{"class":242,"line":4569},[240,88365,63949],{"class":264},[240,88367,268],{"class":257},[240,88369,63954],{"class":264},[240,88371,274],{"class":257},[240,88373,88374],{"class":242,"line":4574},[240,88375,4140],{"class":257},[240,88377,88378],{"class":242,"line":9899},[240,88379,4353],{"emptyLinePlaceholder":2051},[240,88381,88382,88384,88387],{"class":242,"line":9923},[240,88383,88064],{"class":436},[240,88385,88386],{"class":436}," .body",[240,88388,258],{"class":257},[240,88390,88391,88393,88395,88397],{"class":242,"line":9928},[240,88392,59219],{"class":264},[240,88394,268],{"class":257},[240,88396,971],{"class":264},[240,88398,274],{"class":257},[240,88400,88401,88403,88405,88407,88409],{"class":242,"line":9934},[240,88402,56630],{"class":264},[240,88404,268],{"class":257},[240,88406,2546],{"class":264},[240,88408,289],{"class":288},[240,88410,274],{"class":257},[240,88412,88413],{"class":242,"line":9961},[240,88414,4140],{"class":257},[240,88416,88417],{"class":242,"line":9966},[240,88418,4353],{"emptyLinePlaceholder":2051},[240,88420,88421,88423,88426],{"class":242,"line":9972},[240,88422,88064],{"class":436},[240,88424,88425],{"class":436}," .footer",[240,88427,258],{"class":257},[240,88429,88430,88432,88434,88436],{"class":242,"line":9984},[240,88431,56943],{"class":264},[240,88433,268],{"class":257},[240,88435,53420],{"class":264},[240,88437,274],{"class":257},[240,88439,88440,88442,88444,88446],{"class":242,"line":9996},[240,88441,56954],{"class":264},[240,88443,268],{"class":257},[240,88445,53522],{"class":264},[240,88447,274],{"class":257},[240,88449,88450,88452,88454,88456,88458],{"class":242,"line":10008},[240,88451,56630],{"class":264},[240,88453,268],{"class":257},[240,88455,2546],{"class":264},[240,88457,289],{"class":288},[240,88459,274],{"class":257},[240,88461,88462],{"class":242,"line":11667},[240,88463,4140],{"class":257},[240,88465,88466],{"class":242,"line":11692},[240,88467,4353],{"emptyLinePlaceholder":2051},[240,88469,88470,88472,88474,88476],{"class":242,"line":11715},[240,88471,88064],{"class":436},[240,88473,88425],{"class":436},[240,88475,609],{"class":253},[240,88477,258],{"class":257},[240,88479,88480,88482,88484,88486,88488,88490,88492],{"class":242,"line":11739},[240,88481,56630],{"class":264},[240,88483,268],{"class":257},[240,88485,1692],{"class":264},[240,88487,289],{"class":288},[240,88489,4036],{"class":264},[240,88491,289],{"class":288},[240,88493,274],{"class":257},[240,88495,88496,88498,88500,88503],{"class":242,"line":11744},[240,88497,63647],{"class":264},[240,88499,268],{"class":257},[240,88501,88502],{"class":264},"#ccc",[240,88504,274],{"class":257},[240,88506,88507,88509,88511,88513],{"class":242,"line":11749},[240,88508,65893],{"class":264},[240,88510,268],{"class":257},[240,88512,826],{"class":264},[240,88514,274],{"class":257},[240,88516,88517,88519,88521,88523],{"class":242,"line":11754},[240,88518,59349],{"class":264},[240,88520,268],{"class":257},[240,88522,683],{"class":264},[240,88524,274],{"class":257},[240,88526,88527,88529,88531,88533,88535],{"class":242,"line":11763},[240,88528,57067],{"class":264},[240,88530,268],{"class":257},[240,88532,1668],{"class":264},[240,88534,289],{"class":288},[240,88536,274],{"class":257},[240,88538,88539,88541,88543,88545,88547],{"class":242,"line":11768},[240,88540,63674],{"class":264},[240,88542,268],{"class":257},[240,88544,2546],{"class":264},[240,88546,289],{"class":288},[240,88548,274],{"class":257},[240,88550,88551,88553,88555,88557,88559],{"class":242,"line":11774},[240,88552,56856],{"class":264},[240,88554,268],{"class":257},[240,88556,2648],{"class":264},[240,88558,289],{"class":288},[240,88560,274],{"class":257},[240,88562,88563],{"class":242,"line":11795},[240,88564,4140],{"class":257},[240,88566,88567],{"class":242,"line":11801},[240,88568,4353],{"emptyLinePlaceholder":2051},[240,88570,88571,88573,88575,88577,88580],{"class":242,"line":11815},[240,88572,88064],{"class":436},[240,88574,88425],{"class":436},[240,88576,609],{"class":253},[240,88578,88579],{"class":436},".submit",[240,88581,258],{"class":257},[240,88583,88584,88586,88588,88591],{"class":242,"line":11821},[240,88585,56818],{"class":264},[240,88587,268],{"class":257},[240,88589,88590],{"class":264},"#369",[240,88592,274],{"class":257},[240,88594,88595],{"class":242,"line":11848},[240,88596,4140],{"class":257},[240,88598,88599,88601,88603],{"class":242,"line":11857},[240,88600,54353],{"class":257},[240,88602,2019],{"class":253},[240,88604,447],{"class":257},[240,88606,88607,88609,88611],{"class":242,"line":11863},[240,88608,592],{"class":257},[240,88610,53278],{"class":253},[240,88612,447],{"class":257},[240,88614,88615],{"class":242,"line":11871},[240,88616,4353],{"emptyLinePlaceholder":2051},[240,88618,88619,88621,88623],{"class":242,"line":11876},[240,88620,431],{"class":257},[240,88622,53738],{"class":253},[240,88624,447],{"class":257},[240,88626,88627,88629,88631,88633,88635,88638,88641,88643],{"class":242,"line":18552},[240,88628,452],{"class":257},[240,88630,55822],{"class":253},[240,88632,16908],{"class":436},[240,88634,440],{"class":257},[240,88636,88637],{"class":443},"\"delete\"",[240,88639,88640],{"class":257},">删除\u003C\u002F",[240,88642,55822],{"class":253},[240,88644,447],{"class":257},[240,88646,88647,88649,88651,88653,88655,88658,88661,88663],{"class":242,"line":18558},[240,88648,452],{"class":257},[240,88650,55822],{"class":253},[240,88652,16908],{"class":436},[240,88654,440],{"class":257},[240,88656,88657],{"class":443},"\"login\"",[240,88659,88660],{"class":257},">登录\u003C\u002F",[240,88662,55822],{"class":253},[240,88664,447],{"class":257},[240,88666,88667,88669,88671],{"class":242,"line":18581},[240,88668,452],{"class":257},[240,88670,53751],{"class":253},[240,88672,447],{"class":257},[240,88674,88675],{"class":242,"line":18587},[240,88676,88677],{"class":246},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[240,88679,88680,88682,88685,88687,88689,88691,88693,88695,88698,88700,88702],{"class":242,"line":18610},[240,88681,72007],{"class":288},[240,88683,88684],{"class":436}," Modal",[240,88686,789],{"class":257},[240,88688,53351],{"class":792},[240,88690,15514],{"class":288},[240,88692,71853],{"class":443},[240,88694,1277],{"class":257},[240,88696,88697],{"class":792},"message",[240,88699,15514],{"class":288},[240,88701,71853],{"class":443},[240,88703,14392],{"class":257},[240,88705,88706],{"class":242,"line":18624},[240,88707,88708],{"class":246},"      \u002F\u002F 创建Model 模态框盒子\n",[240,88710,88711],{"class":242,"line":18644},[240,88712,88713],{"class":246},"      \u002F\u002F 1.1 创建div标签\n",[240,88715,88716,88718,88721,88723,88725,88727,88729,88731],{"class":242,"line":18650},[240,88717,71974],{"class":264},[240,88719,88720],{"class":257},".modalBox ",[240,88722,440],{"class":288},[240,88724,56331],{"class":257},[240,88726,72074],{"class":436},[240,88728,789],{"class":257},[240,88730,83845],{"class":443},[240,88732,2129],{"class":257},[240,88734,88735],{"class":242,"line":18661},[240,88736,88737],{"class":246},"      \u002F\u002F 1.2 给div 添加类名为model\n",[240,88739,88740,88742,88745,88747],{"class":242,"line":18684},[240,88741,71974],{"class":264},[240,88743,88744],{"class":257},".modalBox.className ",[240,88746,440],{"class":288},[240,88748,88749],{"class":443}," 'modal'\n",[240,88751,88752],{"class":242,"line":18706},[240,88753,88754],{"class":246},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[240,88756,88757,88759,88762,88764],{"class":242,"line":18711},[240,88758,71974],{"class":264},[240,88760,88761],{"class":257},".modalBox.innerHTML ",[240,88763,440],{"class":288},[240,88765,72091],{"class":443},[240,88767,88768,88771,88773],{"class":242,"line":18717},[240,88769,88770],{"class":443},"        \u003Cdiv class=\"header\">${",[240,88772,53351],{"class":257},[240,88774,88775],{"class":443},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[240,88777,88778,88781,88783],{"class":242,"line":18731},[240,88779,88780],{"class":443},"        \u003Cdiv class=\"body\">${",[240,88782,88697],{"class":257},[240,88784,88785],{"class":443},"}\u003C\u002Fdiv>\n",[240,88787,88788],{"class":242,"line":18744},[240,88789,88790],{"class":443},"      `\n",[240,88792,88793],{"class":242,"line":18749},[240,88794,88795],{"class":246},"      \u002F\u002F console.log(this.modalBox)\n",[240,88797,88798],{"class":242,"line":18763},[240,88799,4140],{"class":257},[240,88801,88802],{"class":242,"line":18768},[240,88803,88804],{"class":246},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[240,88806,88807],{"class":242,"line":18774},[240,88808,88809],{"class":246},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[240,88811,88812],{"class":242,"line":18779},[240,88813,88814],{"class":246},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[240,88816,88817,88820,88822,88824,88826,88829,88831,88833],{"class":242,"line":18793},[240,88818,88819],{"class":264},"    Modal",[240,88821,2657],{"class":257},[240,88823,87493],{"class":264},[240,88825,2657],{"class":257},[240,88827,88828],{"class":436},"open",[240,88830,15514],{"class":288},[240,88832,60849],{"class":288},[240,88834,56387],{"class":257},[240,88836,88837],{"class":242,"line":18798},[240,88838,88839],{"class":246},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[240,88841,88842,88844,88847,88849,88851,88853,88855,88858],{"class":242,"line":18803},[240,88843,60159],{"class":288},[240,88845,88846],{"class":264}," box",[240,88848,15514],{"class":288},[240,88850,56331],{"class":257},[240,88852,56334],{"class":436},[240,88854,789],{"class":257},[240,88856,88857],{"class":443},"'.modal'",[240,88859,2129],{"class":257},[240,88861,88862],{"class":242,"line":18817},[240,88863,88864],{"class":246},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[240,88866,88867,88870,88872,88875,88877],{"class":242,"line":18829},[240,88868,88869],{"class":257},"      box ",[240,88871,3669],{"class":288},[240,88873,88874],{"class":257}," box.",[240,88876,58939],{"class":436},[240,88878,3929],{"class":257},[240,88880,88881],{"class":242,"line":18834},[240,88882,88883],{"class":246},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[240,88885,88886],{"class":242,"line":18847},[240,88887,88888],{"class":246},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[240,88890,88891],{"class":242,"line":18852},[240,88892,88893],{"class":246},"      \u002F\u002F append可以增加对象\n",[240,88895,88896,88899,88902,88904,88907],{"class":242,"line":18857},[240,88897,88898],{"class":257},"      document.body.",[240,88900,88901],{"class":436},"append",[240,88903,789],{"class":257},[240,88905,88906],{"class":264},"this",[240,88908,88909],{"class":257},".modalBox)\n",[240,88911,88912],{"class":242,"line":18862},[240,88913,4353],{"emptyLinePlaceholder":2051},[240,88915,88916],{"class":242,"line":18875},[240,88917,88918],{"class":246},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[240,88920,88921,88923,88926,88928,88930,88933,88935,88937,88939,88941,88944,88946],{"class":242,"line":18880},[240,88922,71974],{"class":264},[240,88924,88925],{"class":257},".modalBox.",[240,88927,56334],{"class":436},[240,88929,789],{"class":257},[240,88931,88932],{"class":443},"'i'",[240,88934,32772],{"class":257},[240,88936,59744],{"class":436},[240,88938,789],{"class":257},[240,88940,59749],{"class":443},[240,88942,88943],{"class":257},", () ",[240,88945,86636],{"class":288},[240,88947,258],{"class":257},[240,88949,88950],{"class":242,"line":34579},[240,88951,88952],{"class":246},"        \u002F\u002F 这个地方需要用到箭头函数\n",[240,88954,88955],{"class":242,"line":34585},[240,88956,88957],{"class":246},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[240,88959,88960],{"class":242,"line":34591},[240,88961,88962],{"class":246},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[240,88964,88965,88967,88969,88972],{"class":242,"line":34597},[240,88966,66649],{"class":264},[240,88968,2657],{"class":257},[240,88970,88971],{"class":436},"close",[240,88973,3929],{"class":257},[240,88975,88976],{"class":242,"line":34603},[240,88977,66738],{"class":257},[240,88979,88980],{"class":242,"line":34614},[240,88981,4140],{"class":257},[240,88983,88984],{"class":242,"line":34620},[240,88985,4353],{"emptyLinePlaceholder":2051},[240,88987,88988],{"class":242,"line":34640},[240,88989,88990],{"class":246},"    \u002F\u002F 测试一下 点击 删除按钮\n",[240,88992,88993,88995,88997,88999,89002,89004,89006,89008,89010,89012,89014],{"class":242,"line":34646},[240,88994,54343],{"class":257},[240,88996,56334],{"class":436},[240,88998,789],{"class":257},[240,89000,89001],{"class":443},"'#delete'",[240,89003,32772],{"class":257},[240,89005,59744],{"class":436},[240,89007,789],{"class":257},[240,89009,59749],{"class":443},[240,89011,88943],{"class":257},[240,89013,86636],{"class":288},[240,89015,258],{"class":257},[240,89017,89018],{"class":242,"line":34657},[240,89019,89020],{"class":246},"      \u002F\u002F 先调用Model构造函数\n",[240,89022,89023,89025,89028,89030,89032,89034,89036,89039,89041,89044],{"class":242,"line":34663},[240,89024,60159],{"class":288},[240,89026,89027],{"class":264}," del",[240,89029,15514],{"class":288},[240,89031,13529],{"class":288},[240,89033,88684],{"class":436},[240,89035,789],{"class":257},[240,89037,89038],{"class":443},"'温馨的提示'",[240,89040,1277],{"class":257},[240,89042,89043],{"class":443},"'您没有删除权限操作'",[240,89045,2129],{"class":257},[240,89047,89048],{"class":242,"line":34669},[240,89049,89050],{"class":246},"      \u002F\u002F 实例对象调用open方法\n",[240,89052,89053,89056,89058],{"class":242,"line":34675},[240,89054,89055],{"class":257},"      del.",[240,89057,88828],{"class":436},[240,89059,3929],{"class":257},[240,89061,89062],{"class":242,"line":34681},[240,89063,35407],{"class":257},[240,89065,89066],{"class":242,"line":34687},[240,89067,89068],{"class":246},"    \u002F\u002F 测试一下 点击 登录按钮\n",[240,89070,89071,89073,89075,89077,89080,89082,89084,89086,89088,89090,89092],{"class":242,"line":34693},[240,89072,54343],{"class":257},[240,89074,56334],{"class":436},[240,89076,789],{"class":257},[240,89078,89079],{"class":443},"'#login'",[240,89081,32772],{"class":257},[240,89083,59744],{"class":436},[240,89085,789],{"class":257},[240,89087,59749],{"class":443},[240,89089,88943],{"class":257},[240,89091,86636],{"class":288},[240,89093,258],{"class":257},[240,89095,89096],{"class":242,"line":34699},[240,89097,89020],{"class":246},[240,89099,89100,89102,89105,89107,89109,89111,89113,89116,89118,89121],{"class":242,"line":34719},[240,89101,60159],{"class":288},[240,89103,89104],{"class":264}," log",[240,89106,15514],{"class":288},[240,89108,13529],{"class":288},[240,89110,88684],{"class":436},[240,89112,789],{"class":257},[240,89114,89115],{"class":443},"'友情提示'",[240,89117,1277],{"class":257},[240,89119,89120],{"class":443},"'您还没有登录呢'",[240,89122,2129],{"class":257},[240,89124,89125],{"class":242,"line":34725},[240,89126,89050],{"class":246},[240,89128,89129,89132,89134],{"class":242,"line":34741},[240,89130,89131],{"class":257},"      log.",[240,89133,88828],{"class":436},[240,89135,3929],{"class":257},[240,89137,89138],{"class":242,"line":34747},[240,89139,35407],{"class":257},[240,89141,89142],{"class":242,"line":34761},[240,89143,89144],{"class":246},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[240,89146,89147,89149,89151,89153,89155,89157,89159,89161],{"class":242,"line":34767},[240,89148,88819],{"class":264},[240,89150,2657],{"class":257},[240,89152,87493],{"class":264},[240,89154,2657],{"class":257},[240,89156,88971],{"class":436},[240,89158,15514],{"class":288},[240,89160,60849],{"class":288},[240,89162,56387],{"class":257},[240,89164,89165,89167,89169,89171],{"class":242,"line":34782},[240,89166,71974],{"class":264},[240,89168,88925],{"class":257},[240,89170,58939],{"class":436},[240,89172,3929],{"class":257},[240,89174,89175],{"class":242,"line":34788},[240,89176,4140],{"class":257},[240,89178,89179,89181,89183],{"class":242,"line":34797},[240,89180,54353],{"class":257},[240,89182,53751],{"class":253},[240,89184,447],{"class":257},[240,89186,89187,89189,89191],{"class":242,"line":34803},[240,89188,592],{"class":257},[240,89190,53738],{"class":253},[240,89192,447],{"class":257},[240,89194,89195],{"class":242,"line":34812},[240,89196,4353],{"emptyLinePlaceholder":2051},[240,89198,89199,89201,89203],{"class":242,"line":34818},[240,89200,592],{"class":257},[240,89202,52581],{"class":253},[240,89204,447],{"class":257},[19,89206,89207],{},[219,89208],{"alt":236,"src":89209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[14,89211,89213],{"id":89212},"_414-深浅拷贝","4.14 深浅拷贝",[32,89215,89217],{"id":89216},"_4141-浅拷贝","4.14.1 浅拷贝",[19,89219,89220],{},[219,89221],{"alt":236,"src":89222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[19,89224,89225],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[19,89227,89228],{},[219,89229],{"alt":236,"src":89230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[19,89232,89233],{},[219,89234],{"alt":236,"src":89235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[19,89237,89238],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[19,89240,89241],{},[219,89242],{"alt":236,"src":89243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[19,89245,13283],{},[19,89247,89248],{},[219,89249],{"alt":236,"src":89250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[32,89252,89254],{"id":89253},"_4142-深拷贝","4.14.2 深拷贝",[19,89256,89257],{},"深拷贝：拷贝的是对象，不是地址",[19,89259,89260],{},"常用的三种方法：",[1826,89262,89263,89266,89269],{},[1829,89264,89265],{},"通过递归实现深拷贝",[1829,89267,89268],{},"lodash\u002FcloneDeep",[1829,89270,89271],{},"通过JSON.stringify()实现",[23945,89273,89275],{"id":89274},"_41421-递归函数","4.14.2.1 递归函数",[19,89277,89278],{},[219,89279],{"alt":236,"src":89280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[1826,89282,89283],{},[1829,89284,89285],{},"死递归占溢出：",[231,89287,89289],{"className":55003,"code":89288,"language":55005,"meta":236,"style":236},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[23,89290,89291,89299,89307,89311,89316,89320,89325,89333],{"__ignoreMap":236},[240,89292,89293,89295,89297],{"class":242,"line":243},[240,89294,431],{"class":257},[240,89296,53738],{"class":253},[240,89298,447],{"class":257},[240,89300,89301,89303,89305],{"class":242,"line":250},[240,89302,452],{"class":257},[240,89304,53751],{"class":253},[240,89306,447],{"class":257},[240,89308,89309],{"class":242,"line":261},[240,89310,79058],{"class":257},[240,89312,89313],{"class":242,"line":277},[240,89314,89315],{"class":257},"      fn()\n",[240,89317,89318],{"class":242,"line":294},[240,89319,4140],{"class":257},[240,89321,89322],{"class":242,"line":309},[240,89323,89324],{"class":257},"    fn()\n",[240,89326,89327,89329,89331],{"class":242,"line":529},[240,89328,54353],{"class":257},[240,89330,53751],{"class":253},[240,89332,447],{"class":257},[240,89334,89335,89337,89339],{"class":242,"line":549},[240,89336,592],{"class":257},[240,89338,53738],{"class":253},[240,89340,447],{"class":257},[1826,89342,89343],{"start":250},[1829,89344,89345],{},"递归函数要加判断条件：",[19,89347,89348],{},[219,89349],{"alt":236,"src":89350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[1826,89352,89353],{"start":261},[1829,89354,89355],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[231,89357,89359],{"className":52579,"code":89358,"language":52581,"meta":236,"style":236},"\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",[23,89360,89361,89371,89385,89389,89397,89411,89431,89443,89451,89455,89463,89475,89483,89491,89516,89528,89532,89539,89547,89555,89559],{"__ignoreMap":236},[240,89362,89363,89365,89367,89369],{"class":242,"line":243},[240,89364,53243],{"class":257},[240,89366,53246],{"class":253},[240,89368,53249],{"class":436},[240,89370,447],{"class":257},[240,89372,89373,89375,89377,89379,89381,89383],{"class":242,"line":250},[240,89374,431],{"class":257},[240,89376,52581],{"class":253},[240,89378,53260],{"class":436},[240,89380,440],{"class":257},[240,89382,53265],{"class":443},[240,89384,447],{"class":257},[240,89386,89387],{"class":242,"line":261},[240,89388,4353],{"emptyLinePlaceholder":2051},[240,89390,89391,89393,89395],{"class":242,"line":277},[240,89392,431],{"class":257},[240,89394,53278],{"class":253},[240,89396,447],{"class":257},[240,89398,89399,89401,89403,89405,89407,89409],{"class":242,"line":294},[240,89400,452],{"class":257},[240,89402,53288],{"class":253},[240,89404,53291],{"class":436},[240,89406,440],{"class":257},[240,89408,53296],{"class":443},[240,89410,447],{"class":257},[240,89412,89413,89415,89417,89419,89421,89423,89425,89427,89429],{"class":242,"line":309},[240,89414,452],{"class":257},[240,89416,53288],{"class":253},[240,89418,16869],{"class":436},[240,89420,440],{"class":257},[240,89422,53335],{"class":443},[240,89424,53315],{"class":436},[240,89426,440],{"class":257},[240,89428,53342],{"class":443},[240,89430,447],{"class":257},[240,89432,89433,89435,89437,89439,89441],{"class":242,"line":529},[240,89434,452],{"class":257},[240,89436,53351],{"class":253},[240,89438,53354],{"class":257},[240,89440,53351],{"class":253},[240,89442,447],{"class":257},[240,89444,89445,89447,89449],{"class":242,"line":549},[240,89446,592],{"class":257},[240,89448,53278],{"class":253},[240,89450,447],{"class":257},[240,89452,89453],{"class":242,"line":569},[240,89454,4353],{"emptyLinePlaceholder":2051},[240,89456,89457,89459,89461],{"class":242,"line":589},[240,89458,431],{"class":257},[240,89460,53738],{"class":253},[240,89462,447],{"class":257},[240,89464,89465,89467,89469,89471,89473],{"class":242,"line":715},[240,89466,452],{"class":257},[240,89468,330],{"class":253},[240,89470,57247],{"class":257},[240,89472,330],{"class":253},[240,89474,447],{"class":257},[240,89476,89477,89479,89481],{"class":242,"line":727},[240,89478,452],{"class":257},[240,89480,53751],{"class":253},[240,89482,447],{"class":257},[240,89484,89485,89487,89489],{"class":242,"line":1730},[240,89486,72007],{"class":288},[240,89488,75688],{"class":436},[240,89490,12804],{"class":257},[240,89492,89493,89495,89497,89499,89501,89503,89505,89507,89509,89511,89514],{"class":242,"line":3582},[240,89494,57704],{"class":257},[240,89496,56334],{"class":436},[240,89498,789],{"class":257},[240,89500,83845],{"class":443},[240,89502,76164],{"class":257},[240,89504,440],{"class":288},[240,89506,13529],{"class":288},[240,89508,75704],{"class":436},[240,89510,19208],{"class":257},[240,89512,89513],{"class":436},"toLocaleString",[240,89515,3929],{"class":257},[240,89517,89518,89521,89524,89526],{"class":242,"line":3596},[240,89519,89520],{"class":436},"      setTimeout",[240,89522,89523],{"class":257},"(getTime, ",[240,89525,8361],{"class":264},[240,89527,2129],{"class":257},[240,89529,89530],{"class":242,"line":3601},[240,89531,4140],{"class":257},[240,89533,89534,89537],{"class":242,"line":3607},[240,89535,89536],{"class":436},"    getTime",[240,89538,3929],{"class":257},[240,89540,89541,89543,89545],{"class":242,"line":3628},[240,89542,54353],{"class":257},[240,89544,53751],{"class":253},[240,89546,447],{"class":257},[240,89548,89549,89551,89553],{"class":242,"line":3633},[240,89550,592],{"class":257},[240,89552,53738],{"class":253},[240,89554,447],{"class":257},[240,89556,89557],{"class":242,"line":3647},[240,89558,4353],{"emptyLinePlaceholder":2051},[240,89560,89561,89563,89565],{"class":242,"line":3652},[240,89562,592],{"class":257},[240,89564,52581],{"class":253},[240,89566,447],{"class":257},[19,89568,89569],{},[219,89570],{"alt":236,"src":89571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[1826,89573,89574],{"start":277},[1829,89575,89265],{},[19,89577,89578],{},[219,89579],{"alt":236,"src":89580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[19,89582,89583],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[19,89585,41135],{},[19,89587,89588],{},"这个是简易版的递归函数深拷贝",[19,89590,89591],{},"一定要注意先数组再对象，因为万物皆可对象",[231,89593,89595],{"className":52579,"code":89594,"language":52581,"meta":236,"style":236},"\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",[23,89596,89597,89607,89621,89625,89633,89647,89667,89679,89687,89691,89699,89707,89717,89726,89734,89750,89754,89762,89766,89770,89782,89787,89806,89822,89827,89832,89837,89852,89857,89862,89871,89879,89896,89904,89910,89918,89923,89928,89937,89941,89945,89949,89960,89969,89979,89993,90003,90011,90019,90027,90031],{"__ignoreMap":236},[240,89598,89599,89601,89603,89605],{"class":242,"line":243},[240,89600,53243],{"class":257},[240,89602,53246],{"class":253},[240,89604,53249],{"class":436},[240,89606,447],{"class":257},[240,89608,89609,89611,89613,89615,89617,89619],{"class":242,"line":250},[240,89610,431],{"class":257},[240,89612,52581],{"class":253},[240,89614,53260],{"class":436},[240,89616,440],{"class":257},[240,89618,53265],{"class":443},[240,89620,447],{"class":257},[240,89622,89623],{"class":242,"line":261},[240,89624,4353],{"emptyLinePlaceholder":2051},[240,89626,89627,89629,89631],{"class":242,"line":277},[240,89628,431],{"class":257},[240,89630,53278],{"class":253},[240,89632,447],{"class":257},[240,89634,89635,89637,89639,89641,89643,89645],{"class":242,"line":294},[240,89636,452],{"class":257},[240,89638,53288],{"class":253},[240,89640,53291],{"class":436},[240,89642,440],{"class":257},[240,89644,53296],{"class":443},[240,89646,447],{"class":257},[240,89648,89649,89651,89653,89655,89657,89659,89661,89663,89665],{"class":242,"line":309},[240,89650,452],{"class":257},[240,89652,53288],{"class":253},[240,89654,16869],{"class":436},[240,89656,440],{"class":257},[240,89658,53335],{"class":443},[240,89660,53315],{"class":436},[240,89662,440],{"class":257},[240,89664,53342],{"class":443},[240,89666,447],{"class":257},[240,89668,89669,89671,89673,89675,89677],{"class":242,"line":529},[240,89670,452],{"class":257},[240,89672,53351],{"class":253},[240,89674,53354],{"class":257},[240,89676,53351],{"class":253},[240,89678,447],{"class":257},[240,89680,89681,89683,89685],{"class":242,"line":549},[240,89682,592],{"class":257},[240,89684,53278],{"class":253},[240,89686,447],{"class":257},[240,89688,89689],{"class":242,"line":569},[240,89690,4353],{"emptyLinePlaceholder":2051},[240,89692,89693,89695,89697],{"class":242,"line":589},[240,89694,431],{"class":257},[240,89696,53738],{"class":253},[240,89698,447],{"class":257},[240,89700,89701,89703,89705],{"class":242,"line":715},[240,89702,452],{"class":257},[240,89704,53751],{"class":253},[240,89706,447],{"class":257},[240,89708,89709,89711,89713,89715],{"class":242,"line":727},[240,89710,13172],{"class":288},[240,89712,71894],{"class":264},[240,89714,15514],{"class":288},[240,89716,258],{"class":257},[240,89718,89719,89721,89724],{"class":242,"line":1730},[240,89720,73532],{"class":257},[240,89722,89723],{"class":443},"'pink'",[240,89725,33412],{"class":257},[240,89727,89728,89730,89732],{"class":242,"line":3582},[240,89729,73542],{"class":257},[240,89731,2748],{"class":264},[240,89733,33412],{"class":257},[240,89735,89736,89739,89742,89744,89747],{"class":242,"line":3596},[240,89737,89738],{"class":257},"      hobby: [",[240,89740,89741],{"class":443},"'乒乓球'",[240,89743,1277],{"class":257},[240,89745,89746],{"class":443},"'足球'",[240,89748,89749],{"class":257},"],\n",[240,89751,89752],{"class":242,"line":3601},[240,89753,79786],{"class":257},[240,89755,89756,89759],{"class":242,"line":3607},[240,89757,89758],{"class":257},"        baby: ",[240,89760,89761],{"class":443},"'小pink'\n",[240,89763,89764],{"class":242,"line":3628},[240,89765,54334],{"class":257},[240,89767,89768],{"class":242,"line":3633},[240,89769,4140],{"class":257},[240,89771,89772,89774,89777,89779],{"class":242,"line":3647},[240,89773,13172],{"class":288},[240,89775,89776],{"class":264}," o",[240,89778,15514],{"class":288},[240,89780,89781],{"class":257}," {}\n",[240,89783,89784],{"class":242,"line":3652},[240,89785,89786],{"class":246},"    \u002F\u002F 拷贝函数\n",[240,89788,89789,89791,89794,89796,89799,89801,89804],{"class":242,"line":3681},[240,89790,72007],{"class":288},[240,89792,89793],{"class":436}," deepCopy",[240,89795,789],{"class":257},[240,89797,89798],{"class":792},"newObj",[240,89800,1277],{"class":257},[240,89802,89803],{"class":792},"oldObj",[240,89805,14392],{"class":257},[240,89807,89808,89810,89812,89814,89817,89819],{"class":242,"line":3686},[240,89809,54220],{"class":288},[240,89811,3612],{"class":257},[240,89813,53785],{"class":288},[240,89815,89816],{"class":257}," k ",[240,89818,27989],{"class":288},[240,89820,89821],{"class":257}," oldObj) {\n",[240,89823,89824],{"class":242,"line":3703},[240,89825,89826],{"class":246},"        \u002F\u002F 处理数组的问题\n",[240,89828,89829],{"class":242,"line":3708},[240,89830,89831],{"class":246},"        \u002F\u002F 判断是否属于数组\n",[240,89833,89834],{"class":242,"line":3713},[240,89835,89836],{"class":246},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[240,89838,89839,89841,89844,89847,89850],{"class":242,"line":3718},[240,89840,4450],{"class":288},[240,89842,89843],{"class":257}," (oldObj[k] ",[240,89845,89846],{"class":288},"instanceof",[240,89848,89849],{"class":436}," Array",[240,89851,14392],{"class":257},[240,89853,89854],{"class":242,"line":3732},[240,89855,89856],{"class":246},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[240,89858,89859],{"class":242,"line":3737},[240,89860,89861],{"class":246},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[240,89863,89864,89867,89869],{"class":242,"line":4530},[240,89865,89866],{"class":257},"          newObj[k] ",[240,89868,440],{"class":288},[240,89870,53776],{"class":257},[240,89872,89873,89876],{"class":242,"line":4544},[240,89874,89875],{"class":436},"          deepCopy",[240,89877,89878],{"class":257},"(newObj[k], oldObj[k])\n",[240,89880,89881,89883,89885,89887,89889,89891,89894],{"class":242,"line":4552},[240,89882,81994],{"class":257},[240,89884,3655],{"class":288},[240,89886,3658],{"class":288},[240,89888,89843],{"class":257},[240,89890,89846],{"class":288},[240,89892,89893],{"class":436}," Object",[240,89895,14392],{"class":257},[240,89897,89898,89900,89902],{"class":242,"line":4557},[240,89899,89866],{"class":257},[240,89901,440],{"class":288},[240,89903,89781],{"class":257},[240,89905,89906,89908],{"class":242,"line":4563},[240,89907,89875],{"class":436},[240,89909,89878],{"class":257},[240,89911,89912,89914,89916],{"class":242,"line":4569},[240,89913,81994],{"class":257},[240,89915,3655],{"class":288},[240,89917,258],{"class":257},[240,89919,89920],{"class":242,"line":4574},[240,89921,89922],{"class":246},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[240,89924,89925],{"class":242,"line":9899},[240,89926,89927],{"class":246},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[240,89929,89930,89932,89934],{"class":242,"line":9923},[240,89931,89866],{"class":257},[240,89933,440],{"class":288},[240,89935,89936],{"class":257}," oldObj[k]\n",[240,89938,89939],{"class":242,"line":9928},[240,89940,4482],{"class":257},[240,89942,89943],{"class":242,"line":9934},[240,89944,54334],{"class":257},[240,89946,89947],{"class":242,"line":9961},[240,89948,4140],{"class":257},[240,89950,89951,89954,89957],{"class":242,"line":9966},[240,89952,89953],{"class":436},"    deepCopy",[240,89955,89956],{"class":257},"(o, obj) ",[240,89958,89959],{"class":246},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[240,89961,89962,89964,89966],{"class":242,"line":9972},[240,89963,75668],{"class":257},[240,89965,60178],{"class":436},[240,89967,89968],{"class":257},"(o)\n",[240,89970,89971,89974,89976],{"class":242,"line":9984},[240,89972,89973],{"class":257},"    o.age ",[240,89975,440],{"class":288},[240,89977,89978],{"class":264}," 20\n",[240,89980,89981,89984,89986,89988,89990],{"class":242,"line":9996},[240,89982,89983],{"class":257},"    o.hobby[",[240,89985,1274],{"class":264},[240,89987,6395],{"class":257},[240,89989,440],{"class":288},[240,89991,89992],{"class":443}," '篮球'\n",[240,89994,89995,89998,90000],{"class":242,"line":10008},[240,89996,89997],{"class":257},"    o.family ",[240,89999,440],{"class":288},[240,90001,90002],{"class":443}," '老pink'\n",[240,90004,90005,90007,90009],{"class":242,"line":11667},[240,90006,75668],{"class":257},[240,90008,60178],{"class":436},[240,90010,71959],{"class":257},[240,90012,90013,90015,90017],{"class":242,"line":11692},[240,90014,54353],{"class":257},[240,90016,53751],{"class":253},[240,90018,447],{"class":257},[240,90020,90021,90023,90025],{"class":242,"line":11715},[240,90022,592],{"class":257},[240,90024,53738],{"class":253},[240,90026,447],{"class":257},[240,90028,90029],{"class":242,"line":11739},[240,90030,4353],{"emptyLinePlaceholder":2051},[240,90032,90033,90035,90037],{"class":242,"line":11744},[240,90034,592],{"class":257},[240,90036,52581],{"class":253},[240,90038,447],{"class":257},[19,90040,90041],{},[219,90042],{"alt":236,"src":90043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[23945,90045,90047,90048],{"id":90046},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[68,90049,90050],{},"js库lodash里面cloneDeep内部实现了深拷贝",[19,90052,90053],{},[254,90054,90055],{"href":90055,"rel":90056},"https:\u002F\u002Fwww.lodashjs.com\u002F",[25811],[19,90058,90059],{},"lodash里边的方法都要加上一个下划线_",[19,90061,90062],{},"_.cloneDeep()",[231,90064,90066],{"className":52579,"code":90065,"language":52581,"meta":236,"style":236},"\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",[23,90067,90068,90078,90092,90096,90104,90118,90138,90150,90158,90162,90170,90175,90194,90202,90212,90220,90228,90240,90244,90250,90254,90258,90274,90282,90291,90299,90307,90315,90319],{"__ignoreMap":236},[240,90069,90070,90072,90074,90076],{"class":242,"line":243},[240,90071,53243],{"class":257},[240,90073,53246],{"class":253},[240,90075,53249],{"class":436},[240,90077,447],{"class":257},[240,90079,90080,90082,90084,90086,90088,90090],{"class":242,"line":250},[240,90081,431],{"class":257},[240,90083,52581],{"class":253},[240,90085,53260],{"class":436},[240,90087,440],{"class":257},[240,90089,53265],{"class":443},[240,90091,447],{"class":257},[240,90093,90094],{"class":242,"line":261},[240,90095,4353],{"emptyLinePlaceholder":2051},[240,90097,90098,90100,90102],{"class":242,"line":277},[240,90099,431],{"class":257},[240,90101,53278],{"class":253},[240,90103,447],{"class":257},[240,90105,90106,90108,90110,90112,90114,90116],{"class":242,"line":294},[240,90107,452],{"class":257},[240,90109,53288],{"class":253},[240,90111,53291],{"class":436},[240,90113,440],{"class":257},[240,90115,53296],{"class":443},[240,90117,447],{"class":257},[240,90119,90120,90122,90124,90126,90128,90130,90132,90134,90136],{"class":242,"line":309},[240,90121,452],{"class":257},[240,90123,53288],{"class":253},[240,90125,16869],{"class":436},[240,90127,440],{"class":257},[240,90129,53335],{"class":443},[240,90131,53315],{"class":436},[240,90133,440],{"class":257},[240,90135,53342],{"class":443},[240,90137,447],{"class":257},[240,90139,90140,90142,90144,90146,90148],{"class":242,"line":529},[240,90141,452],{"class":257},[240,90143,53351],{"class":253},[240,90145,53354],{"class":257},[240,90147,53351],{"class":253},[240,90149,447],{"class":257},[240,90151,90152,90154,90156],{"class":242,"line":549},[240,90153,592],{"class":257},[240,90155,53278],{"class":253},[240,90157,447],{"class":257},[240,90159,90160],{"class":242,"line":569},[240,90161,4353],{"emptyLinePlaceholder":2051},[240,90163,90164,90166,90168],{"class":242,"line":589},[240,90165,431],{"class":257},[240,90167,53738],{"class":253},[240,90169,447],{"class":257},[240,90171,90172],{"class":242,"line":715},[240,90173,90174],{"class":246},"  \u003C!-- 先引用这个库 -->\n",[240,90176,90177,90179,90181,90183,90185,90188,90190,90192],{"class":242,"line":727},[240,90178,452],{"class":257},[240,90180,53751],{"class":253},[240,90182,57172],{"class":436},[240,90184,440],{"class":257},[240,90186,90187],{"class":443},"\"lodash.min.js\"",[240,90189,57247],{"class":257},[240,90191,53751],{"class":253},[240,90193,447],{"class":257},[240,90195,90196,90198,90200],{"class":242,"line":1730},[240,90197,452],{"class":257},[240,90199,53751],{"class":253},[240,90201,447],{"class":257},[240,90203,90204,90206,90208,90210],{"class":242,"line":3582},[240,90205,13172],{"class":288},[240,90207,71894],{"class":264},[240,90209,15514],{"class":288},[240,90211,258],{"class":257},[240,90213,90214,90216,90218],{"class":242,"line":3596},[240,90215,73532],{"class":257},[240,90217,89723],{"class":443},[240,90219,33412],{"class":257},[240,90221,90222,90224,90226],{"class":242,"line":3601},[240,90223,73542],{"class":257},[240,90225,2748],{"class":264},[240,90227,33412],{"class":257},[240,90229,90230,90232,90234,90236,90238],{"class":242,"line":3607},[240,90231,89738],{"class":257},[240,90233,89741],{"class":443},[240,90235,1277],{"class":257},[240,90237,89746],{"class":443},[240,90239,89749],{"class":257},[240,90241,90242],{"class":242,"line":3628},[240,90243,79786],{"class":257},[240,90245,90246,90248],{"class":242,"line":3633},[240,90247,89758],{"class":257},[240,90249,89761],{"class":443},[240,90251,90252],{"class":242,"line":3647},[240,90253,54334],{"class":257},[240,90255,90256],{"class":242,"line":3652},[240,90257,4140],{"class":257},[240,90259,90260,90262,90264,90266,90269,90272],{"class":242,"line":3681},[240,90261,13172],{"class":288},[240,90263,89776],{"class":264},[240,90265,15514],{"class":288},[240,90267,90268],{"class":257}," _.",[240,90270,90271],{"class":436},"cloneDeep",[240,90273,71959],{"class":257},[240,90275,90276,90278,90280],{"class":242,"line":3686},[240,90277,75668],{"class":257},[240,90279,60178],{"class":436},[240,90281,89968],{"class":257},[240,90283,90284,90287,90289],{"class":242,"line":3703},[240,90285,90286],{"class":257},"    o.family.baby ",[240,90288,440],{"class":288},[240,90290,90002],{"class":443},[240,90292,90293,90295,90297],{"class":242,"line":3708},[240,90294,75668],{"class":257},[240,90296,60178],{"class":436},[240,90298,71959],{"class":257},[240,90300,90301,90303,90305],{"class":242,"line":3713},[240,90302,54353],{"class":257},[240,90304,53751],{"class":253},[240,90306,447],{"class":257},[240,90308,90309,90311,90313],{"class":242,"line":3718},[240,90310,592],{"class":257},[240,90312,53738],{"class":253},[240,90314,447],{"class":257},[240,90316,90317],{"class":242,"line":3732},[240,90318,4353],{"emptyLinePlaceholder":2051},[240,90320,90321,90323,90325],{"class":242,"line":3737},[240,90322,592],{"class":257},[240,90324,52581],{"class":253},[240,90326,447],{"class":257},[19,90328,90329],{},[219,90330],{"alt":236,"src":90331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[23945,90333,90335],{"id":90334},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[231,90337,90339],{"className":52579,"code":90338,"language":52581,"meta":236,"style":236},"\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",[23,90340,90341,90351,90365,90369,90377,90391,90411,90423,90431,90435,90443,90451,90461,90469,90477,90489,90493,90499,90503,90507,90512,90517,90522,90548,90556,90565,90573,90581,90589,90593],{"__ignoreMap":236},[240,90342,90343,90345,90347,90349],{"class":242,"line":243},[240,90344,53243],{"class":257},[240,90346,53246],{"class":253},[240,90348,53249],{"class":436},[240,90350,447],{"class":257},[240,90352,90353,90355,90357,90359,90361,90363],{"class":242,"line":250},[240,90354,431],{"class":257},[240,90356,52581],{"class":253},[240,90358,53260],{"class":436},[240,90360,440],{"class":257},[240,90362,53265],{"class":443},[240,90364,447],{"class":257},[240,90366,90367],{"class":242,"line":261},[240,90368,4353],{"emptyLinePlaceholder":2051},[240,90370,90371,90373,90375],{"class":242,"line":277},[240,90372,431],{"class":257},[240,90374,53278],{"class":253},[240,90376,447],{"class":257},[240,90378,90379,90381,90383,90385,90387,90389],{"class":242,"line":294},[240,90380,452],{"class":257},[240,90382,53288],{"class":253},[240,90384,53291],{"class":436},[240,90386,440],{"class":257},[240,90388,53296],{"class":443},[240,90390,447],{"class":257},[240,90392,90393,90395,90397,90399,90401,90403,90405,90407,90409],{"class":242,"line":309},[240,90394,452],{"class":257},[240,90396,53288],{"class":253},[240,90398,16869],{"class":436},[240,90400,440],{"class":257},[240,90402,53335],{"class":443},[240,90404,53315],{"class":436},[240,90406,440],{"class":257},[240,90408,53342],{"class":443},[240,90410,447],{"class":257},[240,90412,90413,90415,90417,90419,90421],{"class":242,"line":529},[240,90414,452],{"class":257},[240,90416,53351],{"class":253},[240,90418,53354],{"class":257},[240,90420,53351],{"class":253},[240,90422,447],{"class":257},[240,90424,90425,90427,90429],{"class":242,"line":549},[240,90426,592],{"class":257},[240,90428,53278],{"class":253},[240,90430,447],{"class":257},[240,90432,90433],{"class":242,"line":569},[240,90434,4353],{"emptyLinePlaceholder":2051},[240,90436,90437,90439,90441],{"class":242,"line":589},[240,90438,431],{"class":257},[240,90440,53738],{"class":253},[240,90442,447],{"class":257},[240,90444,90445,90447,90449],{"class":242,"line":715},[240,90446,452],{"class":257},[240,90448,53751],{"class":253},[240,90450,447],{"class":257},[240,90452,90453,90455,90457,90459],{"class":242,"line":727},[240,90454,13172],{"class":288},[240,90456,71894],{"class":264},[240,90458,15514],{"class":288},[240,90460,258],{"class":257},[240,90462,90463,90465,90467],{"class":242,"line":1730},[240,90464,73532],{"class":257},[240,90466,89723],{"class":443},[240,90468,33412],{"class":257},[240,90470,90471,90473,90475],{"class":242,"line":3582},[240,90472,73542],{"class":257},[240,90474,2748],{"class":264},[240,90476,33412],{"class":257},[240,90478,90479,90481,90483,90485,90487],{"class":242,"line":3596},[240,90480,89738],{"class":257},[240,90482,89741],{"class":443},[240,90484,1277],{"class":257},[240,90486,89746],{"class":443},[240,90488,89749],{"class":257},[240,90490,90491],{"class":242,"line":3601},[240,90492,79786],{"class":257},[240,90494,90495,90497],{"class":242,"line":3607},[240,90496,89758],{"class":257},[240,90498,89761],{"class":443},[240,90500,90501],{"class":242,"line":3628},[240,90502,54334],{"class":257},[240,90504,90505],{"class":242,"line":3633},[240,90506,4140],{"class":257},[240,90508,90509],{"class":242,"line":3647},[240,90510,90511],{"class":246},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[240,90513,90514],{"class":242,"line":3652},[240,90515,90516],{"class":246},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[240,90518,90519],{"class":242,"line":3681},[240,90520,90521],{"class":246},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[240,90523,90524,90526,90528,90530,90533,90535,90538,90540,90542,90544,90546],{"class":242,"line":3686},[240,90525,13172],{"class":288},[240,90527,89776],{"class":264},[240,90529,15514],{"class":288},[240,90531,90532],{"class":264}," JSON",[240,90534,2657],{"class":257},[240,90536,90537],{"class":436},"parse",[240,90539,789],{"class":257},[240,90541,73580],{"class":264},[240,90543,2657],{"class":257},[240,90545,73585],{"class":436},[240,90547,73588],{"class":257},[240,90549,90550,90552,90554],{"class":242,"line":3703},[240,90551,75668],{"class":257},[240,90553,60178],{"class":436},[240,90555,89968],{"class":257},[240,90557,90558,90560,90562],{"class":242,"line":3708},[240,90559,90286],{"class":257},[240,90561,440],{"class":288},[240,90563,90564],{"class":443}," '123'\n",[240,90566,90567,90569,90571],{"class":242,"line":3713},[240,90568,75668],{"class":257},[240,90570,60178],{"class":436},[240,90572,71959],{"class":257},[240,90574,90575,90577,90579],{"class":242,"line":3718},[240,90576,54353],{"class":257},[240,90578,53751],{"class":253},[240,90580,447],{"class":257},[240,90582,90583,90585,90587],{"class":242,"line":3732},[240,90584,592],{"class":257},[240,90586,53738],{"class":253},[240,90588,447],{"class":257},[240,90590,90591],{"class":242,"line":3737},[240,90592,4353],{"emptyLinePlaceholder":2051},[240,90594,90595,90597,90599],{"class":242,"line":4530},[240,90596,592],{"class":257},[240,90598,52581],{"class":253},[240,90600,447],{"class":257},[19,90602,90603],{},[219,90604],{"alt":236,"src":90605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[14,90607,90609],{"id":90608},"_415-异常处理","4.15 异常处理",[1826,90611,90612],{},[1829,90613,90614],{},"throw抛异常",[19,90616,90617],{},[219,90618],{"alt":236,"src":90619},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[1826,90621,90622],{"start":250},[1829,90623,90624],{},"try\u002Fcatch 捕获错误信息",[19,90626,90627],{},[219,90628],{"alt":236,"src":90629},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[231,90631,90633],{"className":52579,"code":90632,"language":52581,"meta":236,"style":236},"\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",[23,90634,90635,90645,90659,90663,90671,90685,90705,90717,90725,90729,90737,90749,90757,90766,90773,90778,90797,90806,90817,90822,90832,90837,90842,90847,90864,90868,90873,90880,90892,90896,90908,90912,90916,90921,90926,90933,90941,90949,90953],{"__ignoreMap":236},[240,90636,90637,90639,90641,90643],{"class":242,"line":243},[240,90638,53243],{"class":257},[240,90640,53246],{"class":253},[240,90642,53249],{"class":436},[240,90644,447],{"class":257},[240,90646,90647,90649,90651,90653,90655,90657],{"class":242,"line":250},[240,90648,431],{"class":257},[240,90650,52581],{"class":253},[240,90652,53260],{"class":436},[240,90654,440],{"class":257},[240,90656,53265],{"class":443},[240,90658,447],{"class":257},[240,90660,90661],{"class":242,"line":261},[240,90662,4353],{"emptyLinePlaceholder":2051},[240,90664,90665,90667,90669],{"class":242,"line":277},[240,90666,431],{"class":257},[240,90668,53278],{"class":253},[240,90670,447],{"class":257},[240,90672,90673,90675,90677,90679,90681,90683],{"class":242,"line":294},[240,90674,452],{"class":257},[240,90676,53288],{"class":253},[240,90678,53291],{"class":436},[240,90680,440],{"class":257},[240,90682,53296],{"class":443},[240,90684,447],{"class":257},[240,90686,90687,90689,90691,90693,90695,90697,90699,90701,90703],{"class":242,"line":309},[240,90688,452],{"class":257},[240,90690,53288],{"class":253},[240,90692,16869],{"class":436},[240,90694,440],{"class":257},[240,90696,53335],{"class":443},[240,90698,53315],{"class":436},[240,90700,440],{"class":257},[240,90702,53342],{"class":443},[240,90704,447],{"class":257},[240,90706,90707,90709,90711,90713,90715],{"class":242,"line":529},[240,90708,452],{"class":257},[240,90710,53351],{"class":253},[240,90712,53354],{"class":257},[240,90714,53351],{"class":253},[240,90716,447],{"class":257},[240,90718,90719,90721,90723],{"class":242,"line":549},[240,90720,592],{"class":257},[240,90722,53278],{"class":253},[240,90724,447],{"class":257},[240,90726,90727],{"class":242,"line":569},[240,90728,4353],{"emptyLinePlaceholder":2051},[240,90730,90731,90733,90735],{"class":242,"line":589},[240,90732,431],{"class":257},[240,90734,53738],{"class":253},[240,90736,447],{"class":257},[240,90738,90739,90741,90743,90745,90747],{"class":242,"line":715},[240,90740,452],{"class":257},[240,90742,19],{"class":253},[240,90744,55429],{"class":257},[240,90746,19],{"class":253},[240,90748,447],{"class":257},[240,90750,90751,90753,90755],{"class":242,"line":727},[240,90752,452],{"class":257},[240,90754,53751],{"class":253},[240,90756,447],{"class":257},[240,90758,90759,90761,90764],{"class":242,"line":1730},[240,90760,72007],{"class":288},[240,90762,90763],{"class":436}," fn",[240,90765,12804],{"class":257},[240,90767,90768,90771],{"class":242,"line":3582},[240,90769,90770],{"class":288},"      try",[240,90772,258],{"class":257},[240,90774,90775],{"class":242,"line":3596},[240,90776,90777],{"class":246},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[240,90779,90780,90782,90784,90786,90788,90790,90792,90795],{"class":242,"line":3601},[240,90781,63196],{"class":288},[240,90783,8776],{"class":264},[240,90785,15514],{"class":288},[240,90787,56331],{"class":257},[240,90789,56334],{"class":436},[240,90791,789],{"class":257},[240,90793,90794],{"class":443},"'.p'",[240,90796,2129],{"class":257},[240,90798,90799,90802,90804],{"class":242,"line":3607},[240,90800,90801],{"class":257},"        p.style.color ",[240,90803,440],{"class":288},[240,90805,68974],{"class":443},[240,90807,90808,90811,90814],{"class":242,"line":3628},[240,90809,90810],{"class":257},"      } ",[240,90812,90813],{"class":288},"catch",[240,90815,90816],{"class":257}," (err) {\n",[240,90818,90819],{"class":242,"line":3633},[240,90820,90821],{"class":246},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[240,90823,90824,90827,90829],{"class":242,"line":3647},[240,90825,90826],{"class":257},"        console.",[240,90828,60178],{"class":436},[240,90830,90831],{"class":257},"(err.message)\n",[240,90833,90834],{"class":242,"line":3652},[240,90835,90836],{"class":246},"        \u002F\u002F 想要中断程序，需要加return\n",[240,90838,90839],{"class":242,"line":3681},[240,90840,90841],{"class":246},"        \u002F\u002F return\n",[240,90843,90844],{"class":242,"line":3686},[240,90845,90846],{"class":246},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[240,90848,90849,90852,90854,90857,90859,90862],{"class":242,"line":3703},[240,90850,90851],{"class":288},"        throw",[240,90853,13529],{"class":288},[240,90855,90856],{"class":436}," Error",[240,90858,789],{"class":257},[240,90860,90861],{"class":443},"'你看看，选择器错误了吧'",[240,90863,2129],{"class":257},[240,90865,90866],{"class":242,"line":3708},[240,90867,54334],{"class":257},[240,90869,90870],{"class":242,"line":3713},[240,90871,90872],{"class":246},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[240,90874,90875,90878],{"class":242,"line":3718},[240,90876,90877],{"class":288},"      finally",[240,90879,258],{"class":257},[240,90881,90882,90885,90887,90890],{"class":242,"line":3732},[240,90883,90884],{"class":436},"        alert",[240,90886,789],{"class":257},[240,90888,90889],{"class":443},"'弹出对话框'",[240,90891,2129],{"class":257},[240,90893,90894],{"class":242,"line":3737},[240,90895,54334],{"class":257},[240,90897,90898,90900,90902,90904,90906],{"class":242,"line":4530},[240,90899,60175],{"class":257},[240,90901,60178],{"class":436},[240,90903,789],{"class":257},[240,90905,2571],{"class":264},[240,90907,2129],{"class":257},[240,90909,90910],{"class":242,"line":4544},[240,90911,4353],{"emptyLinePlaceholder":2051},[240,90913,90914],{"class":242,"line":4552},[240,90915,4140],{"class":257},[240,90917,90918],{"class":242,"line":4557},[240,90919,90920],{"class":246},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[240,90922,90923],{"class":242,"line":4563},[240,90924,90925],{"class":246},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[240,90927,90928,90931],{"class":242,"line":4569},[240,90929,90930],{"class":436},"    fn",[240,90932,3929],{"class":257},[240,90934,90935,90937,90939],{"class":242,"line":4574},[240,90936,54353],{"class":257},[240,90938,53751],{"class":253},[240,90940,447],{"class":257},[240,90942,90943,90945,90947],{"class":242,"line":9899},[240,90944,592],{"class":257},[240,90946,53738],{"class":253},[240,90948,447],{"class":257},[240,90950,90951],{"class":242,"line":9923},[240,90952,4353],{"emptyLinePlaceholder":2051},[240,90954,90955,90957,90959],{"class":242,"line":9928},[240,90956,592],{"class":257},[240,90958,52581],{"class":253},[240,90960,447],{"class":257},[19,90962,90963],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[1826,90965,90966],{"start":261},[1829,90967,90968],{},"debugger",[19,90970,90971],{},[219,90972],{"alt":236,"src":90973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[19,90975,90976],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[14,90978,90980],{"id":90979},"_416-处理this","4.16 处理this",[32,90982,90984],{"id":90983},"_4161-this的指向","4.16.1 this的指向",[1826,90986,90987],{},[1829,90988,90989],{},"普通函数的this",[19,90991,90992],{},[219,90993],{"alt":236,"src":90994},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[1826,90996,90997],{"start":250},[1829,90998,90999],{},"箭头函数的this",[19,91001,91002],{},[219,91003],{"alt":236,"src":91004},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[19,91006,91007],{},[219,91008],{"alt":236,"src":91009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[19,91011,91012],{},[219,91013],{"alt":236,"src":91014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[32,91016,91018],{"id":91017},"_4162-this的改变","4.16.2 this的改变",[19,91020,91021],{},"call() apply() bind()",[1826,91023,91024],{},[1829,91025,91026],{},"call()",[19,91028,91029],{},[219,91030],{"alt":236,"src":91031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[19,91033,91034],{},"两个作用：①调用函数；②改变this指向",[231,91036,91038],{"className":55003,"code":91037,"language":55005,"meta":236,"style":236},"\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",[23,91039,91040,91048,91056,91060,91065,91069,91074,91079,91084,91088,91093,91101],{"__ignoreMap":236},[240,91041,91042,91044,91046],{"class":242,"line":243},[240,91043,431],{"class":257},[240,91045,53738],{"class":253},[240,91047,447],{"class":257},[240,91049,91050,91052,91054],{"class":242,"line":250},[240,91051,452],{"class":257},[240,91053,53751],{"class":253},[240,91055,447],{"class":257},[240,91057,91058],{"class":242,"line":261},[240,91059,73439],{"class":257},[240,91061,91062],{"class":242,"line":277},[240,91063,91064],{"class":257},"      uname: 'pink'\n",[240,91066,91067],{"class":242,"line":294},[240,91068,4140],{"class":257},[240,91070,91071],{"class":242,"line":309},[240,91072,91073],{"class":257},"    function fn(x, y) {\n",[240,91075,91076],{"class":242,"line":529},[240,91077,91078],{"class":257},"      console.log(this)  \u002F\u002Fwindow\n",[240,91080,91081],{"class":242,"line":549},[240,91082,91083],{"class":257},"      console.log(x + y)\n",[240,91085,91086],{"class":242,"line":569},[240,91087,4140],{"class":257},[240,91089,91090],{"class":242,"line":589},[240,91091,91092],{"class":257},"    fn.call(obj, 1, 2)\n",[240,91094,91095,91097,91099],{"class":242,"line":715},[240,91096,54353],{"class":257},[240,91098,53751],{"class":253},[240,91100,447],{"class":257},[240,91102,91103,91105,91107],{"class":242,"line":727},[240,91104,592],{"class":257},[240,91106,53738],{"class":253},[240,91108,447],{"class":257},[19,91110,91111],{},[219,91112],{"alt":236,"src":91113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[1826,91115,91116],{"start":250},[1829,91117,91118],{},"apply()",[19,91120,91121],{},[219,91122],{"alt":236,"src":91123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[19,91125,91034],{},[19,91127,91128],{},"call传递的是普通参数，而apply必须传递的是数组",[231,91130,91132],{"className":52579,"code":91131,"language":52581,"meta":236,"style":236},"\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",[23,91133,91134,91144,91158,91162,91170,91184,91204,91216,91224,91228,91236,91244,91254,91261,91265,91270,91286,91298,91312,91316,91321,91340,91345,91349,91354,91359,91367,91372,91394,91399,91415,91431,91443,91447,91452,91471,91479,91487,91491],{"__ignoreMap":236},[240,91135,91136,91138,91140,91142],{"class":242,"line":243},[240,91137,53243],{"class":257},[240,91139,53246],{"class":253},[240,91141,53249],{"class":436},[240,91143,447],{"class":257},[240,91145,91146,91148,91150,91152,91154,91156],{"class":242,"line":250},[240,91147,431],{"class":257},[240,91149,52581],{"class":253},[240,91151,53260],{"class":436},[240,91153,440],{"class":257},[240,91155,53265],{"class":443},[240,91157,447],{"class":257},[240,91159,91160],{"class":242,"line":261},[240,91161,4353],{"emptyLinePlaceholder":2051},[240,91163,91164,91166,91168],{"class":242,"line":277},[240,91165,431],{"class":257},[240,91167,53278],{"class":253},[240,91169,447],{"class":257},[240,91171,91172,91174,91176,91178,91180,91182],{"class":242,"line":294},[240,91173,452],{"class":257},[240,91175,53288],{"class":253},[240,91177,53291],{"class":436},[240,91179,440],{"class":257},[240,91181,53296],{"class":443},[240,91183,447],{"class":257},[240,91185,91186,91188,91190,91192,91194,91196,91198,91200,91202],{"class":242,"line":309},[240,91187,452],{"class":257},[240,91189,53288],{"class":253},[240,91191,16869],{"class":436},[240,91193,440],{"class":257},[240,91195,53335],{"class":443},[240,91197,53315],{"class":436},[240,91199,440],{"class":257},[240,91201,53342],{"class":443},[240,91203,447],{"class":257},[240,91205,91206,91208,91210,91212,91214],{"class":242,"line":529},[240,91207,452],{"class":257},[240,91209,53351],{"class":253},[240,91211,53354],{"class":257},[240,91213,53351],{"class":253},[240,91215,447],{"class":257},[240,91217,91218,91220,91222],{"class":242,"line":549},[240,91219,592],{"class":257},[240,91221,53278],{"class":253},[240,91223,447],{"class":257},[240,91225,91226],{"class":242,"line":569},[240,91227,4353],{"emptyLinePlaceholder":2051},[240,91229,91230,91232,91234],{"class":242,"line":589},[240,91231,431],{"class":257},[240,91233,53738],{"class":253},[240,91235,447],{"class":257},[240,91237,91238,91240,91242],{"class":242,"line":715},[240,91239,452],{"class":257},[240,91241,53751],{"class":253},[240,91243,447],{"class":257},[240,91245,91246,91248,91250,91252],{"class":242,"line":727},[240,91247,13172],{"class":288},[240,91249,71894],{"class":264},[240,91251,15514],{"class":288},[240,91253,258],{"class":257},[240,91255,91256,91258],{"class":242,"line":1730},[240,91257,73542],{"class":257},[240,91259,91260],{"class":264},"18\n",[240,91262,91263],{"class":242,"line":3582},[240,91264,4140],{"class":257},[240,91266,91267],{"class":242,"line":3596},[240,91268,91269],{"class":246},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[240,91271,91272,91274,91276,91278,91280,91282,91284],{"class":242,"line":3601},[240,91273,72007],{"class":288},[240,91275,90763],{"class":436},[240,91277,789],{"class":257},[240,91279,2916],{"class":792},[240,91281,1277],{"class":257},[240,91283,2941],{"class":792},[240,91285,14392],{"class":257},[240,91287,91288,91290,91292,91294,91296],{"class":242,"line":3607},[240,91289,60175],{"class":257},[240,91291,60178],{"class":436},[240,91293,789],{"class":257},[240,91295,88906],{"class":264},[240,91297,2129],{"class":257},[240,91299,91300,91302,91304,91307,91309],{"class":242,"line":3628},[240,91301,60175],{"class":257},[240,91303,60178],{"class":436},[240,91305,91306],{"class":257},"(x ",[240,91308,2580],{"class":288},[240,91310,91311],{"class":257}," y)\n",[240,91313,91314],{"class":242,"line":3633},[240,91315,4140],{"class":257},[240,91317,91318],{"class":242,"line":3647},[240,91319,91320],{"class":246},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[240,91322,91323,91326,91329,91332,91334,91336,91338],{"class":242,"line":3652},[240,91324,91325],{"class":257},"    fn.",[240,91327,91328],{"class":436},"apply",[240,91330,91331],{"class":257},"(obj, [",[240,91333,1643],{"class":264},[240,91335,1277],{"class":257},[240,91337,1668],{"class":264},[240,91339,6609],{"class":257},[240,91341,91342],{"class":242,"line":3681},[240,91343,91344],{"class":246},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[240,91346,91347],{"class":242,"line":3686},[240,91348,4353],{"emptyLinePlaceholder":2051},[240,91350,91351],{"class":242,"line":3703},[240,91352,91353],{"class":246},"    \u002F\u002F 使用场景：求数组最大值\n",[240,91355,91356],{"class":242,"line":3708},[240,91357,91358],{"class":246},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[240,91360,91361,91364],{"class":242,"line":3713},[240,91362,91363],{"class":246},"    \u002F\u002F console.log(max)",[240,91365,91366],{"class":246},"   \u002F\u002F3\n",[240,91368,91369],{"class":242,"line":3718},[240,91370,91371],{"class":246},"    \u002F\u002F 指向空或者Math都是可以的\n",[240,91373,91374,91376,91378,91380,91382,91384,91386,91388,91390,91392],{"class":242,"line":3732},[240,91375,13172],{"class":288},[240,91377,59626],{"class":264},[240,91379,15514],{"class":288},[240,91381,54162],{"class":257},[240,91383,285],{"class":264},[240,91385,1277],{"class":257},[240,91387,2603],{"class":264},[240,91389,1277],{"class":257},[240,91391,2634],{"class":264},[240,91393,35192],{"class":257},[240,91395,91396],{"class":242,"line":3737},[240,91397,91398],{"class":246},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[240,91400,91401,91403,91405,91407,91410,91412],{"class":242,"line":4530},[240,91402,13172],{"class":288},[240,91404,7902],{"class":264},[240,91406,15514],{"class":288},[240,91408,91409],{"class":257}," Math.max.",[240,91411,91328],{"class":436},[240,91413,91414],{"class":257},"(Math, arr)\n",[240,91416,91417,91419,91422,91424,91427,91429],{"class":242,"line":4544},[240,91418,13172],{"class":288},[240,91420,91421],{"class":264}," min",[240,91423,15514],{"class":288},[240,91425,91426],{"class":257}," Math.min.",[240,91428,91328],{"class":436},[240,91430,91414],{"class":257},[240,91432,91433,91435,91437,91440],{"class":242,"line":4552},[240,91434,75668],{"class":257},[240,91436,60178],{"class":436},[240,91438,91439],{"class":257},"(max, min)     ",[240,91441,91442],{"class":246},"\u002F\u002F100,4\n",[240,91444,91445],{"class":242,"line":4557},[240,91446,4353],{"emptyLinePlaceholder":2051},[240,91448,91449],{"class":242,"line":4563},[240,91450,91451],{"class":246},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[240,91453,91454,91456,91458,91461,91463,91465,91468],{"class":242,"line":4569},[240,91455,75668],{"class":257},[240,91457,60178],{"class":436},[240,91459,91460],{"class":257},"(Max.",[240,91462,7966],{"class":436},[240,91464,789],{"class":257},[240,91466,91467],{"class":288},"...",[240,91469,91470],{"class":257},"arr))\n",[240,91472,91473,91475,91477],{"class":242,"line":4574},[240,91474,54353],{"class":257},[240,91476,53751],{"class":253},[240,91478,447],{"class":257},[240,91480,91481,91483,91485],{"class":242,"line":9899},[240,91482,592],{"class":257},[240,91484,53738],{"class":253},[240,91486,447],{"class":257},[240,91488,91489],{"class":242,"line":9923},[240,91490,4353],{"emptyLinePlaceholder":2051},[240,91492,91493,91495,91497],{"class":242,"line":9928},[240,91494,592],{"class":257},[240,91496,52581],{"class":253},[240,91498,447],{"class":257},[19,91500,91501],{},[219,91502],{"alt":236,"src":91503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[1826,91505,91506],{"start":261},[1829,91507,91508],{},"bind()",[19,91510,91511],{},[219,91512],{"alt":236,"src":91513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[19,91515,91516],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[19,91518,91519],{},"bind的语法跟call很相似",[231,91521,91523],{"className":55003,"code":91522,"language":55005,"meta":236,"style":236},"\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",[23,91524,91525,91533,91541,91545,91550,91554,91558,91563,91567,91572,91577,91582,91587,91592,91597,91602,91606,91614],{"__ignoreMap":236},[240,91526,91527,91529,91531],{"class":242,"line":243},[240,91528,431],{"class":257},[240,91530,53738],{"class":253},[240,91532,447],{"class":257},[240,91534,91535,91537,91539],{"class":242,"line":250},[240,91536,452],{"class":257},[240,91538,53751],{"class":253},[240,91540,447],{"class":257},[240,91542,91543],{"class":242,"line":261},[240,91544,73439],{"class":257},[240,91546,91547],{"class":242,"line":277},[240,91548,91549],{"class":257},"      age: 18\n",[240,91551,91552],{"class":242,"line":294},[240,91553,4140],{"class":257},[240,91555,91556],{"class":242,"line":309},[240,91557,79058],{"class":257},[240,91559,91560],{"class":242,"line":529},[240,91561,91562],{"class":257},"      console.log(this)\n",[240,91564,91565],{"class":242,"line":549},[240,91566,4140],{"class":257},[240,91568,91569],{"class":242,"line":569},[240,91570,91571],{"class":257},"    \u002F\u002F 1.bind 不会调用函数\n",[240,91573,91574],{"class":242,"line":589},[240,91575,91576],{"class":257},"    \u002F\u002F 2.bind能改变this的指向\n",[240,91578,91579],{"class":242,"line":715},[240,91580,91581],{"class":257},"    fn.bind()\n",[240,91583,91584],{"class":242,"line":727},[240,91585,91586],{"class":257},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[240,91588,91589],{"class":242,"line":1730},[240,91590,91591],{"class":257},"    const fun = fn.bind(obj)\n",[240,91593,91594],{"class":242,"line":3582},[240,91595,91596],{"class":257},"    \u002F\u002F console.log(fun)\n",[240,91598,91599],{"class":242,"line":3596},[240,91600,91601],{"class":257},"    \u002F\u002F 调用,查看this的指向\n",[240,91603,91604],{"class":242,"line":3601},[240,91605,54587],{"class":257},[240,91607,91608,91610,91612],{"class":242,"line":3607},[240,91609,54353],{"class":257},[240,91611,53751],{"class":253},[240,91613,447],{"class":257},[240,91615,91616,91618,91620],{"class":242,"line":3628},[240,91617,592],{"class":257},[240,91619,53738],{"class":253},[240,91621,447],{"class":257},[19,91623,91624],{},[219,91625],{"alt":236,"src":91626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[1826,91628,91629],{"start":277},[1829,91630,91631],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[231,91633,91635],{"className":55003,"code":91634,"language":55005,"meta":236,"style":236},"\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",[23,91636,91637,91645,91658,91666,91671,91675,91680,91685,91690,91695,91700,91705,91710,91715,91719,91727],{"__ignoreMap":236},[240,91638,91639,91641,91643],{"class":242,"line":243},[240,91640,431],{"class":257},[240,91642,53738],{"class":253},[240,91644,447],{"class":257},[240,91646,91647,91649,91651,91654,91656],{"class":242,"line":250},[240,91648,452],{"class":257},[240,91650,55822],{"class":253},[240,91652,91653],{"class":257},">禁用\u003C\u002F",[240,91655,55822],{"class":253},[240,91657,447],{"class":257},[240,91659,91660,91662,91664],{"class":242,"line":261},[240,91661,452],{"class":257},[240,91663,53751],{"class":253},[240,91665,447],{"class":257},[240,91667,91668],{"class":242,"line":277},[240,91669,91670],{"class":257},"    const btn = document.querySelector('button')\n",[240,91672,91673],{"class":242,"line":294},[240,91674,60947],{"class":257},[240,91676,91677],{"class":242,"line":309},[240,91678,91679],{"class":257},"      this.disabled = true\n",[240,91681,91682],{"class":242,"line":529},[240,91683,91684],{"class":257},"      \u002F\u002F 定时器是window进行调用的\n",[240,91686,91687],{"class":242,"line":549},[240,91688,91689],{"class":257},"      setTimeout(function () {\n",[240,91691,91692],{"class":242,"line":569},[240,91693,91694],{"class":257},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[240,91696,91697],{"class":242,"line":589},[240,91698,91699],{"class":257},"        this.disabled = false\n",[240,91701,91702],{"class":242,"line":715},[240,91703,91704],{"class":257},"      }.bind(this), 2000)\n",[240,91706,91707],{"class":242,"line":727},[240,91708,91709],{"class":257},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[240,91711,91712],{"class":242,"line":1730},[240,91713,91714],{"class":257},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[240,91716,91717],{"class":242,"line":3582},[240,91718,35407],{"class":257},[240,91720,91721,91723,91725],{"class":242,"line":3596},[240,91722,54353],{"class":257},[240,91724,53751],{"class":253},[240,91726,447],{"class":257},[240,91728,91729,91731,91733],{"class":242,"line":3601},[240,91730,592],{"class":257},[240,91732,53738],{"class":253},[240,91734,447],{"class":257},[1826,91736,91737],{"start":294},[1829,91738,23900],{},[19,91740,91741],{},[219,91742],{"alt":236,"src":91743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[14,91745,91747],{"id":91746},"_417-性能优化","4.17 性能优化",[32,91749,91751],{"id":91750},"_4171-防抖","4.17.1 防抖",[19,91753,91754],{},[219,91755],{"alt":236,"src":91756},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[19,91758,91759],{},[68,91760,91761],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[19,91763,91764],{},"防抖实现方式：",[3100,91766,91767],{},[1829,91768,91769],{},"lodash 提供了防抖处理",[19,91771,91772],{},"_.debounce(func,[wait=0],[options={}])",[19,91774,91775],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[231,91777,91779],{"className":52579,"code":91778,"language":52581,"meta":236,"style":236},"\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",[23,91780,91781,91791,91805,91809,91817,91831,91851,91863,91871,91877,91887,91899,91911,91922,91934,91944,91954,91967,91971,91979,91987,91991,91999,92017,92035,92043,92062,92072,92081,92092,92097,92101,92106,92111,92116,92141,92149,92157,92161],{"__ignoreMap":236},[240,91782,91783,91785,91787,91789],{"class":242,"line":243},[240,91784,53243],{"class":257},[240,91786,53246],{"class":253},[240,91788,53249],{"class":436},[240,91790,447],{"class":257},[240,91792,91793,91795,91797,91799,91801,91803],{"class":242,"line":250},[240,91794,431],{"class":257},[240,91796,52581],{"class":253},[240,91798,53260],{"class":436},[240,91800,440],{"class":257},[240,91802,53265],{"class":443},[240,91804,447],{"class":257},[240,91806,91807],{"class":242,"line":261},[240,91808,4353],{"emptyLinePlaceholder":2051},[240,91810,91811,91813,91815],{"class":242,"line":277},[240,91812,431],{"class":257},[240,91814,53278],{"class":253},[240,91816,447],{"class":257},[240,91818,91819,91821,91823,91825,91827,91829],{"class":242,"line":294},[240,91820,452],{"class":257},[240,91822,53288],{"class":253},[240,91824,53291],{"class":436},[240,91826,440],{"class":257},[240,91828,53296],{"class":443},[240,91830,447],{"class":257},[240,91832,91833,91835,91837,91839,91841,91843,91845,91847,91849],{"class":242,"line":309},[240,91834,452],{"class":257},[240,91836,53288],{"class":253},[240,91838,16869],{"class":436},[240,91840,440],{"class":257},[240,91842,53335],{"class":443},[240,91844,53315],{"class":436},[240,91846,440],{"class":257},[240,91848,53342],{"class":443},[240,91850,447],{"class":257},[240,91852,91853,91855,91857,91859,91861],{"class":242,"line":529},[240,91854,452],{"class":257},[240,91856,53351],{"class":253},[240,91858,53354],{"class":257},[240,91860,53351],{"class":253},[240,91862,447],{"class":257},[240,91864,91865,91867,91869],{"class":242,"line":549},[240,91866,452],{"class":257},[240,91868,2019],{"class":253},[240,91870,447],{"class":257},[240,91872,91873,91875],{"class":242,"line":569},[240,91874,56686],{"class":436},[240,91876,258],{"class":257},[240,91878,91879,91881,91883,91885],{"class":242,"line":589},[240,91880,74511],{"class":264},[240,91882,268],{"class":257},[240,91884,62436],{"class":264},[240,91886,274],{"class":257},[240,91888,91889,91891,91893,91895,91897],{"class":242,"line":715},[240,91890,56705],{"class":264},[240,91892,268],{"class":257},[240,91894,3676],{"class":264},[240,91896,289],{"class":288},[240,91898,274],{"class":257},[240,91900,91901,91903,91905,91907,91909],{"class":242,"line":727},[240,91902,56719],{"class":264},[240,91904,268],{"class":257},[240,91906,3676],{"class":264},[240,91908,289],{"class":288},[240,91910,274],{"class":257},[240,91912,91913,91915,91917,91920],{"class":242,"line":1730},[240,91914,56818],{"class":264},[240,91916,268],{"class":257},[240,91918,91919],{"class":264},"gray",[240,91921,274],{"class":257},[240,91923,91924,91926,91928,91930,91932],{"class":242,"line":3582},[240,91925,56856],{"class":264},[240,91927,268],{"class":257},[240,91929,2921],{"class":264},[240,91931,289],{"class":288},[240,91933,274],{"class":257},[240,91935,91936,91938,91940,91942],{"class":242,"line":3596},[240,91937,59349],{"class":264},[240,91939,268],{"class":257},[240,91941,683],{"class":264},[240,91943,274],{"class":257},[240,91945,91946,91948,91950,91952],{"class":242,"line":3601},[240,91947,59219],{"class":264},[240,91949,268],{"class":257},[240,91951,971],{"class":264},[240,91953,274],{"class":257},[240,91955,91956,91959,91961,91963,91965],{"class":242,"line":3607},[240,91957,91958],{"class":264},"      padding-top",[240,91960,268],{"class":257},[240,91962,1741],{"class":264},[240,91964,289],{"class":288},[240,91966,274],{"class":257},[240,91968,91969],{"class":242,"line":3628},[240,91970,4140],{"class":257},[240,91972,91973,91975,91977],{"class":242,"line":3633},[240,91974,54353],{"class":257},[240,91976,2019],{"class":253},[240,91978,447],{"class":257},[240,91980,91981,91983,91985],{"class":242,"line":3647},[240,91982,592],{"class":257},[240,91984,53278],{"class":253},[240,91986,447],{"class":257},[240,91988,91989],{"class":242,"line":3652},[240,91990,4353],{"emptyLinePlaceholder":2051},[240,91992,91993,91995,91997],{"class":242,"line":3681},[240,91994,431],{"class":257},[240,91996,53738],{"class":253},[240,91998,447],{"class":257},[240,92000,92001,92003,92005,92007,92009,92011,92013,92015],{"class":242,"line":3686},[240,92002,452],{"class":257},[240,92004,330],{"class":253},[240,92006,437],{"class":436},[240,92008,440],{"class":257},[240,92010,55426],{"class":443},[240,92012,57247],{"class":257},[240,92014,330],{"class":253},[240,92016,447],{"class":257},[240,92018,92019,92021,92023,92025,92027,92029,92031,92033],{"class":242,"line":3703},[240,92020,452],{"class":257},[240,92022,53751],{"class":253},[240,92024,57172],{"class":436},[240,92026,440],{"class":257},[240,92028,90187],{"class":443},[240,92030,57247],{"class":257},[240,92032,53751],{"class":253},[240,92034,447],{"class":257},[240,92036,92037,92039,92041],{"class":242,"line":3708},[240,92038,452],{"class":257},[240,92040,53751],{"class":253},[240,92042,447],{"class":257},[240,92044,92045,92047,92049,92051,92053,92055,92057,92060],{"class":242,"line":3713},[240,92046,13172],{"class":288},[240,92048,88846],{"class":264},[240,92050,15514],{"class":288},[240,92052,56331],{"class":257},[240,92054,56334],{"class":436},[240,92056,789],{"class":257},[240,92058,92059],{"class":443},"'.box'",[240,92061,2129],{"class":257},[240,92063,92064,92066,92068,92070],{"class":242,"line":3718},[240,92065,54155],{"class":288},[240,92067,11389],{"class":257},[240,92069,440],{"class":288},[240,92071,49279],{"class":264},[240,92073,92074,92076,92079],{"class":242,"line":3732},[240,92075,72007],{"class":288},[240,92077,92078],{"class":436}," mouseMove",[240,92080,12804],{"class":257},[240,92082,92083,92086,92088,92090],{"class":242,"line":3737},[240,92084,92085],{"class":257},"      box.innerHTML ",[240,92087,440],{"class":288},[240,92089,4984],{"class":257},[240,92091,4655],{"class":288},[240,92093,92094],{"class":242,"line":4530},[240,92095,92096],{"class":246},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[240,92098,92099],{"class":242,"line":4544},[240,92100,4140],{"class":257},[240,92102,92103],{"class":242,"line":4552},[240,92104,92105],{"class":246},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[240,92107,92108],{"class":242,"line":4557},[240,92109,92110],{"class":246},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[240,92112,92113],{"class":242,"line":4563},[240,92114,92115],{"class":246},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[240,92117,92118,92121,92123,92125,92128,92131,92134,92137,92139],{"class":242,"line":4569},[240,92119,92120],{"class":257},"    box.",[240,92122,59744],{"class":436},[240,92124,789],{"class":257},[240,92126,92127],{"class":443},"'mousemove'",[240,92129,92130],{"class":257},", _.",[240,92132,92133],{"class":436},"debounce",[240,92135,92136],{"class":257},"(mouseMove, ",[240,92138,66997],{"class":264},[240,92140,32443],{"class":257},[240,92142,92143,92145,92147],{"class":242,"line":4574},[240,92144,54353],{"class":257},[240,92146,53751],{"class":253},[240,92148,447],{"class":257},[240,92150,92151,92153,92155],{"class":242,"line":9899},[240,92152,592],{"class":257},[240,92154,53738],{"class":253},[240,92156,447],{"class":257},[240,92158,92159],{"class":242,"line":9923},[240,92160,4353],{"emptyLinePlaceholder":2051},[240,92162,92163,92165,92167],{"class":242,"line":9928},[240,92164,592],{"class":257},[240,92166,52581],{"class":253},[240,92168,447],{"class":257},[3100,92170,92171],{},[1829,92172,92173],{},"手写一个防抖函数来处理",[19,92175,92176],{},"防抖的核心就是利用定时器来实现的：",[19,92178,92179],{},"①声明一个定时器变量",[19,92181,92182],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[19,92184,92185],{},"③如果没有定时器则开启定时器，记得存到变量里面",[231,92187,92189],{"className":52579,"code":92188,"language":52581,"meta":236,"style":236},"\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",[23,92190,92191,92201,92215,92219,92227,92241,92261,92273,92281,92287,92297,92309,92321,92331,92343,92353,92363,92375,92379,92387,92395,92399,92407,92425,92443,92451,92469,92479,92487,92497,92501,92505,92509,92514,92519,92524,92529,92534,92539,92557,92564,92569,92577,92582,92595,92611,92621,92626,92630,92634,92654,92658,92663,92668,92673,92678,92686,92694,92698],{"__ignoreMap":236},[240,92192,92193,92195,92197,92199],{"class":242,"line":243},[240,92194,53243],{"class":257},[240,92196,53246],{"class":253},[240,92198,53249],{"class":436},[240,92200,447],{"class":257},[240,92202,92203,92205,92207,92209,92211,92213],{"class":242,"line":250},[240,92204,431],{"class":257},[240,92206,52581],{"class":253},[240,92208,53260],{"class":436},[240,92210,440],{"class":257},[240,92212,53265],{"class":443},[240,92214,447],{"class":257},[240,92216,92217],{"class":242,"line":261},[240,92218,4353],{"emptyLinePlaceholder":2051},[240,92220,92221,92223,92225],{"class":242,"line":277},[240,92222,431],{"class":257},[240,92224,53278],{"class":253},[240,92226,447],{"class":257},[240,92228,92229,92231,92233,92235,92237,92239],{"class":242,"line":294},[240,92230,452],{"class":257},[240,92232,53288],{"class":253},[240,92234,53291],{"class":436},[240,92236,440],{"class":257},[240,92238,53296],{"class":443},[240,92240,447],{"class":257},[240,92242,92243,92245,92247,92249,92251,92253,92255,92257,92259],{"class":242,"line":309},[240,92244,452],{"class":257},[240,92246,53288],{"class":253},[240,92248,16869],{"class":436},[240,92250,440],{"class":257},[240,92252,53335],{"class":443},[240,92254,53315],{"class":436},[240,92256,440],{"class":257},[240,92258,53342],{"class":443},[240,92260,447],{"class":257},[240,92262,92263,92265,92267,92269,92271],{"class":242,"line":529},[240,92264,452],{"class":257},[240,92266,53351],{"class":253},[240,92268,53354],{"class":257},[240,92270,53351],{"class":253},[240,92272,447],{"class":257},[240,92274,92275,92277,92279],{"class":242,"line":549},[240,92276,452],{"class":257},[240,92278,2019],{"class":253},[240,92280,447],{"class":257},[240,92282,92283,92285],{"class":242,"line":569},[240,92284,56686],{"class":436},[240,92286,258],{"class":257},[240,92288,92289,92291,92293,92295],{"class":242,"line":589},[240,92290,74511],{"class":264},[240,92292,268],{"class":257},[240,92294,62436],{"class":264},[240,92296,274],{"class":257},[240,92298,92299,92301,92303,92305,92307],{"class":242,"line":715},[240,92300,56705],{"class":264},[240,92302,268],{"class":257},[240,92304,3676],{"class":264},[240,92306,289],{"class":288},[240,92308,274],{"class":257},[240,92310,92311,92313,92315,92317,92319],{"class":242,"line":727},[240,92312,56719],{"class":264},[240,92314,268],{"class":257},[240,92316,3676],{"class":264},[240,92318,289],{"class":288},[240,92320,274],{"class":257},[240,92322,92323,92325,92327,92329],{"class":242,"line":1730},[240,92324,56818],{"class":264},[240,92326,268],{"class":257},[240,92328,91919],{"class":264},[240,92330,274],{"class":257},[240,92332,92333,92335,92337,92339,92341],{"class":242,"line":3582},[240,92334,56856],{"class":264},[240,92336,268],{"class":257},[240,92338,2921],{"class":264},[240,92340,289],{"class":288},[240,92342,274],{"class":257},[240,92344,92345,92347,92349,92351],{"class":242,"line":3596},[240,92346,59349],{"class":264},[240,92348,268],{"class":257},[240,92350,683],{"class":264},[240,92352,274],{"class":257},[240,92354,92355,92357,92359,92361],{"class":242,"line":3601},[240,92356,59219],{"class":264},[240,92358,268],{"class":257},[240,92360,971],{"class":264},[240,92362,274],{"class":257},[240,92364,92365,92367,92369,92371,92373],{"class":242,"line":3607},[240,92366,91958],{"class":264},[240,92368,268],{"class":257},[240,92370,1741],{"class":264},[240,92372,289],{"class":288},[240,92374,274],{"class":257},[240,92376,92377],{"class":242,"line":3628},[240,92378,4140],{"class":257},[240,92380,92381,92383,92385],{"class":242,"line":3633},[240,92382,54353],{"class":257},[240,92384,2019],{"class":253},[240,92386,447],{"class":257},[240,92388,92389,92391,92393],{"class":242,"line":3647},[240,92390,592],{"class":257},[240,92392,53278],{"class":253},[240,92394,447],{"class":257},[240,92396,92397],{"class":242,"line":3652},[240,92398,4353],{"emptyLinePlaceholder":2051},[240,92400,92401,92403,92405],{"class":242,"line":3681},[240,92402,431],{"class":257},[240,92404,53738],{"class":253},[240,92406,447],{"class":257},[240,92408,92409,92411,92413,92415,92417,92419,92421,92423],{"class":242,"line":3686},[240,92410,452],{"class":257},[240,92412,330],{"class":253},[240,92414,437],{"class":436},[240,92416,440],{"class":257},[240,92418,55426],{"class":443},[240,92420,57247],{"class":257},[240,92422,330],{"class":253},[240,92424,447],{"class":257},[240,92426,92427,92429,92431,92433,92435,92437,92439,92441],{"class":242,"line":3703},[240,92428,452],{"class":257},[240,92430,53751],{"class":253},[240,92432,57172],{"class":436},[240,92434,440],{"class":257},[240,92436,90187],{"class":443},[240,92438,57247],{"class":257},[240,92440,53751],{"class":253},[240,92442,447],{"class":257},[240,92444,92445,92447,92449],{"class":242,"line":3708},[240,92446,452],{"class":257},[240,92448,53751],{"class":253},[240,92450,447],{"class":257},[240,92452,92453,92455,92457,92459,92461,92463,92465,92467],{"class":242,"line":3713},[240,92454,13172],{"class":288},[240,92456,88846],{"class":264},[240,92458,15514],{"class":288},[240,92460,56331],{"class":257},[240,92462,56334],{"class":436},[240,92464,789],{"class":257},[240,92466,92059],{"class":443},[240,92468,2129],{"class":257},[240,92470,92471,92473,92475,92477],{"class":242,"line":3718},[240,92472,54155],{"class":288},[240,92474,11389],{"class":257},[240,92476,440],{"class":288},[240,92478,49279],{"class":264},[240,92480,92481,92483,92485],{"class":242,"line":3732},[240,92482,72007],{"class":288},[240,92484,92078],{"class":436},[240,92486,12804],{"class":257},[240,92488,92489,92491,92493,92495],{"class":242,"line":3737},[240,92490,92085],{"class":257},[240,92492,440],{"class":288},[240,92494,4984],{"class":257},[240,92496,4655],{"class":288},[240,92498,92499],{"class":242,"line":4530},[240,92500,92096],{"class":246},[240,92502,92503],{"class":242,"line":4544},[240,92504,4140],{"class":257},[240,92506,92507],{"class":242,"line":4552},[240,92508,92105],{"class":246},[240,92510,92511],{"class":242,"line":4557},[240,92512,92513],{"class":246},"    \u002F\u002F 手写防抖函数\n",[240,92515,92516],{"class":242,"line":4563},[240,92517,92518],{"class":246},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[240,92520,92521],{"class":242,"line":4569},[240,92522,92523],{"class":246},"    \u002F\u002F 1.声明定时器变量\n",[240,92525,92526],{"class":242,"line":4574},[240,92527,92528],{"class":246},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[240,92530,92531],{"class":242,"line":9899},[240,92532,92533],{"class":246},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[240,92535,92536],{"class":242,"line":9923},[240,92537,92538],{"class":246},"    \u002F\u002F 4.定时器里面写函数调用\n",[240,92540,92541,92543,92546,92548,92551,92553,92555],{"class":242,"line":9928},[240,92542,72007],{"class":288},[240,92544,92545],{"class":436}," debounce",[240,92547,789],{"class":257},[240,92549,92550],{"class":792},"fn",[240,92552,1277],{"class":257},[240,92554,2817],{"class":792},[240,92556,14392],{"class":257},[240,92558,92559,92561],{"class":242,"line":9934},[240,92560,81686],{"class":288},[240,92562,92563],{"class":257}," timer\n",[240,92565,92566],{"class":242,"line":9961},[240,92567,92568],{"class":246},"      \u002F\u002F return 返回一个匿名函数\n",[240,92570,92571,92573,92575],{"class":242,"line":9966},[240,92572,75897],{"class":288},[240,92574,60849],{"class":288},[240,92576,56387],{"class":257},[240,92578,92579],{"class":242,"line":9972},[240,92580,92581],{"class":246},"        \u002F\u002F 这里边写第二三四步\n",[240,92583,92584,92586,92589,92592],{"class":242,"line":9984},[240,92585,4450],{"class":288},[240,92587,92588],{"class":257}," (timer) ",[240,92590,92591],{"class":436},"clearTimeout",[240,92593,92594],{"class":257},"(timer)\n",[240,92596,92597,92600,92602,92605,92607,92609],{"class":242,"line":9996},[240,92598,92599],{"class":257},"        timer ",[240,92601,440],{"class":288},[240,92603,92604],{"class":436}," setTimeout",[240,92606,789],{"class":257},[240,92608,56384],{"class":288},[240,92610,56387],{"class":257},[240,92612,92613,92616,92618],{"class":242,"line":10008},[240,92614,92615],{"class":436},"          fn",[240,92617,15000],{"class":257},[240,92619,92620],{"class":246},"\u002F\u002F加小括号调用fn }, t)\n",[240,92622,92623],{"class":242,"line":11667},[240,92624,92625],{"class":257},"        }, t)\n",[240,92627,92628],{"class":242,"line":11692},[240,92629,54334],{"class":257},[240,92631,92632],{"class":242,"line":11715},[240,92633,4140],{"class":257},[240,92635,92636,92638,92640,92642,92644,92646,92648,92650,92652],{"class":242,"line":11739},[240,92637,92120],{"class":257},[240,92639,59744],{"class":436},[240,92641,789],{"class":257},[240,92643,92127],{"class":443},[240,92645,1277],{"class":257},[240,92647,92133],{"class":436},[240,92649,92136],{"class":257},[240,92651,66997],{"class":264},[240,92653,32443],{"class":257},[240,92655,92656],{"class":242,"line":11744},[240,92657,4353],{"emptyLinePlaceholder":2051},[240,92659,92660],{"class":242,"line":11749},[240,92661,92662],{"class":246},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[240,92664,92665],{"class":242,"line":11754},[240,92666,92667],{"class":246},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[240,92669,92670],{"class":242,"line":11763},[240,92671,92672],{"class":246},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[240,92674,92675],{"class":242,"line":11768},[240,92676,92677],{"class":246},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[240,92679,92680,92682,92684],{"class":242,"line":11774},[240,92681,54353],{"class":257},[240,92683,53751],{"class":253},[240,92685,447],{"class":257},[240,92687,92688,92690,92692],{"class":242,"line":11795},[240,92689,592],{"class":257},[240,92691,53738],{"class":253},[240,92693,447],{"class":257},[240,92695,92696],{"class":242,"line":11801},[240,92697,4353],{"emptyLinePlaceholder":2051},[240,92699,92700,92702,92704],{"class":242,"line":11815},[240,92701,592],{"class":257},[240,92703,52581],{"class":253},[240,92705,447],{"class":257},[32,92707,92709],{"id":92708},"_4172-节流","4.17.2 节流",[19,92711,92712],{},[219,92713],{"alt":236,"src":92714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[19,92716,92717],{},[219,92718],{"alt":236,"src":92719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[19,92721,92722],{},[68,92723,92724],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[19,92726,92727],{},"实现方式：",[3100,92729,92730],{},[1829,92731,92732],{},"lodash 提供的节流函数来处理",[19,92734,92735],{},"_.throttle(func,[wait=0],[options=])",[19,92737,92738],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[231,92740,92742],{"className":52579,"code":92741,"language":52581,"meta":236,"style":236},"\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",[23,92743,92744,92754,92768,92772,92780,92794,92814,92826,92834,92840,92850,92862,92874,92884,92896,92906,92916,92928,92932,92940,92948,92952,92960,92978,92996,93004,93022,93032,93040,93050,93054,93058,93062,93067,93072,93093,93101,93109,93113],{"__ignoreMap":236},[240,92745,92746,92748,92750,92752],{"class":242,"line":243},[240,92747,53243],{"class":257},[240,92749,53246],{"class":253},[240,92751,53249],{"class":436},[240,92753,447],{"class":257},[240,92755,92756,92758,92760,92762,92764,92766],{"class":242,"line":250},[240,92757,431],{"class":257},[240,92759,52581],{"class":253},[240,92761,53260],{"class":436},[240,92763,440],{"class":257},[240,92765,53265],{"class":443},[240,92767,447],{"class":257},[240,92769,92770],{"class":242,"line":261},[240,92771,4353],{"emptyLinePlaceholder":2051},[240,92773,92774,92776,92778],{"class":242,"line":277},[240,92775,431],{"class":257},[240,92777,53278],{"class":253},[240,92779,447],{"class":257},[240,92781,92782,92784,92786,92788,92790,92792],{"class":242,"line":294},[240,92783,452],{"class":257},[240,92785,53288],{"class":253},[240,92787,53291],{"class":436},[240,92789,440],{"class":257},[240,92791,53296],{"class":443},[240,92793,447],{"class":257},[240,92795,92796,92798,92800,92802,92804,92806,92808,92810,92812],{"class":242,"line":309},[240,92797,452],{"class":257},[240,92799,53288],{"class":253},[240,92801,16869],{"class":436},[240,92803,440],{"class":257},[240,92805,53335],{"class":443},[240,92807,53315],{"class":436},[240,92809,440],{"class":257},[240,92811,53342],{"class":443},[240,92813,447],{"class":257},[240,92815,92816,92818,92820,92822,92824],{"class":242,"line":529},[240,92817,452],{"class":257},[240,92819,53351],{"class":253},[240,92821,53354],{"class":257},[240,92823,53351],{"class":253},[240,92825,447],{"class":257},[240,92827,92828,92830,92832],{"class":242,"line":549},[240,92829,452],{"class":257},[240,92831,2019],{"class":253},[240,92833,447],{"class":257},[240,92835,92836,92838],{"class":242,"line":569},[240,92837,56686],{"class":436},[240,92839,258],{"class":257},[240,92841,92842,92844,92846,92848],{"class":242,"line":589},[240,92843,74511],{"class":264},[240,92845,268],{"class":257},[240,92847,62436],{"class":264},[240,92849,274],{"class":257},[240,92851,92852,92854,92856,92858,92860],{"class":242,"line":715},[240,92853,56705],{"class":264},[240,92855,268],{"class":257},[240,92857,3676],{"class":264},[240,92859,289],{"class":288},[240,92861,274],{"class":257},[240,92863,92864,92866,92868,92870,92872],{"class":242,"line":727},[240,92865,56719],{"class":264},[240,92867,268],{"class":257},[240,92869,3676],{"class":264},[240,92871,289],{"class":288},[240,92873,274],{"class":257},[240,92875,92876,92878,92880,92882],{"class":242,"line":1730},[240,92877,56818],{"class":264},[240,92879,268],{"class":257},[240,92881,91919],{"class":264},[240,92883,274],{"class":257},[240,92885,92886,92888,92890,92892,92894],{"class":242,"line":3582},[240,92887,56856],{"class":264},[240,92889,268],{"class":257},[240,92891,2921],{"class":264},[240,92893,289],{"class":288},[240,92895,274],{"class":257},[240,92897,92898,92900,92902,92904],{"class":242,"line":3596},[240,92899,59349],{"class":264},[240,92901,268],{"class":257},[240,92903,683],{"class":264},[240,92905,274],{"class":257},[240,92907,92908,92910,92912,92914],{"class":242,"line":3601},[240,92909,59219],{"class":264},[240,92911,268],{"class":257},[240,92913,971],{"class":264},[240,92915,274],{"class":257},[240,92917,92918,92920,92922,92924,92926],{"class":242,"line":3607},[240,92919,91958],{"class":264},[240,92921,268],{"class":257},[240,92923,1741],{"class":264},[240,92925,289],{"class":288},[240,92927,274],{"class":257},[240,92929,92930],{"class":242,"line":3628},[240,92931,4140],{"class":257},[240,92933,92934,92936,92938],{"class":242,"line":3633},[240,92935,54353],{"class":257},[240,92937,2019],{"class":253},[240,92939,447],{"class":257},[240,92941,92942,92944,92946],{"class":242,"line":3647},[240,92943,592],{"class":257},[240,92945,53278],{"class":253},[240,92947,447],{"class":257},[240,92949,92950],{"class":242,"line":3652},[240,92951,4353],{"emptyLinePlaceholder":2051},[240,92953,92954,92956,92958],{"class":242,"line":3681},[240,92955,431],{"class":257},[240,92957,53738],{"class":253},[240,92959,447],{"class":257},[240,92961,92962,92964,92966,92968,92970,92972,92974,92976],{"class":242,"line":3686},[240,92963,452],{"class":257},[240,92965,330],{"class":253},[240,92967,437],{"class":436},[240,92969,440],{"class":257},[240,92971,55426],{"class":443},[240,92973,57247],{"class":257},[240,92975,330],{"class":253},[240,92977,447],{"class":257},[240,92979,92980,92982,92984,92986,92988,92990,92992,92994],{"class":242,"line":3703},[240,92981,452],{"class":257},[240,92983,53751],{"class":253},[240,92985,57172],{"class":436},[240,92987,440],{"class":257},[240,92989,90187],{"class":443},[240,92991,57247],{"class":257},[240,92993,53751],{"class":253},[240,92995,447],{"class":257},[240,92997,92998,93000,93002],{"class":242,"line":3708},[240,92999,452],{"class":257},[240,93001,53751],{"class":253},[240,93003,447],{"class":257},[240,93005,93006,93008,93010,93012,93014,93016,93018,93020],{"class":242,"line":3713},[240,93007,13172],{"class":288},[240,93009,88846],{"class":264},[240,93011,15514],{"class":288},[240,93013,56331],{"class":257},[240,93015,56334],{"class":436},[240,93017,789],{"class":257},[240,93019,92059],{"class":443},[240,93021,2129],{"class":257},[240,93023,93024,93026,93028,93030],{"class":242,"line":3718},[240,93025,54155],{"class":288},[240,93027,11389],{"class":257},[240,93029,440],{"class":288},[240,93031,49279],{"class":264},[240,93033,93034,93036,93038],{"class":242,"line":3732},[240,93035,72007],{"class":288},[240,93037,92078],{"class":436},[240,93039,12804],{"class":257},[240,93041,93042,93044,93046,93048],{"class":242,"line":3737},[240,93043,92085],{"class":257},[240,93045,440],{"class":288},[240,93047,4984],{"class":257},[240,93049,4655],{"class":288},[240,93051,93052],{"class":242,"line":4530},[240,93053,92096],{"class":246},[240,93055,93056],{"class":242,"line":4544},[240,93057,4140],{"class":257},[240,93059,93060],{"class":242,"line":4552},[240,93061,92105],{"class":246},[240,93063,93064],{"class":242,"line":4557},[240,93065,93066],{"class":246},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[240,93068,93069],{"class":242,"line":4563},[240,93070,93071],{"class":246},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[240,93073,93074,93076,93078,93080,93082,93084,93087,93089,93091],{"class":242,"line":4569},[240,93075,92120],{"class":257},[240,93077,59744],{"class":436},[240,93079,789],{"class":257},[240,93081,92127],{"class":443},[240,93083,92130],{"class":257},[240,93085,93086],{"class":436},"throttle",[240,93088,92136],{"class":257},[240,93090,66997],{"class":264},[240,93092,32443],{"class":257},[240,93094,93095,93097,93099],{"class":242,"line":4574},[240,93096,54353],{"class":257},[240,93098,53751],{"class":253},[240,93100,447],{"class":257},[240,93102,93103,93105,93107],{"class":242,"line":9899},[240,93104,592],{"class":257},[240,93106,53738],{"class":253},[240,93108,447],{"class":257},[240,93110,93111],{"class":242,"line":9923},[240,93112,4353],{"emptyLinePlaceholder":2051},[240,93114,93115,93117,93119],{"class":242,"line":9928},[240,93116,592],{"class":257},[240,93118,52581],{"class":253},[240,93120,447],{"class":257},[3100,93122,93123],{},[1829,93124,93125],{},"手写一个节流函数来处理",[19,93127,72868],{},[19,93129,92179],{},[19,93131,93132],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[19,93134,93135],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[231,93137,93139],{"className":52579,"code":93138,"language":52581,"meta":236,"style":236},"\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",[23,93140,93141,93151,93165,93169,93177,93191,93211,93223,93231,93237,93247,93259,93271,93281,93293,93303,93313,93325,93329,93337,93345,93349,93357,93375,93393,93401,93419,93429,93437,93447,93451,93455,93459,93464,93469,93474,93479,93484,93489,93506,93512,93520,93531,93546,93553,93558,93563,93573,93578,93583,93588,93592,93596,93600,93620,93628,93636,93640],{"__ignoreMap":236},[240,93142,93143,93145,93147,93149],{"class":242,"line":243},[240,93144,53243],{"class":257},[240,93146,53246],{"class":253},[240,93148,53249],{"class":436},[240,93150,447],{"class":257},[240,93152,93153,93155,93157,93159,93161,93163],{"class":242,"line":250},[240,93154,431],{"class":257},[240,93156,52581],{"class":253},[240,93158,53260],{"class":436},[240,93160,440],{"class":257},[240,93162,53265],{"class":443},[240,93164,447],{"class":257},[240,93166,93167],{"class":242,"line":261},[240,93168,4353],{"emptyLinePlaceholder":2051},[240,93170,93171,93173,93175],{"class":242,"line":277},[240,93172,431],{"class":257},[240,93174,53278],{"class":253},[240,93176,447],{"class":257},[240,93178,93179,93181,93183,93185,93187,93189],{"class":242,"line":294},[240,93180,452],{"class":257},[240,93182,53288],{"class":253},[240,93184,53291],{"class":436},[240,93186,440],{"class":257},[240,93188,53296],{"class":443},[240,93190,447],{"class":257},[240,93192,93193,93195,93197,93199,93201,93203,93205,93207,93209],{"class":242,"line":309},[240,93194,452],{"class":257},[240,93196,53288],{"class":253},[240,93198,16869],{"class":436},[240,93200,440],{"class":257},[240,93202,53335],{"class":443},[240,93204,53315],{"class":436},[240,93206,440],{"class":257},[240,93208,53342],{"class":443},[240,93210,447],{"class":257},[240,93212,93213,93215,93217,93219,93221],{"class":242,"line":529},[240,93214,452],{"class":257},[240,93216,53351],{"class":253},[240,93218,53354],{"class":257},[240,93220,53351],{"class":253},[240,93222,447],{"class":257},[240,93224,93225,93227,93229],{"class":242,"line":549},[240,93226,452],{"class":257},[240,93228,2019],{"class":253},[240,93230,447],{"class":257},[240,93232,93233,93235],{"class":242,"line":569},[240,93234,56686],{"class":436},[240,93236,258],{"class":257},[240,93238,93239,93241,93243,93245],{"class":242,"line":589},[240,93240,74511],{"class":264},[240,93242,268],{"class":257},[240,93244,62436],{"class":264},[240,93246,274],{"class":257},[240,93248,93249,93251,93253,93255,93257],{"class":242,"line":715},[240,93250,56705],{"class":264},[240,93252,268],{"class":257},[240,93254,3676],{"class":264},[240,93256,289],{"class":288},[240,93258,274],{"class":257},[240,93260,93261,93263,93265,93267,93269],{"class":242,"line":727},[240,93262,56719],{"class":264},[240,93264,268],{"class":257},[240,93266,3676],{"class":264},[240,93268,289],{"class":288},[240,93270,274],{"class":257},[240,93272,93273,93275,93277,93279],{"class":242,"line":1730},[240,93274,56818],{"class":264},[240,93276,268],{"class":257},[240,93278,91919],{"class":264},[240,93280,274],{"class":257},[240,93282,93283,93285,93287,93289,93291],{"class":242,"line":3582},[240,93284,56856],{"class":264},[240,93286,268],{"class":257},[240,93288,2921],{"class":264},[240,93290,289],{"class":288},[240,93292,274],{"class":257},[240,93294,93295,93297,93299,93301],{"class":242,"line":3596},[240,93296,59349],{"class":264},[240,93298,268],{"class":257},[240,93300,683],{"class":264},[240,93302,274],{"class":257},[240,93304,93305,93307,93309,93311],{"class":242,"line":3601},[240,93306,59219],{"class":264},[240,93308,268],{"class":257},[240,93310,971],{"class":264},[240,93312,274],{"class":257},[240,93314,93315,93317,93319,93321,93323],{"class":242,"line":3607},[240,93316,91958],{"class":264},[240,93318,268],{"class":257},[240,93320,1741],{"class":264},[240,93322,289],{"class":288},[240,93324,274],{"class":257},[240,93326,93327],{"class":242,"line":3628},[240,93328,4140],{"class":257},[240,93330,93331,93333,93335],{"class":242,"line":3633},[240,93332,54353],{"class":257},[240,93334,2019],{"class":253},[240,93336,447],{"class":257},[240,93338,93339,93341,93343],{"class":242,"line":3647},[240,93340,592],{"class":257},[240,93342,53278],{"class":253},[240,93344,447],{"class":257},[240,93346,93347],{"class":242,"line":3652},[240,93348,4353],{"emptyLinePlaceholder":2051},[240,93350,93351,93353,93355],{"class":242,"line":3681},[240,93352,431],{"class":257},[240,93354,53738],{"class":253},[240,93356,447],{"class":257},[240,93358,93359,93361,93363,93365,93367,93369,93371,93373],{"class":242,"line":3686},[240,93360,452],{"class":257},[240,93362,330],{"class":253},[240,93364,437],{"class":436},[240,93366,440],{"class":257},[240,93368,55426],{"class":443},[240,93370,57247],{"class":257},[240,93372,330],{"class":253},[240,93374,447],{"class":257},[240,93376,93377,93379,93381,93383,93385,93387,93389,93391],{"class":242,"line":3703},[240,93378,452],{"class":257},[240,93380,53751],{"class":253},[240,93382,57172],{"class":436},[240,93384,440],{"class":257},[240,93386,90187],{"class":443},[240,93388,57247],{"class":257},[240,93390,53751],{"class":253},[240,93392,447],{"class":257},[240,93394,93395,93397,93399],{"class":242,"line":3708},[240,93396,452],{"class":257},[240,93398,53751],{"class":253},[240,93400,447],{"class":257},[240,93402,93403,93405,93407,93409,93411,93413,93415,93417],{"class":242,"line":3713},[240,93404,13172],{"class":288},[240,93406,88846],{"class":264},[240,93408,15514],{"class":288},[240,93410,56331],{"class":257},[240,93412,56334],{"class":436},[240,93414,789],{"class":257},[240,93416,92059],{"class":443},[240,93418,2129],{"class":257},[240,93420,93421,93423,93425,93427],{"class":242,"line":3718},[240,93422,54155],{"class":288},[240,93424,11389],{"class":257},[240,93426,440],{"class":288},[240,93428,49279],{"class":264},[240,93430,93431,93433,93435],{"class":242,"line":3732},[240,93432,72007],{"class":288},[240,93434,92078],{"class":436},[240,93436,12804],{"class":257},[240,93438,93439,93441,93443,93445],{"class":242,"line":3737},[240,93440,92085],{"class":257},[240,93442,440],{"class":288},[240,93444,4984],{"class":257},[240,93446,4655],{"class":288},[240,93448,93449],{"class":242,"line":4530},[240,93450,92096],{"class":246},[240,93452,93453],{"class":242,"line":4544},[240,93454,4140],{"class":257},[240,93456,93457],{"class":242,"line":4552},[240,93458,92105],{"class":246},[240,93460,93461],{"class":242,"line":4557},[240,93462,93463],{"class":246},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[240,93465,93466],{"class":242,"line":4563},[240,93467,93468],{"class":246},"    \u002F\u002F 1.声明一个定时器变量\n",[240,93470,93471],{"class":242,"line":4569},[240,93472,93473],{"class":246},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[240,93475,93476],{"class":242,"line":4574},[240,93477,93478],{"class":246},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[240,93480,93481],{"class":242,"line":9899},[240,93482,93483],{"class":246},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[240,93485,93486],{"class":242,"line":9923},[240,93487,93488],{"class":246},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[240,93490,93491,93493,93496,93498,93500,93502,93504],{"class":242,"line":9928},[240,93492,72007],{"class":288},[240,93494,93495],{"class":436}," throttle",[240,93497,789],{"class":257},[240,93499,92550],{"class":792},[240,93501,1277],{"class":257},[240,93503,2817],{"class":792},[240,93505,14392],{"class":257},[240,93507,93508,93510],{"class":242,"line":9934},[240,93509,81686],{"class":288},[240,93511,92563],{"class":257},[240,93513,93514,93516,93518],{"class":242,"line":9961},[240,93515,75897],{"class":288},[240,93517,60849],{"class":288},[240,93519,56387],{"class":257},[240,93521,93522,93524,93526,93528],{"class":242,"line":9966},[240,93523,4450],{"class":288},[240,93525,3612],{"class":257},[240,93527,2331],{"class":288},[240,93529,93530],{"class":257},"timer) {\n",[240,93532,93533,93536,93538,93540,93542,93544],{"class":242,"line":9972},[240,93534,93535],{"class":257},"          timer ",[240,93537,440],{"class":288},[240,93539,92604],{"class":436},[240,93541,789],{"class":257},[240,93543,56384],{"class":288},[240,93545,56387],{"class":257},[240,93547,93548,93551],{"class":242,"line":9984},[240,93549,93550],{"class":436},"            fn",[240,93552,3929],{"class":257},[240,93554,93555],{"class":242,"line":9996},[240,93556,93557],{"class":246},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[240,93559,93560],{"class":242,"line":10008},[240,93561,93562],{"class":246},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[240,93564,93565,93568,93570],{"class":242,"line":11667},[240,93566,93567],{"class":257},"            timer ",[240,93569,440],{"class":288},[240,93571,93572],{"class":264}," null\n",[240,93574,93575],{"class":242,"line":11692},[240,93576,93577],{"class":246},"            \u002F\u002F 不能用clearTimeout(timer)\n",[240,93579,93580],{"class":242,"line":11715},[240,93581,93582],{"class":246},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[240,93584,93585],{"class":242,"line":11739},[240,93586,93587],{"class":257},"          }, t)\n",[240,93589,93590],{"class":242,"line":11744},[240,93591,4482],{"class":257},[240,93593,93594],{"class":242,"line":11749},[240,93595,54334],{"class":257},[240,93597,93598],{"class":242,"line":11754},[240,93599,4140],{"class":257},[240,93601,93602,93604,93606,93608,93610,93612,93614,93616,93618],{"class":242,"line":11763},[240,93603,92120],{"class":257},[240,93605,59744],{"class":436},[240,93607,789],{"class":257},[240,93609,92127],{"class":443},[240,93611,1277],{"class":257},[240,93613,93086],{"class":436},[240,93615,92136],{"class":257},[240,93617,66997],{"class":264},[240,93619,32443],{"class":257},[240,93621,93622,93624,93626],{"class":242,"line":11768},[240,93623,54353],{"class":257},[240,93625,53751],{"class":253},[240,93627,447],{"class":257},[240,93629,93630,93632,93634],{"class":242,"line":11774},[240,93631,592],{"class":257},[240,93633,53738],{"class":253},[240,93635,447],{"class":257},[240,93637,93638],{"class":242,"line":11795},[240,93639,4353],{"emptyLinePlaceholder":2051},[240,93641,93642,93644,93646],{"class":242,"line":11801},[240,93643,592],{"class":257},[240,93645,52581],{"class":253},[240,93647,447],{"class":257},[32,93649,93651],{"id":93650},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[231,93653,93655],{"className":55003,"code":93654,"language":55005,"meta":236,"style":236},"\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",[23,93656,93657,93665,93673,93678,93683,93688,93693,93697,93705],{"__ignoreMap":236},[240,93658,93659,93661,93663],{"class":242,"line":243},[240,93660,431],{"class":257},[240,93662,53738],{"class":253},[240,93664,447],{"class":257},[240,93666,93667,93669,93671],{"class":242,"line":250},[240,93668,452],{"class":257},[240,93670,53751],{"class":253},[240,93672,447],{"class":257},[240,93674,93675],{"class":242,"line":261},[240,93676,93677],{"class":257},"    let timer = null\n",[240,93679,93680],{"class":242,"line":277},[240,93681,93682],{"class":257},"    timer = setTimeout(() => {\n",[240,93684,93685],{"class":242,"line":294},[240,93686,93687],{"class":257},"      clearTimeout(timer)\n",[240,93689,93690],{"class":242,"line":309},[240,93691,93692],{"class":257},"      console.log(timer)\n",[240,93694,93695],{"class":242,"line":529},[240,93696,62156],{"class":257},[240,93698,93699,93701,93703],{"class":242,"line":549},[240,93700,54353],{"class":257},[240,93702,53751],{"class":253},[240,93704,447],{"class":257},[240,93706,93707,93709,93711],{"class":242,"line":569},[240,93708,592],{"class":257},[240,93710,53738],{"class":253},[240,93712,447],{"class":257},[19,93714,93715],{},"输出为1",[19,93717,93718],{},"在开启的定时器里边写清除定时器",[19,93720,93721],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[32,93723,93725],{"id":93724},"_4174-节流综合案例","4.17.4 节流综合案例",[19,93727,93728],{},"页面打开，可以记录上一次的视频播放位置",[19,93730,93731],{},[219,93732],{"alt":236,"src":93733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[19,93735,93736],{},[219,93737],{"alt":236,"src":93738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[231,93740,93742],{"className":52579,"code":93741,"language":52581,"meta":236,"style":236},"\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",[23,93743,93744,93754,93768,93772,93780,93794,93814,93834,93856,93869,93877,93883,93893,93903,93913,93917,93921,93928,93941,93953,93957,93961,93971,93983,93997,94001,94005,94012,94022,94035,94047,94057,94067,94083,94095,94099,94103,94111,94121,94133,94143,94153,94163,94167,94171,94181,94192,94196,94204,94212,94216,94224,94239,94254,94269,94290,94298,94306,94321,94343,94351,94366,94392,94418,94444,94452,94460,94479,94487,94492,94511,94516,94534,94539,94544,94552,94557,94571,94579,94584,94601,94605,94610,94632,94636,94644,94652,94656],{"__ignoreMap":236},[240,93745,93746,93748,93750,93752],{"class":242,"line":243},[240,93747,53243],{"class":257},[240,93749,53246],{"class":253},[240,93751,53249],{"class":436},[240,93753,447],{"class":257},[240,93755,93756,93758,93760,93762,93764,93766],{"class":242,"line":250},[240,93757,431],{"class":257},[240,93759,52581],{"class":253},[240,93761,53260],{"class":436},[240,93763,440],{"class":257},[240,93765,53265],{"class":443},[240,93767,447],{"class":257},[240,93769,93770],{"class":242,"line":261},[240,93771,4353],{"emptyLinePlaceholder":2051},[240,93773,93774,93776,93778],{"class":242,"line":277},[240,93775,431],{"class":257},[240,93777,53278],{"class":253},[240,93779,447],{"class":257},[240,93781,93782,93784,93786,93788,93790,93792],{"class":242,"line":294},[240,93783,452],{"class":257},[240,93785,53288],{"class":253},[240,93787,53291],{"class":436},[240,93789,440],{"class":257},[240,93791,53296],{"class":443},[240,93793,61058],{"class":257},[240,93795,93796,93798,93800,93802,93804,93806,93808,93810,93812],{"class":242,"line":309},[240,93797,452],{"class":257},[240,93799,53288],{"class":253},[240,93801,53307],{"class":436},[240,93803,440],{"class":257},[240,93805,53312],{"class":443},[240,93807,53315],{"class":436},[240,93809,440],{"class":257},[240,93811,53320],{"class":443},[240,93813,61058],{"class":257},[240,93815,93816,93818,93820,93822,93824,93826,93828,93830,93832],{"class":242,"line":529},[240,93817,452],{"class":257},[240,93819,53288],{"class":253},[240,93821,16869],{"class":436},[240,93823,440],{"class":257},[240,93825,53335],{"class":443},[240,93827,53315],{"class":436},[240,93829,440],{"class":257},[240,93831,53342],{"class":443},[240,93833,61058],{"class":257},[240,93835,93836,93838,93840,93842,93844,93847,93849,93851,93854],{"class":242,"line":549},[240,93837,452],{"class":257},[240,93839,53288],{"class":253},[240,93841,16869],{"class":436},[240,93843,440],{"class":257},[240,93845,93846],{"class":443},"\"referrer\"",[240,93848,53315],{"class":436},[240,93850,440],{"class":257},[240,93852,93853],{"class":443},"\"never\"",[240,93855,61058],{"class":257},[240,93857,93858,93860,93862,93865,93867],{"class":242,"line":569},[240,93859,452],{"class":257},[240,93861,53351],{"class":253},[240,93863,93864],{"class":257},">综合案例\u003C\u002F",[240,93866,53351],{"class":253},[240,93868,447],{"class":257},[240,93870,93871,93873,93875],{"class":242,"line":589},[240,93872,452],{"class":257},[240,93874,2019],{"class":253},[240,93876,447],{"class":257},[240,93878,93879,93881],{"class":242,"line":715},[240,93880,8354],{"class":253},[240,93882,258],{"class":257},[240,93884,93885,93887,93889,93891],{"class":242,"line":727},[240,93886,56630],{"class":264},[240,93888,268],{"class":257},[240,93890,1274],{"class":264},[240,93892,274],{"class":257},[240,93894,93895,93897,93899,93901],{"class":242,"line":1730},[240,93896,56641],{"class":264},[240,93898,268],{"class":257},[240,93900,1274],{"class":264},[240,93902,274],{"class":257},[240,93904,93905,93907,93909,93911],{"class":242,"line":3582},[240,93906,74511],{"class":264},[240,93908,268],{"class":257},[240,93910,62436],{"class":264},[240,93912,274],{"class":257},[240,93914,93915],{"class":242,"line":3596},[240,93916,4140],{"class":257},[240,93918,93919],{"class":242,"line":3601},[240,93920,4353],{"emptyLinePlaceholder":2051},[240,93922,93923,93926],{"class":242,"line":3607},[240,93924,93925],{"class":436},"    .container",[240,93927,258],{"class":257},[240,93929,93930,93932,93934,93937,93939],{"class":242,"line":3628},[240,93931,56705],{"class":264},[240,93933,268],{"class":257},[240,93935,93936],{"class":264},"1200",[240,93938,289],{"class":288},[240,93940,274],{"class":257},[240,93942,93943,93945,93947,93949,93951],{"class":242,"line":3633},[240,93944,56641],{"class":264},[240,93946,268],{"class":257},[240,93948,1274],{"class":264},[240,93950,53498],{"class":264},[240,93952,274],{"class":257},[240,93954,93955],{"class":242,"line":3647},[240,93956,4140],{"class":257},[240,93958,93959],{"class":242,"line":3652},[240,93960,4353],{"emptyLinePlaceholder":2051},[240,93962,93963,93966,93969],{"class":242,"line":3681},[240,93964,93965],{"class":436},"    .video",[240,93967,93968],{"class":253}," video",[240,93970,258],{"class":257},[240,93972,93973,93975,93977,93979,93981],{"class":242,"line":3686},[240,93974,56705],{"class":264},[240,93976,268],{"class":257},[240,93978,285],{"class":264},[240,93980,2429],{"class":288},[240,93982,274],{"class":257},[240,93984,93985,93987,93989,93991,93993,93995],{"class":242,"line":3703},[240,93986,56630],{"class":264},[240,93988,268],{"class":257},[240,93990,1000],{"class":264},[240,93992,289],{"class":288},[240,93994,6045],{"class":264},[240,93996,274],{"class":257},[240,93998,93999],{"class":242,"line":3708},[240,94000,4140],{"class":257},[240,94002,94003],{"class":242,"line":3713},[240,94004,4353],{"emptyLinePlaceholder":2051},[240,94006,94007,94010],{"class":242,"line":3718},[240,94008,94009],{"class":436},"    .elevator",[240,94011,258],{"class":257},[240,94013,94014,94016,94018,94020],{"class":242,"line":3732},[240,94015,56693],{"class":264},[240,94017,268],{"class":257},[240,94019,1158],{"class":264},[240,94021,274],{"class":257},[240,94023,94024,94026,94028,94031,94033],{"class":242,"line":3737},[240,94025,56881],{"class":264},[240,94027,268],{"class":257},[240,94029,94030],{"class":264},"280",[240,94032,289],{"class":288},[240,94034,274],{"class":257},[240,94036,94037,94039,94041,94043,94045],{"class":242,"line":4530},[240,94038,88340],{"class":264},[240,94040,268],{"class":257},[240,94042,1000],{"class":264},[240,94044,289],{"class":288},[240,94046,274],{"class":257},[240,94048,94049,94051,94053,94055],{"class":242,"line":4544},[240,94050,88153],{"class":264},[240,94052,268],{"class":257},[240,94054,88158],{"class":264},[240,94056,274],{"class":257},[240,94058,94059,94061,94063,94065],{"class":242,"line":4552},[240,94060,63647],{"class":264},[240,94062,268],{"class":257},[240,94064,683],{"class":264},[240,94066,274],{"class":257},[240,94068,94069,94071,94073,94075,94077,94079,94081],{"class":242,"line":4557},[240,94070,63901],{"class":264},[240,94072,268],{"class":257},[240,94074,1643],{"class":264},[240,94076,289],{"class":288},[240,94078,53463],{"class":264},[240,94080,64168],{"class":264},[240,94082,274],{"class":257},[240,94084,94085,94087,94089,94091,94093],{"class":242,"line":4563},[240,94086,56705],{"class":264},[240,94088,268],{"class":257},[240,94090,3002],{"class":264},[240,94092,289],{"class":288},[240,94094,274],{"class":257},[240,94096,94097],{"class":242,"line":4569},[240,94098,4140],{"class":257},[240,94100,94101],{"class":242,"line":4574},[240,94102,4353],{"emptyLinePlaceholder":2051},[240,94104,94105,94107,94109],{"class":242,"line":9899},[240,94106,94009],{"class":436},[240,94108,609],{"class":253},[240,94110,258],{"class":257},[240,94112,94113,94115,94117,94119],{"class":242,"line":9923},[240,94114,56943],{"class":264},[240,94116,268],{"class":257},[240,94118,271],{"class":264},[240,94120,274],{"class":257},[240,94122,94123,94125,94127,94129,94131],{"class":242,"line":9928},[240,94124,56630],{"class":264},[240,94126,268],{"class":257},[240,94128,2546],{"class":264},[240,94130,289],{"class":288},[240,94132,274],{"class":257},[240,94134,94135,94137,94139,94141],{"class":242,"line":9934},[240,94136,65893],{"class":264},[240,94138,268],{"class":257},[240,94140,826],{"class":264},[240,94142,274],{"class":257},[240,94144,94145,94147,94149,94151],{"class":242,"line":9961},[240,94146,59219],{"class":264},[240,94148,268],{"class":257},[240,94150,971],{"class":264},[240,94152,274],{"class":257},[240,94154,94155,94157,94159,94161],{"class":242,"line":9966},[240,94156,59349],{"class":264},[240,94158,268],{"class":257},[240,94160,63994],{"class":264},[240,94162,274],{"class":257},[240,94164,94165],{"class":242,"line":9972},[240,94166,4140],{"class":257},[240,94168,94169],{"class":242,"line":9984},[240,94170,4353],{"emptyLinePlaceholder":2051},[240,94172,94173,94175,94177,94179],{"class":242,"line":9996},[240,94174,94009],{"class":436},[240,94176,609],{"class":253},[240,94178,65947],{"class":436},[240,94180,258],{"class":257},[240,94182,94183,94185,94187,94190],{"class":242,"line":10008},[240,94184,59349],{"class":264},[240,94186,268],{"class":257},[240,94188,94189],{"class":264},"#1286ff",[240,94191,274],{"class":257},[240,94193,94194],{"class":242,"line":11667},[240,94195,4140],{"class":257},[240,94197,94198,94200,94202],{"class":242,"line":11692},[240,94199,54353],{"class":257},[240,94201,2019],{"class":253},[240,94203,447],{"class":257},[240,94205,94206,94208,94210],{"class":242,"line":11715},[240,94207,592],{"class":257},[240,94209,53278],{"class":253},[240,94211,447],{"class":257},[240,94213,94214],{"class":242,"line":11739},[240,94215,4353],{"emptyLinePlaceholder":2051},[240,94217,94218,94220,94222],{"class":242,"line":11744},[240,94219,431],{"class":257},[240,94221,53738],{"class":253},[240,94223,447],{"class":257},[240,94225,94226,94228,94230,94232,94234,94237],{"class":242,"line":11749},[240,94227,452],{"class":257},[240,94229,330],{"class":253},[240,94231,437],{"class":436},[240,94233,440],{"class":257},[240,94235,94236],{"class":443},"\"container\"",[240,94238,447],{"class":257},[240,94240,94241,94243,94245,94247,94249,94252],{"class":242,"line":11754},[240,94242,53285],{"class":257},[240,94244,330],{"class":253},[240,94246,437],{"class":436},[240,94248,440],{"class":257},[240,94250,94251],{"class":443},"\"header\"",[240,94253,447],{"class":257},[240,94255,94256,94258,94260,94262,94264,94267],{"class":242,"line":11763},[240,94257,57167],{"class":257},[240,94259,254],{"class":253},[240,94261,457],{"class":436},[240,94263,440],{"class":257},[240,94265,94266],{"class":443},"\"http:\u002F\u002Fpip.itcast.cn\"",[240,94268,447],{"class":257},[240,94270,94271,94273,94275,94277,94279,94282,94284,94286,94288],{"class":242,"line":11768},[240,94272,57235],{"class":257},[240,94274,219],{"class":253},[240,94276,57172],{"class":436},[240,94278,440],{"class":257},[240,94280,94281],{"class":443},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[240,94283,57180],{"class":436},[240,94285,440],{"class":257},[240,94287,9603],{"class":443},[240,94289,61058],{"class":257},[240,94291,94292,94294,94296],{"class":242,"line":11774},[240,94293,57340],{"class":257},[240,94295,254],{"class":253},[240,94297,447],{"class":257},[240,94299,94300,94302,94304],{"class":242,"line":11795},[240,94301,53715],{"class":257},[240,94303,330],{"class":253},[240,94305,447],{"class":257},[240,94307,94308,94310,94312,94314,94316,94319],{"class":242,"line":11801},[240,94309,53285],{"class":257},[240,94311,330],{"class":253},[240,94313,437],{"class":436},[240,94315,440],{"class":257},[240,94317,94318],{"class":443},"\"video\"",[240,94320,447],{"class":257},[240,94322,94323,94325,94327,94329,94331,94334,94337,94339,94341],{"class":242,"line":11815},[240,94324,57167],{"class":257},[240,94326,30129],{"class":253},[240,94328,57172],{"class":436},[240,94330,440],{"class":257},[240,94332,94333],{"class":443},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[240,94335,94336],{"class":436}," controls",[240,94338,57247],{"class":257},[240,94340,30129],{"class":253},[240,94342,447],{"class":257},[240,94344,94345,94347,94349],{"class":242,"line":11821},[240,94346,53715],{"class":257},[240,94348,330],{"class":253},[240,94350,447],{"class":257},[240,94352,94353,94355,94357,94359,94361,94364],{"class":242,"line":11848},[240,94354,53285],{"class":257},[240,94356,330],{"class":253},[240,94358,437],{"class":436},[240,94360,440],{"class":257},[240,94362,94363],{"class":443},"\"elevator\"",[240,94365,447],{"class":257},[240,94367,94368,94370,94372,94374,94376,94378,94381,94383,94385,94388,94390],{"class":242,"line":11857},[240,94369,57167],{"class":257},[240,94371,254],{"class":253},[240,94373,457],{"class":436},[240,94375,440],{"class":257},[240,94377,66159],{"class":443},[240,94379,94380],{"class":436}," data-ref",[240,94382,440],{"class":257},[240,94384,94318],{"class":443},[240,94386,94387],{"class":257},">视频介绍\u003C\u002F",[240,94389,254],{"class":253},[240,94391,447],{"class":257},[240,94393,94394,94396,94398,94400,94402,94404,94406,94408,94411,94414,94416],{"class":242,"line":11863},[240,94395,57167],{"class":257},[240,94397,254],{"class":253},[240,94399,457],{"class":436},[240,94401,440],{"class":257},[240,94403,66159],{"class":443},[240,94405,94380],{"class":436},[240,94407,440],{"class":257},[240,94409,94410],{"class":443},"\"intro\"",[240,94412,94413],{"class":257},">课程简介\u003C\u002F",[240,94415,254],{"class":253},[240,94417,447],{"class":257},[240,94419,94420,94422,94424,94426,94428,94430,94432,94434,94437,94440,94442],{"class":242,"line":11871},[240,94421,57167],{"class":257},[240,94423,254],{"class":253},[240,94425,457],{"class":436},[240,94427,440],{"class":257},[240,94429,66159],{"class":443},[240,94431,94380],{"class":436},[240,94433,440],{"class":257},[240,94435,94436],{"class":443},"\"outline\"",[240,94438,94439],{"class":257},">评论列表\u003C\u002F",[240,94441,254],{"class":253},[240,94443,447],{"class":257},[240,94445,94446,94448,94450],{"class":242,"line":11876},[240,94447,53715],{"class":257},[240,94449,330],{"class":253},[240,94451,447],{"class":257},[240,94453,94454,94456,94458],{"class":242,"line":18552},[240,94455,54353],{"class":257},[240,94457,330],{"class":253},[240,94459,447],{"class":257},[240,94461,94462,94464,94466,94468,94470,94473,94475,94477],{"class":242,"line":18558},[240,94463,452],{"class":257},[240,94465,53751],{"class":253},[240,94467,57172],{"class":436},[240,94469,440],{"class":257},[240,94471,94472],{"class":443},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[240,94474,57247],{"class":257},[240,94476,53751],{"class":253},[240,94478,447],{"class":257},[240,94480,94481,94483,94485],{"class":242,"line":18581},[240,94482,452],{"class":257},[240,94484,53751],{"class":253},[240,94486,447],{"class":257},[240,94488,94489],{"class":242,"line":18587},[240,94490,94491],{"class":246},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[240,94493,94494,94496,94498,94500,94502,94504,94506,94509],{"class":242,"line":18610},[240,94495,13172],{"class":288},[240,94497,93968],{"class":264},[240,94499,15514],{"class":288},[240,94501,56331],{"class":257},[240,94503,56334],{"class":436},[240,94505,789],{"class":257},[240,94507,94508],{"class":443},"'video'",[240,94510,2129],{"class":257},[240,94512,94513],{"class":242,"line":18624},[240,94514,94515],{"class":246},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[240,94517,94518,94521,94523,94525,94527,94530,94532],{"class":242,"line":18644},[240,94519,94520],{"class":257},"    video.ontimeupdate ",[240,94522,440],{"class":288},[240,94524,90268],{"class":257},[240,94526,93086],{"class":436},[240,94528,94529],{"class":257},"(() ",[240,94531,86636],{"class":288},[240,94533,258],{"class":257},[240,94535,94536],{"class":242,"line":18650},[240,94537,94538],{"class":246},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[240,94540,94541],{"class":242,"line":18661},[240,94542,94543],{"class":246},"      \u002F\u002F 控制台输出当前的时间\n",[240,94545,94546,94549],{"class":242,"line":18684},[240,94547,94548],{"class":246},"      \u002F\u002F console.log(video.currentTime)",[240,94550,94551],{"class":246},"  \u002F\u002F获得当前的视频时间\n",[240,94553,94554],{"class":242,"line":18706},[240,94555,94556],{"class":246},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[240,94558,94559,94561,94563,94565,94568],{"class":242,"line":18711},[240,94560,76598],{"class":257},[240,94562,73570],{"class":436},[240,94564,789],{"class":257},[240,94566,94567],{"class":443},"'currentTime'",[240,94569,94570],{"class":257},", video.currentTime)\n",[240,94572,94573,94575,94577],{"class":242,"line":18717},[240,94574,56470],{"class":257},[240,94576,8361],{"class":264},[240,94578,2129],{"class":257},[240,94580,94581],{"class":242,"line":18731},[240,94582,94583],{"class":246},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[240,94585,94586,94589,94592,94594,94597,94599],{"class":242,"line":18744},[240,94587,94588],{"class":257},"    video.",[240,94590,94591],{"class":436},"onloadeddata",[240,94593,15514],{"class":288},[240,94595,94596],{"class":257}," () ",[240,94598,86636],{"class":288},[240,94600,258],{"class":257},[240,94602,94603],{"class":242,"line":18749},[240,94604,61943],{"class":246},[240,94606,94607],{"class":242,"line":18763},[240,94608,94609],{"class":246},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[240,94611,94612,94615,94617,94620,94622,94624,94626,94628,94630],{"class":242,"line":18768},[240,94613,94614],{"class":257},"      video.currentTime ",[240,94616,440],{"class":288},[240,94618,94619],{"class":257}," localStorage.",[240,94621,73601],{"class":436},[240,94623,789],{"class":257},[240,94625,94567],{"class":443},[240,94627,1230],{"class":257},[240,94629,73273],{"class":288},[240,94631,49279],{"class":264},[240,94633,94634],{"class":242,"line":18774},[240,94635,4140],{"class":257},[240,94637,94638,94640,94642],{"class":242,"line":18779},[240,94639,54353],{"class":257},[240,94641,53751],{"class":253},[240,94643,447],{"class":257},[240,94645,94646,94648,94650],{"class":242,"line":18793},[240,94647,592],{"class":257},[240,94649,53738],{"class":253},[240,94651,447],{"class":257},[240,94653,94654],{"class":242,"line":18798},[240,94655,4353],{"emptyLinePlaceholder":2051},[240,94657,94658,94660,94662],{"class":242,"line":18803},[240,94659,592],{"class":257},[240,94661,52581],{"class":253},[240,94663,447],{"class":257},[2019,94665,94666],{},"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":236,"searchDepth":250,"depth":250,"links":94668},[94669,94674,94678,94679,94680,94685,94690,94691,94692,94693,94700,94705,94706,94716,94720,94721,94725],{"id":78606,"depth":250,"text":78607,"children":94670},[94671,94672,94673],{"id":78610,"depth":261,"text":78611},{"id":78635,"depth":261,"text":78636},{"id":78647,"depth":261,"text":78648},{"id":78659,"depth":250,"text":78660,"children":94675},[94676,94677],{"id":78663,"depth":261,"text":78664},{"id":78678,"depth":261,"text":78679},{"id":78730,"depth":250,"text":78731},{"id":78774,"depth":250,"text":78775},{"id":78791,"depth":250,"text":78792,"children":94681},[94682,94683,94684],{"id":78795,"depth":261,"text":78796},{"id":78808,"depth":261,"text":78809},{"id":78913,"depth":261,"text":78914},{"id":79201,"depth":250,"text":79202,"children":94686},[94687,94688,94689],{"id":79205,"depth":261,"text":79206},{"id":79648,"depth":261,"text":79649},{"id":80059,"depth":261,"text":80060},{"id":80122,"depth":250,"text":80123},{"id":80201,"depth":250,"text":80202},{"id":80294,"depth":250,"text":80295},{"id":82139,"depth":250,"text":82140,"children":94694},[94695,94696,94697,94698,94699],{"id":82143,"depth":261,"text":82144},{"id":82155,"depth":261,"text":82156},{"id":82374,"depth":261,"text":82375},{"id":82392,"depth":261,"text":82393},{"id":82452,"depth":261,"text":82453},{"id":86720,"depth":250,"text":86721,"children":94701},[94702,94703,94704],{"id":86724,"depth":261,"text":86725},{"id":86742,"depth":261,"text":86743},{"id":86768,"depth":261,"text":86769},{"id":86777,"depth":250,"text":86778},{"id":86799,"depth":250,"text":86800,"children":94707},[94708,94709,94710,94711,94712,94713,94714,94715],{"id":86803,"depth":261,"text":86804},{"id":87064,"depth":261,"text":87065},{"id":87250,"depth":261,"text":87251},{"id":87617,"depth":261,"text":87618},{"id":87733,"depth":261,"text":87734},{"id":87769,"depth":261,"text":87770},{"id":87816,"depth":261,"text":87817},{"id":87850,"depth":261,"text":87851},{"id":89212,"depth":250,"text":89213,"children":94717},[94718,94719],{"id":89216,"depth":261,"text":89217},{"id":89253,"depth":261,"text":89254},{"id":90608,"depth":250,"text":90609},{"id":90979,"depth":250,"text":90980,"children":94722},[94723,94724],{"id":90983,"depth":261,"text":90984},{"id":91017,"depth":261,"text":91018},{"id":91746,"depth":250,"text":91747,"children":94726},[94727,94728,94729,94730],{"id":91750,"depth":261,"text":91751},{"id":92708,"depth":261,"text":92709},{"id":93650,"depth":261,"text":93651},{"id":93724,"depth":261,"text":93725},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":78595,"description":2048},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":94737,"title":94738,"body":94739,"description":94750,"extension":2049,"meta":94751,"navigation":2051,"path":94753,"seo":94754,"stem":94755,"__hash__":94756},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":94740,"toc":94748},[94741],[19,94742,94743,94744],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[254,94745,94746],{"href":94746,"rel":94747},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[25811],{"title":236,"searchDepth":250,"depth":250,"links":94749},[],"三件套第三套学习",{"category":94752},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":94738,"description":94750},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":94758,"title":94759,"body":94760,"description":2048,"extension":2049,"meta":94865,"navigation":2051,"path":94866,"seo":94867,"stem":94868,"__hash__":94869},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":94761,"toc":94860},[94762,94769,94772,94775,94778,94782,94791,94794,94797,94801,94810,94813,94817,94820,94840,94843,94857],[19,94763,94764],{},[254,94765,94768],{"href":94766,"rel":94767},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[25811],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,94770,94759],{"id":94771},"_1安装",[19,94773,94774],{},"numpy是科学计算基础库,底层是C语言",[19,94776,94777],{},"三种方式：",[14,94779,94781],{"id":94780},"_11-通过pip安装","1.1 通过pip安装",[231,94783,94785],{"className":32324,"code":94784,"language":32326,"meta":236,"style":236},"pip install numpy\n",[23,94786,94787],{"__ignoreMap":236},[240,94788,94789],{"class":242,"line":243},[240,94790,94784],{"class":257},[19,94792,94793],{},"首选方式，自动处理依赖项",[19,94795,94796],{},"在提示系统命令符中使用cmd",[14,94798,94800],{"id":94799},"_12-通过anaconda安装","1.2 通过Anaconda安装",[231,94802,94804],{"className":32324,"code":94803,"language":32326,"meta":236,"style":236},"conda install numpy\n",[23,94805,94806],{"__ignoreMap":236},[240,94807,94808],{"class":242,"line":243},[240,94809,94803],{"class":257},[19,94811,94812],{},"自动解决环境依赖",[14,94814,94816],{"id":94815},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[19,94818,94819],{},"对于Debian\u002FUbuntu",[231,94821,94823],{"className":32324,"code":94822,"language":32326,"meta":236,"style":236},"sudo apt-get install python3-numpy\n",[23,94824,94825],{"__ignoreMap":236},[240,94826,94827,94830,94832,94835,94837],{"class":242,"line":243},[240,94828,94829],{"class":257},"sudo apt",[240,94831,2631],{"class":288},[240,94833,94834],{"class":257},"get install python3",[240,94836,2631],{"class":288},[240,94838,94839],{"class":257},"numpy\n",[19,94841,94842],{},"对于Fedora:",[231,94844,94846],{"className":32324,"code":94845,"language":32326,"meta":236,"style":236},"sudo dnf install python3-numpy\n",[23,94847,94848],{"__ignoreMap":236},[240,94849,94850,94853,94855],{"class":242,"line":243},[240,94851,94852],{"class":257},"sudo dnf install python3",[240,94854,2631],{"class":288},[240,94856,94839],{"class":257},[2019,94858,94859],{},"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":236,"searchDepth":250,"depth":250,"links":94861},[94862,94863,94864],{"id":94780,"depth":250,"text":94781},{"id":94799,"depth":250,"text":94800},{"id":94815,"depth":250,"text":94816},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":94759,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":94871,"title":94872,"body":94873,"description":2048,"extension":2049,"meta":94986,"navigation":2051,"path":94987,"seo":94988,"stem":94989,"__hash__":94990},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":94874,"toc":94984},[94875,94878,94881,94884,94887,94890,94893,94896,94899,94902,94978,94981],[10,94876,94872],{"id":94877},"_10算数函数",[19,94879,94880],{},"加减乘除运算跟python基础语法没区别",[19,94882,94883],{},"除了python那种方法外还可以使用函数",[19,94885,94886],{},"加：np.add(a,b)",[19,94888,94889],{},"减：np.subtract(a,b)",[19,94891,94892],{},"乘：np.multiply(a,b)",[19,94894,94895],{},"除：np.divide(a,b) == a\u002Fb",[19,94897,94898],{},"取余：np.mod(a,b) == a%b",[19,94900,94901],{},"必须会的用法：",[231,94903,94905],{"className":32324,"code":94904,"language":32326,"meta":236,"style":236},"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",[23,94906,94907,94929,94950,94960,94973],{"__ignoreMap":236},[240,94908,94909,94911,94913,94916,94918,94921,94923,94925,94927],{"class":242,"line":243},[240,94910,254],{"class":257},[240,94912,440],{"class":288},[240,94914,94915],{"class":257},"np.arange(",[240,94917,2520],{"class":264},[240,94919,94920],{"class":257},").reshape(",[240,94922,1692],{"class":264},[240,94924,2479],{"class":257},[240,94926,1692],{"class":264},[240,94928,2129],{"class":257},[240,94930,94931,94933,94935,94938,94940,94942,94944,94946,94948],{"class":242,"line":250},[240,94932,2367],{"class":257},[240,94934,440],{"class":288},[240,94936,94937],{"class":257},"np.array([",[240,94939,2546],{"class":264},[240,94941,2479],{"class":257},[240,94943,2546],{"class":264},[240,94945,2479],{"class":257},[240,94947,2546],{"class":264},[240,94949,6609],{"class":257},[240,94951,94952,94955,94957],{"class":242,"line":261},[240,94953,94954],{"class":257},"result",[240,94956,440],{"class":288},[240,94958,94959],{"class":257},"np.empty_like(a)\n",[240,94961,94962,94965,94968,94970],{"class":242,"line":277},[240,94963,94964],{"class":257},"np.add(a,b,",[240,94966,94967],{"class":792},"out",[240,94969,440],{"class":288},[240,94971,94972],{"class":257},"result)\n",[240,94974,94975],{"class":242,"line":294},[240,94976,94977],{"class":257},"result\n",[19,94979,94980],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[2019,94982,94983],{},"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":236,"searchDepth":250,"depth":250,"links":94985},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":94872,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":94992,"title":94993,"body":94994,"description":2048,"extension":2049,"meta":95756,"navigation":2051,"path":95757,"seo":95758,"stem":95759,"__hash__":95760},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":94995,"toc":95743},[94996,94999,95002,95005,95009,95048,95052,95096,95156,95160,95163,95202,95205,95250,95254,95290,95294,95363,95367,95431,95435,95438,95441,95444,95447,95483,95487,95527,95531,95603,95606,95610,95673,95677,95740],[10,94997,94993],{"id":94998},"_11统计函数",[19,95000,95001],{},"sum max min mean",[19,95003,95004],{},"这些有axis参数，可以指定方向",[14,95006,95008],{"id":95007},"_111-sum求和函数","11.1 sum()求和函数",[231,95010,95012],{"className":32324,"code":95011,"language":32326,"meta":236,"style":236},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[23,95013,95014,95019,95040],{"__ignoreMap":236},[240,95015,95016],{"class":242,"line":243},[240,95017,95018],{"class":246},"#创建一维数组\n",[240,95020,95021,95023,95025,95028,95030,95032,95034,95036,95038],{"class":242,"line":250},[240,95022,254],{"class":257},[240,95024,440],{"class":288},[240,95026,95027],{"class":257},"np.random.randint(",[240,95029,1643],{"class":264},[240,95031,2479],{"class":257},[240,95033,285],{"class":264},[240,95035,2479],{"class":257},[240,95037,1000],{"class":264},[240,95039,2129],{"class":257},[240,95041,95042,95045],{"class":242,"line":261},[240,95043,95044],{"class":257},"np.sum(a)",[240,95046,95047],{"class":246},"#求和\n",[14,95049,95051],{"id":95050},"_112-max求最大值函数","11.2 max()求最大值函数",[231,95053,95055],{"className":32324,"code":95054,"language":32326,"meta":236,"style":236},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[23,95056,95057,95061,95081,95086,95091],{"__ignoreMap":236},[240,95058,95059],{"class":242,"line":243},[240,95060,95018],{"class":246},[240,95062,95063,95065,95067,95069,95071,95073,95075,95077,95079],{"class":242,"line":250},[240,95064,254],{"class":257},[240,95066,440],{"class":288},[240,95068,95027],{"class":257},[240,95070,1643],{"class":264},[240,95072,2479],{"class":257},[240,95074,285],{"class":264},[240,95076,2479],{"class":257},[240,95078,1000],{"class":264},[240,95080,2129],{"class":257},[240,95082,95083],{"class":242,"line":261},[240,95084,95085],{"class":257},"np.max(a)\n",[240,95087,95088],{"class":242,"line":277},[240,95089,95090],{"class":246},"#最大索引(求最大元素的索引)arg\n",[240,95092,95093],{"class":242,"line":294},[240,95094,95095],{"class":257},"np.argmax(a)\n",[231,95097,95099],{"className":32324,"code":95098,"language":32326,"meta":236,"style":236},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[23,95100,95101,95122,95142,95146],{"__ignoreMap":236},[240,95102,95103,95105,95107,95110,95112,95114,95116,95118,95120],{"class":242,"line":243},[240,95104,12870],{"class":257},[240,95106,440],{"class":288},[240,95108,95109],{"class":257}," np.array([",[240,95111,1643],{"class":264},[240,95113,1277],{"class":257},[240,95115,1741],{"class":264},[240,95117,1277],{"class":257},[240,95119,1692],{"class":264},[240,95121,6609],{"class":257},[240,95123,95124,95126,95128,95130,95132,95134,95136,95138,95140],{"class":242,"line":250},[240,95125,12896],{"class":257},[240,95127,440],{"class":288},[240,95129,95109],{"class":257},[240,95131,1692],{"class":264},[240,95133,1277],{"class":257},[240,95135,1668],{"class":264},[240,95137,1277],{"class":257},[240,95139,1716],{"class":264},[240,95141,6609],{"class":257},[240,95143,95144],{"class":242,"line":261},[240,95145,4353],{"emptyLinePlaceholder":2051},[240,95147,95148,95150,95153],{"class":242,"line":277},[240,95149,32361],{"class":264},[240,95151,95152],{"class":257},"(np.maximum(a, b))   ",[240,95154,95155],{"class":246},"# [3 5 4]，每个位置上取较大值\n",[14,95157,95159],{"id":95158},"_113-mean求平均值函数","11.3 mean()求平均值函数",[19,95161,95162],{},"①一维数组：",[231,95164,95166],{"className":32324,"code":95165,"language":32326,"meta":236,"style":236},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[23,95167,95168,95172,95192,95197],{"__ignoreMap":236},[240,95169,95170],{"class":242,"line":243},[240,95171,95018],{"class":246},[240,95173,95174,95176,95178,95180,95182,95184,95186,95188,95190],{"class":242,"line":250},[240,95175,254],{"class":257},[240,95177,440],{"class":288},[240,95179,95027],{"class":257},[240,95181,1643],{"class":264},[240,95183,2479],{"class":257},[240,95185,285],{"class":264},[240,95187,2479],{"class":257},[240,95189,1000],{"class":264},[240,95191,2129],{"class":257},[240,95193,95194],{"class":242,"line":261},[240,95195,95196],{"class":246},"#求平均值\n",[240,95198,95199],{"class":242,"line":277},[240,95200,95201],{"class":257},"np.mean(a)\n",[19,95203,95204],{},"②二维数组",[231,95206,95208],{"className":32324,"code":95207,"language":32326,"meta":236,"style":236},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[23,95209,95210,95215,95240,95245],{"__ignoreMap":236},[240,95211,95212],{"class":242,"line":243},[240,95213,95214],{"class":246},"#二维数组\n",[240,95216,95217,95220,95222,95224,95226,95228,95230,95232,95234,95236,95238],{"class":242,"line":250},[240,95218,95219],{"class":257},"aa",[240,95221,440],{"class":288},[240,95223,94915],{"class":257},[240,95225,1643],{"class":264},[240,95227,2479],{"class":257},[240,95229,2622],{"class":264},[240,95231,94920],{"class":257},[240,95233,1692],{"class":264},[240,95235,2479],{"class":257},[240,95237,1716],{"class":264},[240,95239,2129],{"class":257},[240,95241,95242],{"class":242,"line":261},[240,95243,95244],{"class":246},"#对数组中的所有数求平均\n",[240,95246,95247],{"class":242,"line":277},[240,95248,95249],{"class":257},"np.mean(aa)\n",[14,95251,95253],{"id":95252},"_114-median求中位数函数","11.4 median()求中位数函数",[231,95255,95257],{"className":32324,"code":95256,"language":32326,"meta":236,"style":236},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[23,95258,95259,95264,95280,95285],{"__ignoreMap":236},[240,95260,95261],{"class":242,"line":243},[240,95262,95263],{"class":246},"#求中位数\n",[240,95265,95266,95268,95270,95272,95274,95276,95278],{"class":242,"line":250},[240,95267,2367],{"class":257},[240,95269,440],{"class":288},[240,95271,94915],{"class":257},[240,95273,1643],{"class":264},[240,95275,2479],{"class":257},[240,95277,2546],{"class":264},[240,95279,2129],{"class":257},[240,95281,95282],{"class":242,"line":261},[240,95283,95284],{"class":257},"np.median(b)\n",[240,95286,95287],{"class":242,"line":277},[240,95288,95289],{"class":246},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[14,95291,95293],{"id":95292},"_115-power求幂运算函数","11.5 power()求幂运算函数",[231,95295,95297],{"className":32324,"code":95296,"language":32326,"meta":236,"style":236},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[23,95298,95299,95315,95320,95325,95334,95339,95348],{"__ignoreMap":236},[240,95300,95301,95303,95305,95307,95309,95311,95313],{"class":242,"line":243},[240,95302,2367],{"class":257},[240,95304,440],{"class":288},[240,95306,94915],{"class":257},[240,95308,1643],{"class":264},[240,95310,2479],{"class":257},[240,95312,2546],{"class":264},[240,95314,2129],{"class":257},[240,95316,95317],{"class":242,"line":250},[240,95318,95319],{"class":246},"#幂运算\n",[240,95321,95322],{"class":242,"line":261},[240,95323,95324],{"class":246},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[240,95326,95327,95330,95332],{"class":242,"line":277},[240,95328,95329],{"class":257},"np.power(b,",[240,95331,1668],{"class":264},[240,95333,2129],{"class":257},[240,95335,95336],{"class":242,"line":294},[240,95337,95338],{"class":246},"#或者以下代码，将数据存储起来\n",[240,95340,95341,95343,95345],{"class":242,"line":309},[240,95342,2941],{"class":257},[240,95344,440],{"class":288},[240,95346,95347],{"class":257},"np.empty_like(b)\n",[240,95349,95350,95352,95354,95356,95358,95360],{"class":242,"line":529},[240,95351,95329],{"class":257},[240,95353,1668],{"class":264},[240,95355,2479],{"class":257},[240,95357,94967],{"class":792},[240,95359,440],{"class":288},[240,95361,95362],{"class":257},"y)\n",[14,95364,95366],{"id":95365},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[231,95368,95370],{"className":32324,"code":95369,"language":32326,"meta":236,"style":236},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[23,95371,95372,95388,95393,95398,95402,95420],{"__ignoreMap":236},[240,95373,95374,95376,95378,95380,95382,95384,95386],{"class":242,"line":243},[240,95375,2367],{"class":257},[240,95377,440],{"class":288},[240,95379,94915],{"class":257},[240,95381,1643],{"class":264},[240,95383,2479],{"class":257},[240,95385,2546],{"class":264},[240,95387,2129],{"class":257},[240,95389,95390],{"class":242,"line":250},[240,95391,95392],{"class":246},"#开方\n",[240,95394,95395],{"class":242,"line":261},[240,95396,95397],{"class":257},"np.sqrt(b)\n",[240,95399,95400],{"class":242,"line":277},[240,95401,95338],{"class":246},[240,95403,95404,95406,95408,95411,95414,95416,95418],{"class":242,"line":294},[240,95405,2941],{"class":257},[240,95407,440],{"class":288},[240,95409,95410],{"class":257},"np.empty_like(b,",[240,95412,95413],{"class":792},"dtype",[240,95415,440],{"class":288},[240,95417,2161],{"class":264},[240,95419,2129],{"class":257},[240,95421,95422,95425,95427,95429],{"class":242,"line":309},[240,95423,95424],{"class":257},"np.sqrt(b,",[240,95426,94967],{"class":792},[240,95428,440],{"class":288},[240,95430,95362],{"class":257},[14,95432,95434],{"id":95433},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[19,95436,95437],{},"对数组中的元素累计求和，可指定轴",[19,95439,95440],{},"#累计求和的意思是：",[19,95442,95443],{},"a = np.array([1, 2, 3, 4])",[19,95445,95446],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[231,95448,95450],{"className":32324,"code":95449,"language":32326,"meta":236,"style":236},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[23,95451,95452,95468,95473,95478],{"__ignoreMap":236},[240,95453,95454,95456,95458,95460,95462,95464,95466],{"class":242,"line":243},[240,95455,2367],{"class":257},[240,95457,440],{"class":288},[240,95459,94915],{"class":257},[240,95461,1643],{"class":264},[240,95463,2479],{"class":257},[240,95465,2546],{"class":264},[240,95467,2129],{"class":257},[240,95469,95470],{"class":242,"line":250},[240,95471,95472],{"class":257},"np.cumsum(b)\n",[240,95474,95475],{"class":242,"line":261},[240,95476,95477],{"class":246},"#结果：\n",[240,95479,95480],{"class":242,"line":277},[240,95481,95482],{"class":246},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[14,95484,95486],{"id":95485},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[231,95488,95490],{"className":32324,"code":95489,"language":32326,"meta":236,"style":236},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[23,95491,95492,95508,95513,95518,95522],{"__ignoreMap":236},[240,95493,95494,95496,95498,95500,95502,95504,95506],{"class":242,"line":243},[240,95495,2367],{"class":257},[240,95497,440],{"class":288},[240,95499,94915],{"class":257},[240,95501,1643],{"class":264},[240,95503,2479],{"class":257},[240,95505,2546],{"class":264},[240,95507,2129],{"class":257},[240,95509,95510],{"class":242,"line":250},[240,95511,95512],{"class":246},"#对数组中的元素累计求积，可指定轴\n",[240,95514,95515],{"class":242,"line":261},[240,95516,95517],{"class":257},"np.cumprod(b)\n",[240,95519,95520],{"class":242,"line":277},[240,95521,95477],{"class":246},[240,95523,95524],{"class":242,"line":294},[240,95525,95526],{"class":246},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[14,95528,95530],{"id":95529},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[231,95532,95534],{"className":32324,"code":95533,"language":32326,"meta":236,"style":236},"#删除数组中的重复数据，并对数据进行排序\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",[23,95535,95536,95541,95589,95594,95598],{"__ignoreMap":236},[240,95537,95538],{"class":242,"line":243},[240,95539,95540],{"class":246},"#删除数组中的重复数据，并对数据进行排序\n",[240,95542,95543,95545,95547,95549,95551,95553,95555,95557,95559,95561,95563,95565,95567,95569,95571,95573,95575,95577,95579,95581,95583,95585,95587],{"class":242,"line":250},[240,95544,254],{"class":257},[240,95546,440],{"class":288},[240,95548,94937],{"class":257},[240,95550,1643],{"class":264},[240,95552,2479],{"class":257},[240,95554,1668],{"class":264},[240,95556,2479],{"class":257},[240,95558,1692],{"class":264},[240,95560,2479],{"class":257},[240,95562,2597],{"class":264},[240,95564,2479],{"class":257},[240,95566,1692],{"class":264},[240,95568,2479],{"class":257},[240,95570,2546],{"class":264},[240,95572,2479],{"class":257},[240,95574,2304],{"class":264},[240,95576,2479],{"class":257},[240,95578,1274],{"class":264},[240,95580,2479],{"class":257},[240,95582,2872],{"class":264},[240,95584,2479],{"class":257},[240,95586,1716],{"class":264},[240,95588,6609],{"class":257},[240,95590,95591],{"class":242,"line":261},[240,95592,95593],{"class":257},"np.unique(a)\n",[240,95595,95596],{"class":242,"line":277},[240,95597,95477],{"class":246},[240,95599,95600],{"class":242,"line":294},[240,95601,95602],{"class":246},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[19,95604,95605],{},"升序形式排序",[14,95607,95609],{"id":95608},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[231,95611,95613],{"className":32324,"code":95612,"language":32326,"meta":236,"style":236},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[23,95614,95615,95663,95668],{"__ignoreMap":236},[240,95616,95617,95619,95621,95623,95625,95627,95629,95631,95633,95635,95637,95639,95641,95643,95645,95647,95649,95651,95653,95655,95657,95659,95661],{"class":242,"line":243},[240,95618,254],{"class":257},[240,95620,440],{"class":288},[240,95622,94937],{"class":257},[240,95624,1643],{"class":264},[240,95626,2479],{"class":257},[240,95628,1668],{"class":264},[240,95630,2479],{"class":257},[240,95632,1692],{"class":264},[240,95634,2479],{"class":257},[240,95636,2597],{"class":264},[240,95638,2479],{"class":257},[240,95640,1692],{"class":264},[240,95642,2479],{"class":257},[240,95644,2546],{"class":264},[240,95646,2479],{"class":257},[240,95648,2304],{"class":264},[240,95650,2479],{"class":257},[240,95652,1274],{"class":264},[240,95654,2479],{"class":257},[240,95656,2872],{"class":264},[240,95658,2479],{"class":257},[240,95660,1716],{"class":264},[240,95662,6609],{"class":257},[240,95664,95665],{"class":242,"line":250},[240,95666,95667],{"class":246},"#返回数组中非零元素的索引\n",[240,95669,95670],{"class":242,"line":261},[240,95671,95672],{"class":257},"np.nonzero(a)\n",[14,95674,95676],{"id":95675},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[231,95678,95680],{"className":32324,"code":95679,"language":32326,"meta":236,"style":236},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[23,95681,95682,95730,95735],{"__ignoreMap":236},[240,95683,95684,95686,95688,95690,95692,95694,95696,95698,95700,95702,95704,95706,95708,95710,95712,95714,95716,95718,95720,95722,95724,95726,95728],{"class":242,"line":243},[240,95685,254],{"class":257},[240,95687,440],{"class":288},[240,95689,94937],{"class":257},[240,95691,1643],{"class":264},[240,95693,2479],{"class":257},[240,95695,1668],{"class":264},[240,95697,2479],{"class":257},[240,95699,1692],{"class":264},[240,95701,2479],{"class":257},[240,95703,2597],{"class":264},[240,95705,2479],{"class":257},[240,95707,1692],{"class":264},[240,95709,2479],{"class":257},[240,95711,2546],{"class":264},[240,95713,2479],{"class":257},[240,95715,2304],{"class":264},[240,95717,2479],{"class":257},[240,95719,1274],{"class":264},[240,95721,2479],{"class":257},[240,95723,2872],{"class":264},[240,95725,2479],{"class":257},[240,95727,1716],{"class":264},[240,95729,6609],{"class":257},[240,95731,95732],{"class":242,"line":250},[240,95733,95734],{"class":246},"#计算一组数中最大值与最小值的差，可指定轴\n",[240,95736,95737],{"class":242,"line":261},[240,95738,95739],{"class":257},"np.ptp(a)\n",[2019,95741,95742],{},"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":236,"searchDepth":250,"depth":250,"links":95744},[95745,95746,95747,95748,95749,95750,95751,95752,95753,95754,95755],{"id":95007,"depth":250,"text":95008},{"id":95050,"depth":250,"text":95051},{"id":95158,"depth":250,"text":95159},{"id":95252,"depth":250,"text":95253},{"id":95292,"depth":250,"text":95293},{"id":95365,"depth":250,"text":95366},{"id":95433,"depth":250,"text":95434},{"id":95485,"depth":250,"text":95486},{"id":95529,"depth":250,"text":95530},{"id":95608,"depth":250,"text":95609},{"id":95675,"depth":250,"text":95676},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":94993,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":95762,"title":95763,"body":95764,"description":2048,"extension":2049,"meta":96419,"navigation":2051,"path":96420,"seo":96421,"stem":96422,"__hash__":96423},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":95765,"toc":96407},[95766,95769,95773,95776,95992,95996,95999,96208,96212,96278,96283,96287,96290,96293,96331,96335,96338,96343,96347,96350,96353,96358,96362,96365,96369,96372,96375,96380,96384,96387,96390,96395,96399,96404],[10,95767,95763],{"id":95768},"_12其他常用函数",[14,95770,95772],{"id":95771},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[19,95774,95775],{},"将数组的数据按照行列复制扩展",[231,95777,95779],{"className":32324,"code":95778,"language":32326,"meta":236,"style":236},"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",[23,95780,95781,95797,95806,95810,95815,95820,95833,95837,95842,95847,95852,95856,95861,95885,95897,95901,95905,95910,95915,95920,95925,95929,95942,95946,95950,95955,95960,95965,95970,95975,95979,95983,95988],{"__ignoreMap":236},[240,95782,95783,95785,95787,95789,95791,95793,95795],{"class":242,"line":243},[240,95784,254],{"class":257},[240,95786,440],{"class":288},[240,95788,94915],{"class":257},[240,95790,1643],{"class":264},[240,95792,2479],{"class":257},[240,95794,1741],{"class":264},[240,95796,2129],{"class":257},[240,95798,95799,95802,95804],{"class":242,"line":250},[240,95800,95801],{"class":257},"np.tile(a,",[240,95803,1668],{"class":264},[240,95805,2129],{"class":257},[240,95807,95808],{"class":242,"line":261},[240,95809,95477],{"class":246},[240,95811,95812],{"class":242,"line":277},[240,95813,95814],{"class":246},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[240,95816,95817],{"class":242,"line":294},[240,95818,95819],{"class":246},"#行复制两次，列复制三次\n",[240,95821,95822,95825,95827,95829,95831],{"class":242,"line":309},[240,95823,95824],{"class":257},"np.tile(a,(",[240,95826,1668],{"class":264},[240,95828,2479],{"class":257},[240,95830,1692],{"class":264},[240,95832,32443],{"class":257},[240,95834,95835],{"class":242,"line":529},[240,95836,95477],{"class":246},[240,95838,95839],{"class":242,"line":549},[240,95840,95841],{"class":443},"'''\n",[240,95843,95844],{"class":242,"line":569},[240,95845,95846],{"class":443},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[240,95848,95849],{"class":242,"line":589},[240,95850,95851],{"class":443},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[240,95853,95854],{"class":242,"line":715},[240,95855,95841],{"class":443},[240,95857,95858],{"class":242,"line":727},[240,95859,95860],{"class":246},"#创建二维数组\n",[240,95862,95863,95865,95867,95869,95871,95873,95875,95877,95879,95881,95883],{"class":242,"line":1730},[240,95864,95219],{"class":257},[240,95866,440],{"class":288},[240,95868,94915],{"class":257},[240,95870,1643],{"class":264},[240,95872,2479],{"class":257},[240,95874,2622],{"class":264},[240,95876,94920],{"class":257},[240,95878,1716],{"class":264},[240,95880,2479],{"class":257},[240,95882,1692],{"class":264},[240,95884,2129],{"class":257},[240,95886,95887,95890,95892,95894],{"class":242,"line":3582},[240,95888,95889],{"class":257},"np.tile(aa,",[240,95891,1668],{"class":264},[240,95893,2529],{"class":257},[240,95895,95896],{"class":246},"#一个数的时候就是行\n",[240,95898,95899],{"class":242,"line":3596},[240,95900,95477],{"class":246},[240,95902,95903],{"class":242,"line":3601},[240,95904,95841],{"class":443},[240,95906,95907],{"class":242,"line":3607},[240,95908,95909],{"class":443},"array([[ 1,  2,  3,  1,  2,  3],\n",[240,95911,95912],{"class":242,"line":3628},[240,95913,95914],{"class":443},"       [ 4,  5,  6,  4,  5,  6],\n",[240,95916,95917],{"class":242,"line":3633},[240,95918,95919],{"class":443},"       [ 7,  8,  9,  7,  8,  9],\n",[240,95921,95922],{"class":242,"line":3647},[240,95923,95924],{"class":443},"       [10, 11, 12, 10, 11, 12]])\n",[240,95926,95927],{"class":242,"line":3652},[240,95928,95841],{"class":443},[240,95930,95931,95934,95936,95938,95940],{"class":242,"line":3681},[240,95932,95933],{"class":257},"np.tile(aa,(",[240,95935,1668],{"class":264},[240,95937,2479],{"class":257},[240,95939,1692],{"class":264},[240,95941,32443],{"class":257},[240,95943,95944],{"class":242,"line":3686},[240,95945,95477],{"class":246},[240,95947,95948],{"class":242,"line":3703},[240,95949,95841],{"class":443},[240,95951,95952],{"class":242,"line":3708},[240,95953,95954],{"class":443},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[240,95956,95957],{"class":242,"line":3713},[240,95958,95959],{"class":443},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[240,95961,95962],{"class":242,"line":3718},[240,95963,95964],{"class":443},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[240,95966,95967],{"class":242,"line":3732},[240,95968,95969],{"class":443},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[240,95971,95972],{"class":242,"line":3737},[240,95973,95974],{"class":443},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[240,95976,95977],{"class":242,"line":4530},[240,95978,95959],{"class":443},[240,95980,95981],{"class":242,"line":4544},[240,95982,95964],{"class":443},[240,95984,95985],{"class":242,"line":4552},[240,95986,95987],{"class":443},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[240,95989,95990],{"class":242,"line":4557},[240,95991,95841],{"class":443},[14,95993,95995],{"id":95994},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[19,95997,95998],{},"repeat()将数组中的每个元素重复若干次",[231,96000,96002],{"className":32324,"code":96001,"language":32326,"meta":236,"style":236},"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",[23,96003,96004,96020,96029,96033,96038,96062,96067,96076,96080,96085,96089,96094,96110,96114,96118,96123,96128,96133,96137,96142,96146,96151,96156,96160,96176,96180,96184,96189,96194,96199,96204],{"__ignoreMap":236},[240,96005,96006,96008,96010,96012,96014,96016,96018],{"class":242,"line":243},[240,96007,254],{"class":257},[240,96009,440],{"class":288},[240,96011,94915],{"class":257},[240,96013,1643],{"class":264},[240,96015,2479],{"class":257},[240,96017,1741],{"class":264},[240,96019,2129],{"class":257},[240,96021,96022,96025,96027],{"class":242,"line":250},[240,96023,96024],{"class":257},"np.repeat(a,",[240,96026,1692],{"class":264},[240,96028,2129],{"class":257},[240,96030,96031],{"class":242,"line":261},[240,96032,95477],{"class":246},[240,96034,96035],{"class":242,"line":277},[240,96036,96037],{"class":246},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[240,96039,96040,96042,96044,96046,96048,96050,96052,96054,96056,96058,96060],{"class":242,"line":294},[240,96041,95219],{"class":257},[240,96043,440],{"class":288},[240,96045,94915],{"class":257},[240,96047,1643],{"class":264},[240,96049,2479],{"class":257},[240,96051,2622],{"class":264},[240,96053,94920],{"class":257},[240,96055,1716],{"class":264},[240,96057,2479],{"class":257},[240,96059,1692],{"class":264},[240,96061,2129],{"class":257},[240,96063,96064],{"class":242,"line":309},[240,96065,96066],{"class":246},"#这个重复之后二维变成一维\n",[240,96068,96069,96072,96074],{"class":242,"line":529},[240,96070,96071],{"class":257},"np.repeat(aa,",[240,96073,1668],{"class":264},[240,96075,2129],{"class":257},[240,96077,96078],{"class":242,"line":549},[240,96079,95841],{"class":443},[240,96081,96082],{"class":242,"line":569},[240,96083,96084],{"class":443},"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",[240,96086,96087],{"class":242,"line":589},[240,96088,95841],{"class":443},[240,96090,96091],{"class":242,"line":715},[240,96092,96093],{"class":246},"#指定axis\n",[240,96095,96096,96098,96100,96102,96104,96106,96108],{"class":242,"line":727},[240,96097,96071],{"class":257},[240,96099,1668],{"class":264},[240,96101,2479],{"class":257},[240,96103,49460],{"class":792},[240,96105,440],{"class":288},[240,96107,1274],{"class":264},[240,96109,2129],{"class":257},[240,96111,96112],{"class":242,"line":1730},[240,96113,95477],{"class":246},[240,96115,96116],{"class":242,"line":3582},[240,96117,95841],{"class":443},[240,96119,96120],{"class":242,"line":3596},[240,96121,96122],{"class":443},"array([[ 1,  2,  3],\n",[240,96124,96125],{"class":242,"line":3601},[240,96126,96127],{"class":443},"       [ 1,  2,  3],\n",[240,96129,96130],{"class":242,"line":3607},[240,96131,96132],{"class":443},"       [ 4,  5,  6],\n",[240,96134,96135],{"class":242,"line":3628},[240,96136,96132],{"class":443},[240,96138,96139],{"class":242,"line":3633},[240,96140,96141],{"class":443},"       [ 7,  8,  9],\n",[240,96143,96144],{"class":242,"line":3647},[240,96145,96141],{"class":443},[240,96147,96148],{"class":242,"line":3652},[240,96149,96150],{"class":443},"       [10, 11, 12],\n",[240,96152,96153],{"class":242,"line":3681},[240,96154,96155],{"class":443},"       [10, 11, 12]])\n",[240,96157,96158],{"class":242,"line":3686},[240,96159,95841],{"class":443},[240,96161,96162,96164,96166,96168,96170,96172,96174],{"class":242,"line":3703},[240,96163,96071],{"class":257},[240,96165,1668],{"class":264},[240,96167,2479],{"class":257},[240,96169,49460],{"class":792},[240,96171,440],{"class":288},[240,96173,1643],{"class":264},[240,96175,2129],{"class":257},[240,96177,96178],{"class":242,"line":3708},[240,96179,95477],{"class":246},[240,96181,96182],{"class":242,"line":3713},[240,96183,95841],{"class":443},[240,96185,96186],{"class":242,"line":3718},[240,96187,96188],{"class":443},"array([[ 1,  1,  2,  2,  3,  3],\n",[240,96190,96191],{"class":242,"line":3732},[240,96192,96193],{"class":443},"       [ 4,  4,  5,  5,  6,  6],\n",[240,96195,96196],{"class":242,"line":3737},[240,96197,96198],{"class":443},"       [ 7,  7,  8,  8,  9,  9],\n",[240,96200,96201],{"class":242,"line":4530},[240,96202,96203],{"class":443},"       [10, 10, 11, 11, 12, 12]])\n",[240,96205,96206],{"class":242,"line":4544},[240,96207,95841],{"class":443},[14,96209,96211],{"id":96210},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[231,96213,96215],{"className":32324,"code":96214,"language":32326,"meta":236,"style":236},"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",[23,96216,96217,96233,96238,96250,96254,96259,96269,96273],{"__ignoreMap":236},[240,96218,96219,96221,96223,96225,96227,96229,96231],{"class":242,"line":243},[240,96220,254],{"class":257},[240,96222,440],{"class":288},[240,96224,94915],{"class":257},[240,96226,1643],{"class":264},[240,96228,2479],{"class":257},[240,96230,1741],{"class":264},[240,96232,2129],{"class":257},[240,96234,96235],{"class":242,"line":250},[240,96236,96237],{"class":246},"#array([，2，3，4])\n",[240,96239,96240,96243,96245,96247],{"class":242,"line":261},[240,96241,96242],{"class":257},"np.roll(a,",[240,96244,1668],{"class":264},[240,96246,2529],{"class":257},[240,96248,96249],{"class":246},"#传正数向后调多少位，传负数向前调多少位\n",[240,96251,96252],{"class":242,"line":277},[240,96253,95477],{"class":246},[240,96255,96256],{"class":242,"line":294},[240,96257,96258],{"class":246},"#array([3, 4, 1, 2])\n",[240,96260,96261,96263,96265,96267],{"class":242,"line":309},[240,96262,96242],{"class":257},[240,96264,2631],{"class":288},[240,96266,1643],{"class":264},[240,96268,2129],{"class":257},[240,96270,96271],{"class":242,"line":529},[240,96272,95477],{"class":246},[240,96274,96275],{"class":242,"line":549},[240,96276,96277],{"class":246},"#array([2, 3, 4, 1])\n",[19,96279,96280],{},[219,96281],{"alt":236,"src":96282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[14,96284,96286],{"id":96285},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[19,96288,96289],{},"resize()重新调整数组的大小",[19,96291,96292],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[231,96294,96296],{"className":32324,"code":96295,"language":32326,"meta":236,"style":236},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[23,96297,96298,96303,96316],{"__ignoreMap":236},[240,96299,96300],{"class":242,"line":243},[240,96301,96302],{"class":246},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[240,96304,96305,96308,96310,96312,96314],{"class":242,"line":250},[240,96306,96307],{"class":257},"np.resize(aa,(",[240,96309,1668],{"class":264},[240,96311,2479],{"class":257},[240,96313,2445],{"class":264},[240,96315,32443],{"class":257},[240,96317,96318,96320,96322,96324,96326,96328],{"class":242,"line":261},[240,96319,96307],{"class":257},[240,96321,1668],{"class":264},[240,96323,2479],{"class":257},[240,96325,2520],{"class":264},[240,96327,84685],{"class":257},[240,96329,96330],{"class":246},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[14,96332,96334],{"id":96333},"_125-placeput函数","12.5 place()\u002Fput()函数",[19,96336,96337],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[19,96339,96340],{},[219,96341],{"alt":236,"src":96342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[14,96344,96346],{"id":96345},"_126-保存加载文件","12.6 保存加载文件",[19,96348,96349],{},"savetxt():将数据保存到txt文件中",[19,96351,96352],{},"loadtxt():从文件加载数据",[19,96354,96355],{},[219,96356],{"alt":236,"src":96357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[14,96359,96361],{"id":96360},"_127-genfromtxt函数","12.7 genfromtxt()函数",[19,96363,96364],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[14,96366,96368],{"id":96367},"_128-anyall函数","12.8 any()\u002Fall()函数",[19,96370,96371],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[19,96373,96374],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[19,96376,96377],{},[219,96378],{"alt":236,"src":96379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[14,96381,96383],{"id":96382},"_129-where语句","12.9 where语句",[19,96385,96386],{},"np.where(条件,x,y)",[19,96388,96389],{},"如果条件为True,对应值为x,否则对应值为y",[19,96391,96392],{},[219,96393],{"alt":236,"src":96394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[14,96396,96398],{"id":96397},"_1210-dot矩阵","12.10 dot()矩阵",[19,96400,96401],{},[219,96402],{"alt":236,"src":96403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[2019,96405,96406],{},"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":236,"searchDepth":250,"depth":250,"links":96408},[96409,96410,96411,96412,96413,96414,96415,96416,96417,96418],{"id":95771,"depth":250,"text":95772},{"id":95994,"depth":250,"text":95995},{"id":96210,"depth":250,"text":96211},{"id":96285,"depth":250,"text":96286},{"id":96333,"depth":250,"text":96334},{"id":96345,"depth":250,"text":96346},{"id":96360,"depth":250,"text":96361},{"id":96367,"depth":250,"text":96368},{"id":96382,"depth":250,"text":96383},{"id":96397,"depth":250,"text":96398},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":95763,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":96425,"title":96426,"body":96427,"description":2048,"extension":2049,"meta":96780,"navigation":2051,"path":96781,"seo":96782,"stem":96783,"__hash__":96784},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":96428,"toc":96778},[96429,96432,96435,96438,96441,96444,96509,96511,96775],[10,96430,96426],{"id":96431},"_13数组排序",[19,96433,96434],{},"排序主要用到的方法是np.sort和np.argsort",[19,96436,96437],{},"其中np.sort()对数组直接排序",[19,96439,96440],{},"而np.argsort()是返回排序后的原始索引",[19,96442,96443],{},"①一维数组",[231,96445,96447],{"className":32324,"code":96446,"language":32326,"meta":236,"style":236},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[23,96448,96449,96453,96493,96501],{"__ignoreMap":236},[240,96450,96451],{"class":242,"line":243},[240,96452,95018],{"class":246},[240,96454,96455,96457,96459,96461,96463,96465,96467,96469,96471,96473,96475,96477,96479,96481,96483,96485,96487,96489,96491],{"class":242,"line":250},[240,96456,254],{"class":257},[240,96458,440],{"class":288},[240,96460,94937],{"class":257},[240,96462,1692],{"class":264},[240,96464,2479],{"class":257},[240,96466,2597],{"class":264},[240,96468,2479],{"class":257},[240,96470,2496],{"class":264},[240,96472,2479],{"class":257},[240,96474,2872],{"class":264},[240,96476,2479],{"class":257},[240,96478,2383],{"class":264},[240,96480,2479],{"class":257},[240,96482,2988],{"class":264},[240,96484,2479],{"class":257},[240,96486,2445],{"class":264},[240,96488,2479],{"class":257},[240,96490,2546],{"class":264},[240,96492,6609],{"class":257},[240,96494,96495,96498],{"class":242,"line":261},[240,96496,96497],{"class":257},"np.sort(a)",[240,96499,96500],{"class":246},"#升序排序\n",[240,96502,96503,96506],{"class":242,"line":277},[240,96504,96505],{"class":257},"np.argsort(a)",[240,96507,96508],{"class":246},"#按照元素大小来索引排序\n",[19,96510,95204],{},[231,96512,96514],{"className":32324,"code":96513,"language":32326,"meta":236,"style":236},"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",[23,96515,96516,96528,96554,96559,96563,96568,96573,96578,96583,96587,96595,96599,96604,96609,96614,96619,96623,96628,96641,96645,96650,96655,96660,96665,96669,96674,96686,96690,96694,96698,96702,96706,96710,96715,96730,96735,96744,96749,96753,96757,96762,96766,96771],{"__ignoreMap":236},[240,96517,96518,96521,96523,96525],{"class":242,"line":243},[240,96519,96520],{"class":257},"np.random.seed(",[240,96522,1274],{"class":264},[240,96524,2529],{"class":257},[240,96526,96527],{"class":246},"#保证每次值一样\n",[240,96529,96530,96532,96534,96536,96538,96540,96542,96544,96546,96548,96550,96552],{"class":242,"line":250},[240,96531,95219],{"class":257},[240,96533,440],{"class":288},[240,96535,95027],{"class":257},[240,96537,285],{"class":264},[240,96539,2479],{"class":257},[240,96541,33442],{"class":792},[240,96543,440],{"class":288},[240,96545,789],{"class":257},[240,96547,1716],{"class":264},[240,96549,2479],{"class":257},[240,96551,2445],{"class":264},[240,96553,32443],{"class":257},[240,96555,96556],{"class":242,"line":261},[240,96557,96558],{"class":246},"#原数组：\n",[240,96560,96561],{"class":242,"line":277},[240,96562,95841],{"class":443},[240,96564,96565],{"class":242,"line":294},[240,96566,96567],{"class":443},"array([[44, 47, 64, 67, 67,  9],\n",[240,96569,96570],{"class":242,"line":309},[240,96571,96572],{"class":443},"       [83, 21, 36, 87, 70, 88],\n",[240,96574,96575],{"class":242,"line":529},[240,96576,96577],{"class":443},"       [88, 12, 58, 65, 39, 87],\n",[240,96579,96580],{"class":242,"line":549},[240,96581,96582],{"class":443},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[240,96584,96585],{"class":242,"line":569},[240,96586,95841],{"class":443},[240,96588,96589,96592],{"class":242,"line":589},[240,96590,96591],{"class":257},"np.sort(aa)",[240,96593,96594],{"class":246},"#每行进行了排序\n",[240,96596,96597],{"class":242,"line":715},[240,96598,95841],{"class":443},[240,96600,96601],{"class":242,"line":727},[240,96602,96603],{"class":443},"array([[ 9, 44, 47, 64, 67, 67],\n",[240,96605,96606],{"class":242,"line":1730},[240,96607,96608],{"class":443},"       [21, 36, 70, 83, 87, 88],\n",[240,96610,96611],{"class":242,"line":3582},[240,96612,96613],{"class":443},"       [12, 39, 58, 65, 87, 88],\n",[240,96615,96616],{"class":242,"line":3596},[240,96617,96618],{"class":443},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[240,96620,96621],{"class":242,"line":3601},[240,96622,95841],{"class":443},[240,96624,96625],{"class":242,"line":3607},[240,96626,96627],{"class":246},"#axis=0时\n",[240,96629,96630,96633,96635,96637,96639],{"class":242,"line":3628},[240,96631,96632],{"class":257},"np.sort(aa,",[240,96634,49460],{"class":792},[240,96636,440],{"class":288},[240,96638,1274],{"class":264},[240,96640,2129],{"class":257},[240,96642,96643],{"class":242,"line":3633},[240,96644,95841],{"class":443},[240,96646,96647],{"class":242,"line":3647},[240,96648,96649],{"class":443},"array([[44, 12, 36, 37, 25,  9],\n",[240,96651,96652],{"class":242,"line":3652},[240,96653,96654],{"class":443},"       [46, 21, 58, 65, 39, 77],\n",[240,96656,96657],{"class":242,"line":3681},[240,96658,96659],{"class":443},"       [83, 47, 64, 67, 67, 87],\n",[240,96661,96662],{"class":242,"line":3686},[240,96663,96664],{"class":443},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[240,96666,96667],{"class":242,"line":3703},[240,96668,95841],{"class":443},[240,96670,96671],{"class":242,"line":3708},[240,96672,96673],{"class":246},"#axis=1时,为默认值\n",[240,96675,96676,96678,96680,96682,96684],{"class":242,"line":3713},[240,96677,96632],{"class":257},[240,96679,49460],{"class":792},[240,96681,440],{"class":288},[240,96683,1643],{"class":264},[240,96685,2129],{"class":257},[240,96687,96688],{"class":242,"line":3718},[240,96689,95841],{"class":443},[240,96691,96692],{"class":242,"line":3732},[240,96693,96603],{"class":443},[240,96695,96696],{"class":242,"line":3737},[240,96697,96608],{"class":443},[240,96699,96700],{"class":242,"line":4530},[240,96701,96613],{"class":443},[240,96703,96704],{"class":242,"line":4544},[240,96705,96618],{"class":443},[240,96707,96708],{"class":242,"line":4552},[240,96709,95841],{"class":443},[240,96711,96712],{"class":242,"line":4557},[240,96713,96714],{"class":246},"#按最后一列排序\n",[240,96716,96717,96719,96721,96724,96726,96728],{"class":242,"line":4563},[240,96718,2367],{"class":257},[240,96720,440],{"class":288},[240,96722,96723],{"class":257},"aa[:,",[240,96725,2631],{"class":288},[240,96727,1643],{"class":264},[240,96729,35192],{"class":257},[240,96731,96732],{"class":242,"line":4569},[240,96733,96734],{"class":246},"#获取最后一列排好序的索引\n",[240,96736,96737,96739,96741],{"class":242,"line":4574},[240,96738,75973],{"class":257},[240,96740,440],{"class":288},[240,96742,96743],{"class":257},"np.argsort(b)\n",[240,96745,96746],{"class":242,"line":9899},[240,96747,96748],{"class":257},"aa[index]\n",[240,96750,96751],{"class":242,"line":9923},[240,96752,95841],{"class":443},[240,96754,96755],{"class":242,"line":9928},[240,96756,96567],{"class":443},[240,96758,96759],{"class":242,"line":9934},[240,96760,96761],{"class":443},"       [46, 88, 81, 37, 25, 77],\n",[240,96763,96764],{"class":242,"line":9961},[240,96765,96577],{"class":443},[240,96767,96768],{"class":242,"line":9966},[240,96769,96770],{"class":443},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[240,96772,96773],{"class":242,"line":9972},[240,96774,95841],{"class":443},[2019,96776,96777],{},"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":236,"searchDepth":250,"depth":250,"links":96779},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":96426,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":96786,"title":96787,"body":96788,"description":2048,"extension":2049,"meta":96818,"navigation":2051,"path":96819,"seo":96820,"stem":96821,"__hash__":96822},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":96789,"toc":96816},[96790,96793,96796,96799,96802,96805,96808,96811],[10,96791,96787],{"id":96792},"_14广播机制",[19,96794,96795],{},"广播的规则：",[19,96797,96798],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[19,96800,96801],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[19,96803,96804],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[19,96806,96807],{},"3.如果没有维度形状为1，则会引发异常",[19,96809,96810],{},"也就是只有维度或者个数为1才可以进行广播操作",[19,96812,96813],{},[219,96814],{"alt":236,"src":96815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":236,"searchDepth":250,"depth":250,"links":96817},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":96787,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":96824,"title":96825,"body":96826,"description":2048,"extension":2049,"meta":96924,"navigation":2051,"path":96925,"seo":96926,"stem":96927,"__hash__":96928},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":96827,"toc":96922},[96828,96831,96834,96919],[10,96829,96825],{"id":96830},"_15比较掩码",[19,96832,96833],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[231,96835,96837],{"className":32324,"code":96836,"language":32326,"meta":236,"style":236},"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",[23,96838,96839,96885,96896,96910,96914],{"__ignoreMap":236},[240,96840,96841,96843,96845,96848,96850,96852,96854,96856,96858,96860,96862,96864,96866,96868,96870,96872,96874,96876,96878,96880,96882],{"class":242,"line":243},[240,96842,254],{"class":257},[240,96844,440],{"class":288},[240,96846,96847],{"class":257},"np.array([[",[240,96849,1643],{"class":264},[240,96851,2479],{"class":257},[240,96853,1668],{"class":264},[240,96855,2479],{"class":257},[240,96857,1692],{"class":264},[240,96859,49976],{"class":257},[240,96861,2571],{"class":264},[240,96863,2479],{"class":257},[240,96865,2597],{"class":264},[240,96867,2479],{"class":257},[240,96869,2622],{"class":264},[240,96871,49976],{"class":257},[240,96873,2822],{"class":264},[240,96875,2479],{"class":257},[240,96877,2847],{"class":264},[240,96879,2479],{"class":257},[240,96881,2872],{"class":264},[240,96883,96884],{"class":257},"]])\n",[240,96886,96887,96889,96891,96893],{"class":242,"line":250},[240,96888,254],{"class":257},[240,96890,431],{"class":288},[240,96892,1000],{"class":264},[240,96894,96895],{"class":246},"#结果是一个由True,False组成的数组\n",[240,96897,96898,96901,96903,96905,96907],{"class":242,"line":261},[240,96899,96900],{"class":257},"a[a",[240,96902,431],{"class":288},[240,96904,1000],{"class":264},[240,96906,3034],{"class":257},[240,96908,96909],{"class":246},"#小于20的元素会存到这个数组中\n",[240,96911,96912],{"class":242,"line":277},[240,96913,95477],{"class":246},[240,96915,96916],{"class":242,"line":294},[240,96917,96918],{"class":246},"#array([ 1,  2,  3, 11, 12, 13])\n",[2019,96920,96921],{},"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":236,"searchDepth":250,"depth":250,"links":96923},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":96825,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":96930,"title":96931,"body":96932,"description":2048,"extension":2049,"meta":97024,"navigation":2051,"path":97025,"seo":97026,"stem":97027,"__hash__":97028},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":96933,"toc":97022},[96934,96937,96940,96943,96946,96949,97014,97019],[10,96935,96931],{"id":96936},"_16魔法命令time",[19,96938,96939],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[19,96941,96942],{},"%:行模式",[19,96944,96945],{},"%%:单元格模式",[19,96947,96948],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[231,96950,96952],{"className":32324,"code":96951,"language":32326,"meta":236,"style":236},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[23,96953,96954,96959,96966,96971,96980,96993,96997,97005],{"__ignoreMap":236},[240,96955,96956],{"class":242,"line":243},[240,96957,96958],{"class":246},"#程序执行时间\n",[240,96960,96961,96963],{"class":242,"line":250},[240,96962,32338],{"class":288},[240,96964,96965],{"class":257}," time \n",[240,96967,96968],{"class":242,"line":261},[240,96969,96970],{"class":246},"#获取时间\n",[240,96972,96973,96976,96978],{"class":242,"line":277},[240,96974,96975],{"class":257},"start",[240,96977,440],{"class":288},[240,96979,34364],{"class":257},[240,96981,96982,96985,96988,96990],{"class":242,"line":294},[240,96983,96984],{"class":257},"time.sleep(",[240,96986,96987],{"class":264},"0.4",[240,96989,2529],{"class":257},[240,96991,96992],{"class":246},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[240,96994,96995],{"class":242,"line":309},[240,96996,96970],{"class":246},[240,96998,96999,97001,97003],{"class":242,"line":529},[240,97000,47747],{"class":257},[240,97002,440],{"class":288},[240,97004,34364],{"class":257},[240,97006,97007,97009,97011],{"class":242,"line":549},[240,97008,47747],{"class":257},[240,97010,2631],{"class":288},[240,97012,97013],{"class":257},"start\n",[19,97015,97016],{},[219,97017],{"alt":236,"src":97018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[2019,97020,97021],{},"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":236,"searchDepth":250,"depth":250,"links":97023},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":96931,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":97030,"title":97031,"body":97032,"description":2048,"extension":2049,"meta":97067,"navigation":2051,"path":97068,"seo":97069,"stem":97070,"__hash__":97071},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":97033,"toc":97065},[97034,97037,97040,97043,97046,97049,97052,97055,97060],[10,97035,97031],{"id":97036},"_17魔法命令timeit",[19,97038,97039],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[19,97041,97042],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[19,97044,97045],{},"单元格模式：",[19,97047,97048],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[19,97050,97051],{},"初始化语句执行次数由轮数来决定",[19,97053,97054],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[19,97056,97057],{},[219,97058],{"alt":236,"src":97059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[19,97061,97062],{},[219,97063],{"alt":236,"src":97064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":236,"searchDepth":250,"depth":250,"links":97066},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":97031,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":97073,"title":97074,"body":97075,"description":2048,"extension":2049,"meta":97093,"navigation":2051,"path":97094,"seo":97095,"stem":97096,"__hash__":97097},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":97076,"toc":97091},[97077,97080,97083,97086],[10,97078,97074],{"id":97079},"_18魔法命令writefile和run",[19,97081,97082],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[19,97084,97085],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[19,97087,97088],{},[219,97089],{"alt":236,"src":97090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":236,"searchDepth":250,"depth":250,"links":97092},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":97074,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":97099,"title":97100,"body":97101,"description":2048,"extension":2049,"meta":97154,"navigation":2051,"path":97155,"seo":97156,"stem":97157,"__hash__":97158},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":97102,"toc":97152},[97103,97106,97109,97111,97114,97117,97122,97125,97128,97131,97134,97137,97140,97143,97146,97149],[10,97104,97100],{"id":97105},"_19魔法命令memit",[19,97107,97108],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[19,97110,26546],{},[19,97112,97113],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[19,97115,97116],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[19,97118,97119],{},[219,97120],{"alt":236,"src":97121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[19,97123,97124],{},"补充：",[19,97126,97127],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[19,97129,97130],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[19,97132,97133],{},"解决方法：",[19,97135,97136],{},"1.cmd",[19,97138,97139],{},"2.依次输入以下代码：",[19,97141,97142],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[19,97144,97145],{},"pip install --upgrade ipython",[19,97147,97148],{},"#升级 memory_profiler 和 setuptools",[19,97150,97151],{},"pip install --upgrade memory_profiler setuptools",{"title":236,"searchDepth":250,"depth":250,"links":97153},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":97100,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":97160,"title":97161,"body":97162,"description":2048,"extension":2049,"meta":98808,"navigation":2051,"path":98809,"seo":98810,"stem":98811,"__hash__":98812},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":97163,"toc":98778},[97164,97167,97171,97175,97236,97239,97244,97248,97253,97258,97263,97268,97271,97276,97280,97284,97317,97320,97323,97326,97378,97381,97417,97420,97462,97466,97487,97489,97526,97528,97533,97535,97540,97544,97547,97575,97579,97583,97636,97640,97732,97736,97740,97743,97748,97752,97777,97782,97786,97789,97792,97795,97798,97801,97804,97807,97819,97823,97827,97830,97862,97865,97888,97891,97917,97920,97946,97949,97983,97986,98048,98052,98055,98059,98062,98088,98091,98094,98099,98102,98171,98173,98178,98239,98242,98253,98259,98264,98268,98271,98284,98288,98303,98305,98328,98330,98356,98359,98362,98365,98413,98415,98420,98424,98428,98455,98459,98486,98489,98494,98499,98589,98593,98651,98656,98659,98662,98704,98708,98764,98769,98772,98775],[10,97165,97161],{"id":97166},"_2创建数组",[14,97168,97170],{"id":97169},"_21-array函数创建数组","2.1 array()函数创建数组",[32,97172,97174],{"id":97173},"_221-函数语句","2.2.1 函数语句",[231,97176,97178],{"className":32324,"code":97177,"language":32326,"meta":236,"style":236},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[23,97179,97180],{"__ignoreMap":236},[240,97181,97182,97185,97188,97190,97192,97194,97196,97198,97201,97203,97206,97208,97211,97213,97215,97217,97220,97222,97225,97227,97230,97232,97234],{"class":242,"line":243},[240,97183,97184],{"class":257},"numpy.array(",[240,97186,97187],{"class":264},"object",[240,97189,1277],{"class":257},[240,97191,95413],{"class":792},[240,97193,15514],{"class":288},[240,97195,40879],{"class":264},[240,97197,1277],{"class":257},[240,97199,97200],{"class":792},"copy",[240,97202,15514],{"class":288},[240,97204,97205],{"class":264}," True",[240,97207,1277],{"class":257},[240,97209,97210],{"class":792},"order",[240,97212,15514],{"class":288},[240,97214,40879],{"class":264},[240,97216,1277],{"class":257},[240,97218,97219],{"class":792},"subok",[240,97221,15514],{"class":288},[240,97223,97224],{"class":264}," False",[240,97226,1277],{"class":257},[240,97228,97229],{"class":792},"ndmin",[240,97231,15514],{"class":288},[240,97233,6045],{"class":264},[240,97235,2129],{"class":257},[19,97237,97238],{},"参数：",[19,97240,97241],{},[219,97242],{"alt":236,"src":97243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[32,97245,97247],{"id":97246},"_222-实例","2.2.2 实例",[19,97249,97250],{},[219,97251],{"alt":236,"src":97252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[19,97254,97255],{},[219,97256],{"alt":236,"src":97257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[19,97259,97260],{},[219,97261],{"alt":236,"src":97262},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[19,97264,97265],{},[219,97266],{"alt":236,"src":97267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[19,97269,97270],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[19,97272,97273],{},[219,97274],{"alt":236,"src":97275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[14,97277,97279],{"id":97278},"_22-随机数创建数组","2.2 随机数创建数组",[32,97281,97283],{"id":97282},"_221-random语句","2.2.1 random语句",[231,97285,97287],{"className":32324,"code":97286,"language":32326,"meta":236,"style":236},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[23,97288,97289,97294,97299,97307,97312],{"__ignoreMap":236},[240,97290,97291],{"class":242,"line":243},[240,97292,97293],{"class":246},"#random.random()\n",[240,97295,97296],{"class":242,"line":250},[240,97297,97298],{"class":246},"#确定随机种子,就是每次运行结果是相同的\n",[240,97300,97301,97303,97305],{"class":242,"line":261},[240,97302,96520],{"class":257},[240,97304,1274],{"class":264},[240,97306,2129],{"class":257},[240,97308,97309],{"class":242,"line":277},[240,97310,97311],{"class":257},"np.random.random()\n",[240,97313,97314],{"class":242,"line":294},[240,97315,97316],{"class":246},"#生成一个随机的数目\n",[19,97318,97319],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[19,97321,97322],{},"可以指定数组形状 size",[19,97324,97325],{},"①生成一维数组",[231,97327,97329],{"className":32324,"code":97328,"language":32326,"meta":236,"style":236},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[23,97330,97331,97336,97349,97354,97370],{"__ignoreMap":236},[240,97332,97333],{"class":242,"line":243},[240,97334,97335],{"class":246},"#random.random(size())\n",[240,97337,97338,97341,97343,97345,97347],{"class":242,"line":250},[240,97339,97340],{"class":257},"np.random.random(",[240,97342,33442],{"class":792},[240,97344,440],{"class":288},[240,97346,1741],{"class":264},[240,97348,2129],{"class":257},[240,97350,97351],{"class":242,"line":261},[240,97352,97353],{"class":246},"#生成一位的五个元素\n",[240,97355,97356,97358,97360,97362,97364,97366,97368],{"class":242,"line":277},[240,97357,254],{"class":257},[240,97359,440],{"class":288},[240,97361,97340],{"class":257},[240,97363,33442],{"class":792},[240,97365,440],{"class":288},[240,97367,1716],{"class":264},[240,97369,2129],{"class":257},[240,97371,97372,97375],{"class":242,"line":294},[240,97373,97374],{"class":257},"a.shape ",[240,97376,97377],{"class":246},"#输出数组形状\n",[19,97379,97380],{},"②生成二维数组",[231,97382,97384],{"className":32324,"code":97383,"language":32326,"meta":236,"style":236},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[23,97385,97386,97390,97412],{"__ignoreMap":236},[240,97387,97388],{"class":242,"line":243},[240,97389,95214],{"class":246},[240,97391,97392,97394,97396,97398,97400,97402,97404,97406,97408,97410],{"class":242,"line":250},[240,97393,95219],{"class":257},[240,97395,440],{"class":288},[240,97397,97340],{"class":257},[240,97399,33442],{"class":792},[240,97401,440],{"class":288},[240,97403,789],{"class":257},[240,97405,1716],{"class":264},[240,97407,2479],{"class":257},[240,97409,1741],{"class":264},[240,97411,32443],{"class":257},[240,97413,97414],{"class":242,"line":261},[240,97415,97416],{"class":246},"#生成四行五列的数组\n",[19,97418,97419],{},"③生成三维数组",[231,97421,97423],{"className":32324,"code":97422,"language":32326,"meta":236,"style":236},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[23,97424,97425,97430,97457],{"__ignoreMap":236},[240,97426,97427],{"class":242,"line":243},[240,97428,97429],{"class":246},"#三维数组\n",[240,97431,97432,97435,97437,97439,97441,97443,97445,97447,97449,97451,97453,97455],{"class":242,"line":250},[240,97433,97434],{"class":257},"aaa",[240,97436,440],{"class":288},[240,97438,97340],{"class":257},[240,97440,33442],{"class":792},[240,97442,440],{"class":288},[240,97444,789],{"class":257},[240,97446,1668],{"class":264},[240,97448,2479],{"class":257},[240,97450,1692],{"class":264},[240,97452,2479],{"class":257},[240,97454,1716],{"class":264},[240,97456,32443],{"class":257},[240,97458,97459],{"class":242,"line":261},[240,97460,97461],{"class":257},"aaa.shape\n",[32,97463,97465],{"id":97464},"_222-randint语句","2.2.2 randint语句",[231,97467,97469],{"className":32324,"code":97468,"language":32326,"meta":236,"style":236},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[23,97470,97471,97476],{"__ignoreMap":236},[240,97472,97473],{"class":242,"line":243},[240,97474,97475],{"class":246},"#生成随机的整数 random.randint(low,high,size)\n",[240,97477,97478,97480,97482,97484],{"class":242,"line":250},[240,97479,95027],{"class":257},[240,97481,1741],{"class":264},[240,97483,1230],{"class":257},[240,97485,97486],{"class":246},"#0~5中的随机一个数\n",[19,97488,97325],{},[231,97490,97492],{"className":32324,"code":97491,"language":32326,"meta":236,"style":236},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[23,97493,97494,97499,97521],{"__ignoreMap":236},[240,97495,97496],{"class":242,"line":243},[240,97497,97498],{"class":246},"#一维\n",[240,97500,97501,97503,97505,97507,97509,97511,97513,97515,97517,97519],{"class":242,"line":250},[240,97502,95027],{"class":257},[240,97504,1643],{"class":264},[240,97506,2479],{"class":257},[240,97508,2571],{"class":264},[240,97510,2479],{"class":257},[240,97512,33442],{"class":792},[240,97514,440],{"class":288},[240,97516,789],{"class":257},[240,97518,2546],{"class":264},[240,97520,32443],{"class":257},[240,97522,97523],{"class":242,"line":261},[240,97524,97525],{"class":246},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[19,97527,97380],{},[19,97529,97530],{},[219,97531],{"alt":236,"src":97532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[19,97534,97419],{},[19,97536,97537],{},[219,97538],{"alt":236,"src":97539},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[32,97541,97543],{"id":97542},"_222-rand语句","2.2.2 rand语句",[19,97545,97546],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[231,97548,97550],{"className":32324,"code":97549,"language":32326,"meta":236,"style":236},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[23,97551,97552,97565,97570],{"__ignoreMap":236},[240,97553,97554,97557,97559,97561,97563],{"class":242,"line":243},[240,97555,97556],{"class":257},"np.random.rand(",[240,97558,285],{"class":264},[240,97560,2479],{"class":257},[240,97562,2546],{"class":264},[240,97564,2129],{"class":257},[240,97566,97567],{"class":242,"line":250},[240,97568,97569],{"class":246},"#第一个参数100：行数，表示有100个样本\n",[240,97571,97572],{"class":242,"line":261},[240,97573,97574],{"class":246},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[14,97576,97578],{"id":97577},"_23-arange创建数组","2.3 arange()创建数组",[32,97580,97582],{"id":97581},"_231-函数语句","2.3.1 函数语句",[231,97584,97586],{"className":32324,"code":97585,"language":32326,"meta":236,"style":236},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[23,97587,97588,97602,97607,97612,97617,97622,97627,97632],{"__ignoreMap":236},[240,97589,97590,97593,97595,97597,97600],{"class":242,"line":243},[240,97591,97592],{"class":257},"numpy.arange([start,] stop[, step], ",[240,97594,95413],{"class":792},[240,97596,440],{"class":288},[240,97598,97599],{"class":264},"None",[240,97601,2129],{"class":257},[240,97603,97604],{"class":242,"line":250},[240,97605,97606],{"class":246},"#参数\n",[240,97608,97609],{"class":242,"line":261},[240,97610,97611],{"class":443},"\"\"\"\n",[240,97613,97614],{"class":242,"line":277},[240,97615,97616],{"class":443},"start:起始值，可选，默认从 0 开始。\n",[240,97618,97619],{"class":242,"line":294},[240,97620,97621],{"class":443},"stop:结束值（不包含该值）。\n",[240,97623,97624],{"class":242,"line":309},[240,97625,97626],{"class":443},"step:步长，可选，默认是 1。可以为浮点数。\n",[240,97628,97629],{"class":242,"line":529},[240,97630,97631],{"class":443},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[240,97633,97634],{"class":242,"line":549},[240,97635,97611],{"class":443},[32,97637,97639],{"id":97638},"_232-实例","2.3.2 实例",[231,97641,97643],{"className":32324,"code":97642,"language":32326,"meta":236,"style":236},"#创建一维数组\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",[23,97644,97645,97649,97673,97678,97683,97687,97710,97714,97718,97723,97728],{"__ignoreMap":236},[240,97646,97647],{"class":242,"line":243},[240,97648,95018],{"class":246},[240,97650,97651,97653,97655,97657,97659,97661,97663,97665,97667,97669,97671],{"class":242,"line":250},[240,97652,94915],{"class":257},[240,97654,1643],{"class":264},[240,97656,2479],{"class":257},[240,97658,2822],{"class":264},[240,97660,2479],{"class":257},[240,97662,1643],{"class":264},[240,97664,2479],{"class":257},[240,97666,95413],{"class":792},[240,97668,440],{"class":288},[240,97670,2126],{"class":264},[240,97672,2129],{"class":257},[240,97674,97675],{"class":242,"line":261},[240,97676,97677],{"class":246},"#输出结果：\n",[240,97679,97680],{"class":242,"line":277},[240,97681,97682],{"class":246},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[240,97684,97685],{"class":242,"line":294},[240,97686,95860],{"class":246},[240,97688,97689,97692,97694,97696,97698,97701,97703,97705,97707],{"class":242,"line":309},[240,97690,97691],{"class":257},"np.array([np.arange(",[240,97693,1643],{"class":264},[240,97695,2479],{"class":257},[240,97697,1716],{"class":264},[240,97699,97700],{"class":257},"),np.arange(",[240,97702,1716],{"class":264},[240,97704,2479],{"class":257},[240,97706,2470],{"class":264},[240,97708,97709],{"class":257},")])\n",[240,97711,97712],{"class":242,"line":529},[240,97713,95477],{"class":246},[240,97715,97716],{"class":242,"line":549},[240,97717,97611],{"class":443},[240,97719,97720],{"class":242,"line":569},[240,97721,97722],{"class":443},"array([[1, 2, 3],\n",[240,97724,97725],{"class":242,"line":589},[240,97726,97727],{"class":443},"       [4, 5, 6]])\n",[240,97729,97730],{"class":242,"line":715},[240,97731,97611],{"class":443},[14,97733,97735],{"id":97734},"_24-生态分布","2.4 生态分布",[32,97737,97739],{"id":97738},"_241-标准正态分布","2.4.1 标准正态分布",[19,97741,97742],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[19,97744,97745],{},[219,97746],{"alt":236,"src":97747},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[32,97749,97751],{"id":97750},"_242-常规正态分布","2.4.2 常规正态分布",[231,97753,97755],{"className":32324,"code":97754,"language":32326,"meta":236,"style":236},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[23,97756,97757,97762,97767,97772],{"__ignoreMap":236},[240,97758,97759],{"class":242,"line":243},[240,97760,97761],{"class":257},"random.normal(loc,scale,size)也可以生成正态分布\n",[240,97763,97764],{"class":242,"line":250},[240,97765,97766],{"class":246},"#loc:期望\n",[240,97768,97769],{"class":242,"line":261},[240,97770,97771],{"class":246},"#scale:方差\n",[240,97773,97774],{"class":242,"line":277},[240,97775,97776],{"class":246},"#size:用于确定是几维的数列\n",[19,97778,97779],{},[219,97780],{"alt":236,"src":97781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[14,97783,97785],{"id":97784},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[19,97787,97788],{},"ndim:秩，维度个数",[19,97790,97791],{},"size:数组元素的个数",[19,97793,97794],{},"shape:数组的形状",[19,97796,97797],{},"dtype:数组元素的类型",[19,97799,97800],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[19,97802,97803],{},"他们都是属性，通过数组.属性的形式来确定",[19,97805,97806],{},"如果需要输出多个可以通过以下方式：",[231,97808,97810],{"className":32324,"code":97809,"language":32326,"meta":236,"style":236},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[23,97811,97812],{"__ignoreMap":236},[240,97813,97814,97816],{"class":242,"line":243},[240,97815,32361],{"class":264},[240,97817,97818],{"class":257},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[14,97820,97822],{"id":97821},"_26-其他方式创建数组","2.6 其他方式创建数组",[32,97824,97826],{"id":97825},"_261-zeros创建数组","2.6.1 zeros()创建数组",[19,97828,97829],{},"①创建一维数组",[231,97831,97833],{"className":32324,"code":97832,"language":32326,"meta":236,"style":236},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[23,97834,97835,97844,97848,97853,97858],{"__ignoreMap":236},[240,97836,97837,97840,97842],{"class":242,"line":243},[240,97838,97839],{"class":257},"np.zeros(",[240,97841,2546],{"class":264},[240,97843,2129],{"class":257},[240,97845,97846],{"class":242,"line":250},[240,97847,97611],{"class":443},[240,97849,97850],{"class":242,"line":261},[240,97851,97852],{"class":443},"输出结果：\n",[240,97854,97855],{"class":242,"line":277},[240,97856,97857],{"class":443},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[240,97859,97860],{"class":242,"line":294},[240,97861,97611],{"class":443},[19,97863,97864],{},"上方代码等价于：",[231,97866,97868],{"className":32324,"code":97867,"language":32326,"meta":236,"style":236},"np.zeros(shape=(10))#创建10个元素的0数组\n",[23,97869,97870],{"__ignoreMap":236},[240,97871,97872,97874,97877,97879,97881,97883,97885],{"class":242,"line":243},[240,97873,97839],{"class":257},[240,97875,97876],{"class":792},"shape",[240,97878,440],{"class":288},[240,97880,789],{"class":257},[240,97882,2546],{"class":264},[240,97884,84685],{"class":257},[240,97886,97887],{"class":246},"#创建10个元素的0数组\n",[19,97889,97890],{},"也可以指定类型",[231,97892,97894],{"className":32324,"code":97893,"language":32326,"meta":236,"style":236},"#指定类型\nnp.zeros(5,dtype=int)\n",[23,97895,97896,97901],{"__ignoreMap":236},[240,97897,97898],{"class":242,"line":243},[240,97899,97900],{"class":246},"#指定类型\n",[240,97902,97903,97905,97907,97909,97911,97913,97915],{"class":242,"line":250},[240,97904,97839],{"class":257},[240,97906,1741],{"class":264},[240,97908,2479],{"class":257},[240,97910,95413],{"class":792},[240,97912,440],{"class":288},[240,97914,2126],{"class":264},[240,97916,2129],{"class":257},[19,97918,97919],{},"②创建二维数组",[231,97921,97923],{"className":32324,"code":97922,"language":32326,"meta":236,"style":236},"np.zeros((3,4),dtype=int)\n",[23,97924,97925],{"__ignoreMap":236},[240,97926,97927,97930,97932,97934,97936,97938,97940,97942,97944],{"class":242,"line":243},[240,97928,97929],{"class":257},"np.zeros((",[240,97931,1692],{"class":264},[240,97933,2479],{"class":257},[240,97935,1716],{"class":264},[240,97937,44202],{"class":257},[240,97939,95413],{"class":792},[240,97941,440],{"class":288},[240,97943,2126],{"class":264},[240,97945,2129],{"class":257},[19,97947,97948],{},"③创建三维数组",[231,97950,97952],{"className":32324,"code":97951,"language":32326,"meta":236,"style":236},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[23,97953,97954,97959],{"__ignoreMap":236},[240,97955,97956],{"class":242,"line":243},[240,97957,97958],{"class":246},"#创建三维数组\n",[240,97960,97961,97963,97965,97967,97969,97971,97973,97975,97977,97979,97981],{"class":242,"line":250},[240,97962,97929],{"class":257},[240,97964,1692],{"class":264},[240,97966,2479],{"class":257},[240,97968,1716],{"class":264},[240,97970,2479],{"class":257},[240,97972,1741],{"class":264},[240,97974,44202],{"class":257},[240,97976,95413],{"class":792},[240,97978,440],{"class":288},[240,97980,2126],{"class":264},[240,97982,2129],{"class":257},[19,97984,97985],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[231,97987,97989],{"className":32324,"code":97988,"language":32326,"meta":236,"style":236},"#使用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",[23,97990,97991,97996,98011,98016,98021,98043],{"__ignoreMap":236},[240,97992,97993],{"class":242,"line":243},[240,97994,97995],{"class":246},"#使用zeros_like将创建的一维数组变成全0的数组\n",[240,97997,97998,98000,98002,98004,98006,98008],{"class":242,"line":250},[240,97999,254],{"class":257},[240,98001,440],{"class":288},[240,98003,94915],{"class":257},[240,98005,1716],{"class":264},[240,98007,2529],{"class":257},[240,98009,98010],{"class":246},"#这个得到的结果：一维数组0，1，2，3\n",[240,98012,98013],{"class":242,"line":261},[240,98014,98015],{"class":257},"np.zeros_like(a)\n",[240,98017,98018],{"class":242,"line":277},[240,98019,98020],{"class":246},"#使用zeros_like将创建的二维数组变成全0的数组\n",[240,98022,98023,98025,98027,98029,98031,98033,98035,98037,98039,98041],{"class":242,"line":294},[240,98024,95219],{"class":257},[240,98026,440],{"class":288},[240,98028,97340],{"class":257},[240,98030,33442],{"class":792},[240,98032,440],{"class":288},[240,98034,789],{"class":257},[240,98036,1716],{"class":264},[240,98038,2479],{"class":257},[240,98040,1741],{"class":264},[240,98042,32443],{"class":257},[240,98044,98045],{"class":242,"line":309},[240,98046,98047],{"class":257},"np.zeros_like(aa)\n",[32,98049,98051],{"id":98050},"_262-ones创建数组","2.6.2 ones()创建数组",[19,98053,98054],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[32,98056,98058],{"id":98057},"_263-empty创建数组","2.6.3 empty()创建数组",[19,98060,98061],{},"①empty()用法",[231,98063,98065],{"className":32324,"code":98064,"language":32326,"meta":236,"style":236},"numpy.empty(shape,dtype=float,order='c')\n",[23,98066,98067],{"__ignoreMap":236},[240,98068,98069,98072,98074,98076,98078,98080,98082,98084,98086],{"class":242,"line":243},[240,98070,98071],{"class":257},"numpy.empty(shape,",[240,98073,95413],{"class":792},[240,98075,440],{"class":288},[240,98077,2161],{"class":264},[240,98079,2479],{"class":257},[240,98081,97210],{"class":792},[240,98083,440],{"class":288},[240,98085,77943],{"class":443},[240,98087,2129],{"class":257},[19,98089,98090],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[19,98092,98093],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[19,98095,98096],{},[219,98097],{"alt":236,"src":98098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[19,98100,98101],{},"②empty()用法",[231,98103,98105],{"className":32324,"code":98104,"language":32326,"meta":236,"style":236},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[23,98106,98107,98128,98140,98161,98166],{"__ignoreMap":236},[240,98108,98109,98111,98113,98116,98118,98120,98122,98124,98126],{"class":242,"line":243},[240,98110,2941],{"class":257},[240,98112,440],{"class":288},[240,98114,98115],{"class":257},"np.empty(",[240,98117,2546],{"class":264},[240,98119,2479],{"class":257},[240,98121,95413],{"class":792},[240,98123,440],{"class":288},[240,98125,2126],{"class":264},[240,98127,2129],{"class":257},[240,98129,98130,98132,98134,98136,98138],{"class":242,"line":250},[240,98131,2916],{"class":257},[240,98133,440],{"class":288},[240,98135,94915],{"class":257},[240,98137,1741],{"class":264},[240,98139,2129],{"class":257},[240,98141,98142,98145,98147,98150,98152,98154,98157,98159],{"class":242,"line":261},[240,98143,98144],{"class":257},"np.add(",[240,98146,1668],{"class":264},[240,98148,98149],{"class":257},",x,",[240,98151,94967],{"class":792},[240,98153,440],{"class":288},[240,98155,98156],{"class":257},"y[:",[240,98158,1741],{"class":264},[240,98160,6609],{"class":257},[240,98162,98163],{"class":242,"line":277},[240,98164,98165],{"class":246},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[240,98167,98168],{"class":242,"line":294},[240,98169,98170],{"class":257},"y\n",[19,98172,13465],{},[19,98174,98175],{},[219,98176],{"alt":236,"src":98177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[231,98179,98181],{"className":32324,"code":98180,"language":32326,"meta":236,"style":236},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[23,98182,98183,98199,98219,98234],{"__ignoreMap":236},[240,98184,98185,98187,98189,98191,98193,98195,98197],{"class":242,"line":243},[240,98186,2916],{"class":257},[240,98188,440],{"class":288},[240,98190,94915],{"class":257},[240,98192,1643],{"class":264},[240,98194,2479],{"class":257},[240,98196,2445],{"class":264},[240,98198,2129],{"class":257},[240,98200,98201,98203,98205,98207,98209,98211,98213,98215,98217],{"class":242,"line":250},[240,98202,2941],{"class":257},[240,98204,440],{"class":288},[240,98206,98115],{"class":257},[240,98208,1741],{"class":264},[240,98210,2479],{"class":257},[240,98212,95413],{"class":792},[240,98214,440],{"class":288},[240,98216,2126],{"class":264},[240,98218,2129],{"class":257},[240,98220,98221,98224,98226,98228,98230,98232],{"class":242,"line":261},[240,98222,98223],{"class":257},"np.add(x,",[240,98225,1668],{"class":264},[240,98227,2479],{"class":257},[240,98229,94967],{"class":792},[240,98231,440],{"class":288},[240,98233,95362],{"class":257},[240,98235,98236],{"class":242,"line":277},[240,98237,98238],{"class":246},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[19,98240,98241],{},"③empty_like()",[19,98243,98244],{},[68,98245,98246,98247,98252],{},"创建一个",[68,98248,98249],{},[68,98250,98251],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[19,98254,98255,98258],{},[23,98256,98257],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[19,98260,98261],{},[219,98262],{"alt":236,"src":98263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[32,98265,98267],{"id":98266},"_264-用法","2.6.4 ？？用法",[19,98269,98270],{},"当想查看一个函数的参数时，可以通过？？来实现",[231,98272,98274],{"className":32324,"code":98273,"language":32326,"meta":236,"style":236},"np.full??\n",[23,98275,98276],{"__ignoreMap":236},[240,98277,98278,98281],{"class":242,"line":243},[240,98279,98280],{"class":257},"np.full",[240,98282,98283],{"class":79317},"??\n",[32,98285,98287],{"id":98286},"_265-full创建数组","2.6.5 full()创建数组",[231,98289,98291],{"className":32324,"code":98290,"language":32326,"meta":236,"style":236},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[23,98292,98293,98298],{"__ignoreMap":236},[240,98294,98295],{"class":242,"line":243},[240,98296,98297],{"class":257},"full(shape,fill_value)\n",[240,98299,98300],{"class":242,"line":250},[240,98301,98302],{"class":257},"创建全为某个指定值的数组\n",[19,98304,96443],{},[231,98306,98308],{"className":32324,"code":98307,"language":32326,"meta":236,"style":236},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[23,98309,98310,98315],{"__ignoreMap":236},[240,98311,98312],{"class":242,"line":243},[240,98313,98314],{"class":246},"#创建一个一维数组,以20进行填充\n",[240,98316,98317,98320,98322,98324,98326],{"class":242,"line":250},[240,98318,98319],{"class":257},"np.full(",[240,98321,2546],{"class":264},[240,98323,2479],{"class":257},[240,98325,1000],{"class":264},[240,98327,2129],{"class":257},[19,98329,95204],{},[231,98331,98333],{"className":32324,"code":98332,"language":32326,"meta":236,"style":236},"#创建二维数组\nnp.full((3,5),11)\n",[23,98334,98335,98339],{"__ignoreMap":236},[240,98336,98337],{"class":242,"line":243},[240,98338,95860],{"class":246},[240,98340,98341,98344,98346,98348,98350,98352,98354],{"class":242,"line":250},[240,98342,98343],{"class":257},"np.full((",[240,98345,1692],{"class":264},[240,98347,2479],{"class":257},[240,98349,1741],{"class":264},[240,98351,44202],{"class":257},[240,98353,2571],{"class":264},[240,98355,2129],{"class":257},[19,98357,98358],{},"③full_like用法",[19,98360,98361],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[19,98363,98364],{},"这里是指定填充而已",[231,98366,98368],{"className":32324,"code":98367,"language":32326,"meta":236,"style":236},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[23,98369,98370,98375,98399,98404],{"__ignoreMap":236},[240,98371,98372],{"class":242,"line":243},[240,98373,98374],{"class":246},"#创建一个指定形状数组\n",[240,98376,98377,98379,98381,98383,98385,98387,98389,98391,98393,98395,98397],{"class":242,"line":250},[240,98378,254],{"class":257},[240,98380,440],{"class":288},[240,98382,94915],{"class":257},[240,98384,1643],{"class":264},[240,98386,2479],{"class":257},[240,98388,2426],{"class":264},[240,98390,94920],{"class":257},[240,98392,1716],{"class":264},[240,98394,2479],{"class":257},[240,98396,2520],{"class":264},[240,98398,2129],{"class":257},[240,98400,98401],{"class":242,"line":261},[240,98402,98403],{"class":246},"#进行指定填充\n",[240,98405,98406,98409,98411],{"class":242,"line":277},[240,98407,98408],{"class":257},"np.full_like(a,",[240,98410,2546],{"class":264},[240,98412,2129],{"class":257},[19,98414,13465],{},[19,98416,98417],{},[219,98418],{"alt":236,"src":98419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[32,98421,98423],{"id":98422},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[23945,98425,98427],{"id":98426},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[231,98429,98431],{"className":32324,"code":98430,"language":32326,"meta":236,"style":236},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23,98432,98433,98450],{"__ignoreMap":236},[240,98434,98435,98438,98440,98442,98444,98446,98448],{"class":242,"line":243},[240,98436,98437],{"class":257},"np.eye(",[240,98439,1716],{"class":264},[240,98441,2479],{"class":257},[240,98443,95413],{"class":792},[240,98445,440],{"class":288},[240,98447,2126],{"class":264},[240,98449,2129],{"class":257},[240,98451,98452],{"class":242,"line":250},[240,98453,98454],{"class":246},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[23945,98456,98458],{"id":98457},"_2662-法2identity","2.6.6.2 法2：identity()",[231,98460,98462],{"className":32324,"code":98461,"language":32326,"meta":236,"style":236},"#identity()\nnp.identity(5,dtype=int)\n",[23,98463,98464,98469],{"__ignoreMap":236},[240,98465,98466],{"class":242,"line":243},[240,98467,98468],{"class":246},"#identity()\n",[240,98470,98471,98474,98476,98478,98480,98482,98484],{"class":242,"line":250},[240,98472,98473],{"class":257},"np.identity(",[240,98475,1741],{"class":264},[240,98477,2479],{"class":257},[240,98479,95413],{"class":792},[240,98481,440],{"class":288},[240,98483,2126],{"class":264},[240,98485,2129],{"class":257},[19,98487,98488],{},"两个函数是有区别的",[19,98490,98491],{},[219,98492],{"alt":236,"src":98493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[19,98495,98496],{},[219,98497],{"alt":236,"src":98498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[231,98500,98502],{"className":32324,"code":98501,"language":32326,"meta":236,"style":236},"# 创建一个 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",[23,98503,98504,98509,98521,98526,98531,98536,98541,98545,98550,98570,98574,98579,98584],{"__ignoreMap":236},[240,98505,98506],{"class":242,"line":243},[240,98507,98508],{"class":246},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[240,98510,98511,98513,98515,98517,98519],{"class":242,"line":250},[240,98512,98437],{"class":257},[240,98514,1692],{"class":264},[240,98516,1277],{"class":257},[240,98518,1716],{"class":264},[240,98520,2129],{"class":257},[240,98522,98523],{"class":242,"line":261},[240,98524,98525],{"class":246},"# 输出:\n",[240,98527,98528],{"class":242,"line":277},[240,98529,98530],{"class":246},"# [[1. 0. 0. 0.]\n",[240,98532,98533],{"class":242,"line":294},[240,98534,98535],{"class":246},"#  [0. 1. 0. 0.]\n",[240,98537,98538],{"class":242,"line":309},[240,98539,98540],{"class":246},"#  [0. 0. 1. 0.]]\n",[240,98542,98543],{"class":242,"line":529},[240,98544,4353],{"emptyLinePlaceholder":2051},[240,98546,98547],{"class":242,"line":549},[240,98548,98549],{"class":246},"# 对角线向上偏移1\n",[240,98551,98552,98554,98556,98558,98560,98562,98564,98566,98568],{"class":242,"line":569},[240,98553,98437],{"class":257},[240,98555,1692],{"class":264},[240,98557,1277],{"class":257},[240,98559,1716],{"class":264},[240,98561,1277],{"class":257},[240,98563,2592],{"class":792},[240,98565,440],{"class":288},[240,98567,1643],{"class":264},[240,98569,2129],{"class":257},[240,98571,98572],{"class":242,"line":589},[240,98573,98525],{"class":246},[240,98575,98576],{"class":242,"line":715},[240,98577,98578],{"class":246},"# [[0. 1. 0. 0.]\n",[240,98580,98581],{"class":242,"line":727},[240,98582,98583],{"class":246},"#  [0. 0. 1. 0.]\n",[240,98585,98586],{"class":242,"line":1730},[240,98587,98588],{"class":246},"#  [0. 0. 0. 1.]]\n",[32,98590,98592],{"id":98591},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[231,98594,98596],{"className":32324,"code":98595,"language":32326,"meta":236,"style":236},"#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",[23,98597,98598,98603,98607,98612,98617,98622,98627,98632,98637,98642,98647],{"__ignoreMap":236},[240,98599,98600],{"class":242,"line":243},[240,98601,98602],{"class":246},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[240,98604,98605],{"class":242,"line":250},[240,98606,97611],{"class":443},[240,98608,98609],{"class":242,"line":261},[240,98610,98611],{"class":443},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[240,98613,98614],{"class":242,"line":277},[240,98615,98616],{"class":443},"参数介绍：\n",[240,98618,98619],{"class":242,"line":294},[240,98620,98621],{"class":443},"start：序列的起始值\n",[240,98623,98624],{"class":242,"line":309},[240,98625,98626],{"class":443},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[240,98628,98629],{"class":242,"line":529},[240,98630,98631],{"class":443},"num：要生长的等步长的样本数量，默认为50\n",[240,98633,98634],{"class":242,"line":549},[240,98635,98636],{"class":443},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[240,98638,98639],{"class":242,"line":569},[240,98640,98641],{"class":443},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[240,98643,98644],{"class":242,"line":589},[240,98645,98646],{"class":443},"dtype：ndarry的数据类型\n",[240,98648,98649],{"class":242,"line":715},[240,98650,97611],{"class":443},[19,98652,98653],{},[219,98654],{"alt":236,"src":98655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[19,98657,98658],{},"这里num=是可以省略的",[19,98660,98661],{},"也就是下方两行代码结果是一模一样的",[231,98663,98665],{"className":32324,"code":98664,"language":32326,"meta":236,"style":236},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[23,98666,98667,98684],{"__ignoreMap":236},[240,98668,98669,98672,98674,98676,98678,98680,98682],{"class":242,"line":243},[240,98670,98671],{"class":257},"np.linspace(",[240,98673,1643],{"class":264},[240,98675,2479],{"class":257},[240,98677,1741],{"class":264},[240,98679,2479],{"class":257},[240,98681,1741],{"class":264},[240,98683,2129],{"class":257},[240,98685,98686,98688,98690,98692,98694,98696,98698,98700,98702],{"class":242,"line":250},[240,98687,98671],{"class":257},[240,98689,1643],{"class":264},[240,98691,2479],{"class":257},[240,98693,1741],{"class":264},[240,98695,2479],{"class":257},[240,98697,3619],{"class":792},[240,98699,440],{"class":288},[240,98701,1741],{"class":264},[240,98703,2129],{"class":257},[32,98705,98707],{"id":98706},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[231,98709,98711],{"className":32324,"code":98710,"language":32326,"meta":236,"style":236},"#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",[23,98712,98713,98718,98722,98727,98732,98737,98742,98746,98751,98756,98760],{"__ignoreMap":236},[240,98714,98715],{"class":242,"line":243},[240,98716,98717],{"class":246},"#logspace函数用于创建一个等比数列，格式如下：\n",[240,98719,98720],{"class":242,"line":250},[240,98721,97611],{"class":443},[240,98723,98724],{"class":242,"line":261},[240,98725,98726],{"class":443},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[240,98728,98729],{"class":242,"line":277},[240,98730,98731],{"class":443},"参数为：\n",[240,98733,98734],{"class":242,"line":294},[240,98735,98736],{"class":443},"start:序列的起始位置为：base**start\n",[240,98738,98739],{"class":242,"line":309},[240,98740,98741],{"class":443},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[240,98743,98744],{"class":242,"line":529},[240,98745,98631],{"class":443},[240,98747,98748],{"class":242,"line":549},[240,98749,98750],{"class":443},"endpoint：是否包含 stop 这个值，默认是 True\n",[240,98752,98753],{"class":242,"line":569},[240,98754,98755],{"class":443},"base：对数的底数，默认是 10（常见对数）\n",[240,98757,98758],{"class":242,"line":589},[240,98759,98646],{"class":443},[240,98761,98762],{"class":242,"line":715},[240,98763,97611],{"class":443},[19,98765,98766],{},[219,98767],{"alt":236,"src":98768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[19,98770,98771],{},"logspace()函数中的num参数也是可以不写num=的",[19,98773,98774],{},"endpoint是不可以省略的",[2019,98776,98777],{},"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":236,"searchDepth":250,"depth":250,"links":98779},[98780,98784,98789,98793,98797,98798],{"id":97169,"depth":250,"text":97170,"children":98781},[98782,98783],{"id":97173,"depth":261,"text":97174},{"id":97246,"depth":261,"text":97247},{"id":97278,"depth":250,"text":97279,"children":98785},[98786,98787,98788],{"id":97282,"depth":261,"text":97283},{"id":97464,"depth":261,"text":97465},{"id":97542,"depth":261,"text":97543},{"id":97577,"depth":250,"text":97578,"children":98790},[98791,98792],{"id":97581,"depth":261,"text":97582},{"id":97638,"depth":261,"text":97639},{"id":97734,"depth":250,"text":97735,"children":98794},[98795,98796],{"id":97738,"depth":261,"text":97739},{"id":97750,"depth":261,"text":97751},{"id":97784,"depth":250,"text":97785},{"id":97821,"depth":250,"text":97822,"children":98799},[98800,98801,98802,98803,98804,98805,98806,98807],{"id":97825,"depth":261,"text":97826},{"id":98050,"depth":261,"text":98051},{"id":98057,"depth":261,"text":98058},{"id":98266,"depth":261,"text":98267},{"id":98286,"depth":261,"text":98287},{"id":98422,"depth":261,"text":98423},{"id":98591,"depth":261,"text":98592},{"id":98706,"depth":261,"text":98707},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":97161,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":98814,"title":98815,"body":98816,"description":2048,"extension":2049,"meta":98909,"navigation":2051,"path":98910,"seo":98911,"stem":98912,"__hash__":98913},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":98817,"toc":98907},[98818,98821,98824,98827,98830,98833,98836,98839,98842,98845,98848,98851,98853,98856,98859,98864,98867,98870,98904],[10,98819,98815],{"id":98820},"_20魔法命令mprun",[19,98822,98823],{},"逐行分析数据内存的使用情况",[19,98825,98826],{},"语法格式：",[19,98828,98829],{},"%mprun -f 模块名.函数名 模块名.函数名()",[19,98831,98832],{},"分析结果列如下：",[19,98834,98835],{},"Line行号",[19,98837,98838],{},"Mem usage内存使用大小",[19,98840,98841],{},"increment内存增量",[19,98843,98844],{},"Line content代码内容",[19,98846,98847],{},"补充说明：",[19,98849,98850],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[19,98852,97116],{},[19,98854,98855],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[19,98857,98858],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[19,98860,98861],{},[219,98862],{"alt":236,"src":98863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[19,98865,98866],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[19,98868,98869],{},"这时候需要重新加载模块",[231,98871,98873],{"className":32324,"code":98872,"language":32326,"meta":236,"style":236},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[23,98874,98875,98880,98887,98892],{"__ignoreMap":236},[240,98876,98877],{"class":242,"line":243},[240,98878,98879],{"class":246},"#重新加载模块\n",[240,98881,98882,98884],{"class":242,"line":250},[240,98883,32338],{"class":288},[240,98885,98886],{"class":257}," importlib\n",[240,98888,98889],{"class":242,"line":261},[240,98890,98891],{"class":257},"importlib.reload(mprun_test)\n",[240,98893,98894,98896,98899,98901],{"class":242,"line":277},[240,98895,2429],{"class":288},[240,98897,98898],{"class":257},"mprun ",[240,98900,2631],{"class":288},[240,98902,98903],{"class":257},"f mprun_test.fun_test mprun_test.fun_test()\n",[2019,98905,98906],{},"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":236,"searchDepth":250,"depth":250,"links":98908},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":98815,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":98915,"title":98916,"body":98917,"description":2048,"extension":2049,"meta":98934,"navigation":2051,"path":98935,"seo":98936,"stem":98937,"__hash__":98938},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":98918,"toc":98932},[98919,98922,98927],[10,98920,98916],{"id":98921},"_3一维数组的索引和切片",[19,98923,98924],{},[219,98925],{"alt":236,"src":98926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[19,98928,98929],{},[219,98930],{"alt":236,"src":98931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":236,"searchDepth":250,"depth":250,"links":98933},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":98916,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":98940,"title":98941,"body":98942,"description":2048,"extension":2049,"meta":99425,"navigation":2051,"path":99426,"seo":99427,"stem":99428,"__hash__":99429},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":98943,"toc":99423},[98944,98947,98950,98955,98988,98991,99029,99032,99066,99069,99174,99177,99214,99217,99318,99321,99372,99375,99417,99420],[10,98945,98941],{"id":98946},"_4二维数组的索引与切片",[19,98948,98949],{},"①获取指定单个元素",[19,98951,98952],{},[219,98953],{"alt":236,"src":98954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[231,98956,98958],{"className":32324,"code":98957,"language":32326,"meta":236,"style":236},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[23,98959,98960,98965,98970,98975],{"__ignoreMap":236},[240,98961,98962],{"class":242,"line":243},[240,98963,98964],{"class":246},"#获取元素9\n",[240,98966,98967],{"class":242,"line":250},[240,98968,98969],{"class":246},"#先获取所在行，再获取所在列\n",[240,98971,98972],{"class":242,"line":261},[240,98973,98974],{"class":246},"#数组[行索引号，列索引号]\n",[240,98976,98977,98980,98982,98984,98986],{"class":242,"line":277},[240,98978,98979],{"class":257},"a[",[240,98981,1643],{"class":264},[240,98983,2479],{"class":257},[240,98985,1668],{"class":264},[240,98987,35192],{"class":257},[19,98989,98990],{},"②获取整行元素",[231,98992,98994],{"className":32324,"code":98993,"language":32326,"meta":236,"style":236},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[23,98995,98996,99001,99006,99014,99019],{"__ignoreMap":236},[240,98997,98998],{"class":242,"line":243},[240,98999,99000],{"class":246},"#获取整行 数组[行索引号]\n",[240,99002,99003],{"class":242,"line":250},[240,99004,99005],{"class":246},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[240,99007,99008,99010,99012],{"class":242,"line":261},[240,99009,98979],{"class":257},[240,99011,1668],{"class":264},[240,99013,35192],{"class":257},[240,99015,99016],{"class":242,"line":277},[240,99017,99018],{"class":246},"#也可以负索引获取一行\n",[240,99020,99021,99023,99025,99027],{"class":242,"line":294},[240,99022,98979],{"class":257},[240,99024,2631],{"class":288},[240,99026,1643],{"class":264},[240,99028,35192],{"class":257},[19,99030,99031],{},"③获取整列元素",[231,99033,99035],{"className":32324,"code":99034,"language":32326,"meta":236,"style":236},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[23,99036,99037,99042,99051,99056],{"__ignoreMap":236},[240,99038,99039],{"class":242,"line":243},[240,99040,99041],{"class":246},"#获取整列 数组名[:,列索引]\n",[240,99043,99044,99047,99049],{"class":242,"line":250},[240,99045,99046],{"class":257},"a[:,",[240,99048,1668],{"class":264},[240,99050,35192],{"class":257},[240,99052,99053],{"class":242,"line":261},[240,99054,99055],{"class":246},"#也可以负索引获取一列\n",[240,99057,99058,99060,99062,99064],{"class":242,"line":277},[240,99059,99046],{"class":257},[240,99061,2631],{"class":288},[240,99063,1643],{"class":264},[240,99065,35192],{"class":257},[19,99067,99068],{},"④部分行部分列的元素",[231,99070,99072],{"className":32324,"code":99071,"language":32326,"meta":236,"style":236},"#部分行部分列 数组名[行切片，列切片]\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",[23,99073,99074,99079,99089,99093,99097,99102,99107,99111,99123,99127,99131,99136,99141,99146,99151,99155,99160],{"__ignoreMap":236},[240,99075,99076],{"class":242,"line":243},[240,99077,99078],{"class":246},"#部分行部分列 数组名[行切片，列切片]\n",[240,99080,99081,99084,99086],{"class":242,"line":250},[240,99082,99083],{"class":257},"a[:",[240,99085,1668],{"class":264},[240,99087,99088],{"class":257},",:]\n",[240,99090,99091],{"class":242,"line":261},[240,99092,95477],{"class":246},[240,99094,99095],{"class":242,"line":277},[240,99096,95841],{"class":443},[240,99098,99099],{"class":242,"line":294},[240,99100,99101],{"class":443},"array([[ 1,  2,  3,  4,  5,  6],\n",[240,99103,99104],{"class":242,"line":309},[240,99105,99106],{"class":443},"       [ 7,  8,  9, 10, 11, 12]])\n",[240,99108,99109],{"class":242,"line":529},[240,99110,95841],{"class":443},[240,99112,99113,99115,99117,99119,99121],{"class":242,"line":549},[240,99114,99046],{"class":257},[240,99116,1643],{"class":264},[240,99118,2954],{"class":257},[240,99120,1716],{"class":264},[240,99122,35192],{"class":257},[240,99124,99125],{"class":242,"line":569},[240,99126,95477],{"class":246},[240,99128,99129],{"class":242,"line":589},[240,99130,95841],{"class":443},[240,99132,99133],{"class":242,"line":715},[240,99134,99135],{"class":443},"array([[ 2,  3,  4],\n",[240,99137,99138],{"class":242,"line":727},[240,99139,99140],{"class":443},"       [ 8,  9, 10],\n",[240,99142,99143],{"class":242,"line":1730},[240,99144,99145],{"class":443},"       [14, 15, 16],\n",[240,99147,99148],{"class":242,"line":3582},[240,99149,99150],{"class":443},"       [20, 21, 22]])\n",[240,99152,99153],{"class":242,"line":3596},[240,99154,95841],{"class":443},[240,99156,99157],{"class":242,"line":3601},[240,99158,99159],{"class":246},"#对列行同时进行切片，使用了step参数\n",[240,99161,99162,99165,99167,99170,99172],{"class":242,"line":3607},[240,99163,99164],{"class":257},"a[::",[240,99166,1668],{"class":264},[240,99168,99169],{"class":257},",::",[240,99171,1668],{"class":264},[240,99173,35192],{"class":257},[19,99175,99176],{},"⑤同时获取两个元素",[231,99178,99180],{"className":32324,"code":99179,"language":32326,"meta":236,"style":236},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[23,99181,99182,99187,99192],{"__ignoreMap":236},[240,99183,99184],{"class":242,"line":243},[240,99185,99186],{"class":246},"#同时获取第三行第二列，第四行第一列\n",[240,99188,99189],{"class":242,"line":250},[240,99190,99191],{"class":246},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[240,99193,99194,99197,99199,99201,99203,99205,99207,99209,99211],{"class":242,"line":261},[240,99195,99196],{"class":257},"a[(",[240,99198,1668],{"class":264},[240,99200,2479],{"class":257},[240,99202,1692],{"class":264},[240,99204,44193],{"class":257},[240,99206,1643],{"class":264},[240,99208,2479],{"class":257},[240,99210,1274],{"class":264},[240,99212,99213],{"class":257},")]\n",[19,99215,99216],{},"⑥切片，对行进行反向获取",[231,99218,99220],{"className":32324,"code":99219,"language":32326,"meta":236,"style":236},"#切片 对所有行进行反向获取\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",[23,99221,99222,99227,99237,99241,99245,99250,99255,99260,99265,99269,99274,99290,99294,99299,99304,99309,99314],{"__ignoreMap":236},[240,99223,99224],{"class":242,"line":243},[240,99225,99226],{"class":246},"#切片 对所有行进行反向获取\n",[240,99228,99229,99231,99233,99235],{"class":242,"line":250},[240,99230,99164],{"class":257},[240,99232,2631],{"class":288},[240,99234,1643],{"class":264},[240,99236,35192],{"class":257},[240,99238,99239],{"class":242,"line":261},[240,99240,95477],{"class":246},[240,99242,99243],{"class":242,"line":277},[240,99244,95841],{"class":443},[240,99246,99247],{"class":242,"line":294},[240,99248,99249],{"class":443},"array([[19, 20, 21, 22, 23, 24],\n",[240,99251,99252],{"class":242,"line":309},[240,99253,99254],{"class":443},"       [13, 14, 15, 16, 17, 18],\n",[240,99256,99257],{"class":242,"line":529},[240,99258,99259],{"class":443},"       [ 7,  8,  9, 10, 11, 12],\n",[240,99261,99262],{"class":242,"line":549},[240,99263,99264],{"class":443},"       [ 1,  2,  3,  4,  5,  6]])\n",[240,99266,99267],{"class":242,"line":569},[240,99268,95841],{"class":443},[240,99270,99271],{"class":242,"line":589},[240,99272,99273],{"class":246},"#对行列都进行反向切片获取\n",[240,99275,99276,99278,99280,99282,99284,99286,99288],{"class":242,"line":715},[240,99277,99164],{"class":257},[240,99279,2631],{"class":288},[240,99281,1643],{"class":264},[240,99283,99169],{"class":257},[240,99285,2631],{"class":288},[240,99287,1643],{"class":264},[240,99289,35192],{"class":257},[240,99291,99292],{"class":242,"line":727},[240,99293,95841],{"class":443},[240,99295,99296],{"class":242,"line":1730},[240,99297,99298],{"class":443},"array([[24, 23, 22, 21, 20, 19],\n",[240,99300,99301],{"class":242,"line":3582},[240,99302,99303],{"class":443},"       [18, 17, 16, 15, 14, 13],\n",[240,99305,99306],{"class":242,"line":3596},[240,99307,99308],{"class":443},"       [12, 11, 10,  9,  8,  7],\n",[240,99310,99311],{"class":242,"line":3601},[240,99312,99313],{"class":443},"       [ 6,  5,  4,  3,  2,  1]])\n",[240,99315,99316],{"class":242,"line":3607},[240,99317,95841],{"class":443},[19,99319,99320],{},"⑦修改元素",[231,99322,99324],{"className":32324,"code":99323,"language":32326,"meta":236,"style":236},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[23,99325,99326,99331,99349,99354],{"__ignoreMap":236},[240,99327,99328],{"class":242,"line":243},[240,99329,99330],{"class":246},"#获取前两行和前两列\n",[240,99332,99333,99336,99338,99340,99342,99345,99347],{"class":242,"line":250},[240,99334,99335],{"class":257},"sub_a",[240,99337,440],{"class":288},[240,99339,99083],{"class":257},[240,99341,1668],{"class":264},[240,99343,99344],{"class":257},",:",[240,99346,1668],{"class":264},[240,99348,35192],{"class":257},[240,99350,99351],{"class":242,"line":261},[240,99352,99353],{"class":246},"#修改sub_a第一个元素的值\n",[240,99355,99356,99359,99361,99363,99365,99367,99369],{"class":242,"line":277},[240,99357,99358],{"class":257},"sub_a[",[240,99360,1274],{"class":264},[240,99362,2479],{"class":257},[240,99364,1274],{"class":264},[240,99366,3034],{"class":257},[240,99368,440],{"class":288},[240,99370,99371],{"class":264},"100\n",[19,99373,99374],{},"⑧数组复制copy()",[231,99376,99378],{"className":32324,"code":99377,"language":32326,"meta":236,"style":236},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[23,99379,99380,99385,99395,99400],{"__ignoreMap":236},[240,99381,99382],{"class":242,"line":243},[240,99383,99384],{"class":246},"#数组复制\n",[240,99386,99387,99390,99392],{"class":242,"line":250},[240,99388,99389],{"class":257},"copy_a",[240,99391,440],{"class":288},[240,99393,99394],{"class":257},"np.copy(sub_a)\n",[240,99396,99397],{"class":242,"line":261},[240,99398,99399],{"class":246},"#修改copy_a后不影响原数组\n",[240,99401,99402,99405,99407,99409,99411,99413,99415],{"class":242,"line":277},[240,99403,99404],{"class":257},"copy_a[",[240,99406,1274],{"class":264},[240,99408,2479],{"class":257},[240,99410,1274],{"class":264},[240,99412,3034],{"class":257},[240,99414,440],{"class":288},[240,99416,99371],{"class":264},[19,99418,99419],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[2019,99421,99422],{},"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":236,"searchDepth":250,"depth":250,"links":99424},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":98941,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":99431,"title":99432,"body":99433,"description":2048,"extension":2049,"meta":99925,"navigation":2051,"path":99926,"seo":99927,"stem":99928,"__hash__":99929},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":99434,"toc":99917},[99435,99438,99442,99445,99448,99501,99504,99529,99532,99551,99571,99574,99590,99594,99640,99644,99686,99690,99693,99696,99699,99702,99705,99767,99827,99831,99834,99891,99895,99900,99909,99914],[10,99436,99432],{"id":99437},"_5改变数组的维度",[14,99439,99441],{"id":99440},"_51-使用reshape","5.1 使用reshape()",[19,99443,99444],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[19,99446,99447],{},"①一维数组转换为二维数组",[231,99449,99451],{"className":32324,"code":99450,"language":32326,"meta":236,"style":236},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[23,99452,99453,99469,99474,99479,99484],{"__ignoreMap":236},[240,99454,99455,99457,99459,99461,99463,99465,99467],{"class":242,"line":243},[240,99456,254],{"class":257},[240,99458,440],{"class":288},[240,99460,94915],{"class":257},[240,99462,1643],{"class":264},[240,99464,2479],{"class":257},[240,99466,2622],{"class":264},[240,99468,2129],{"class":257},[240,99470,99471],{"class":242,"line":250},[240,99472,99473],{"class":246},"#将一维数组进行转换\n",[240,99475,99476],{"class":242,"line":261},[240,99477,99478],{"class":246},"#注意点：元素个数不可以变\n",[240,99480,99481],{"class":242,"line":277},[240,99482,99483],{"class":246},"#转换维度要保持一致，不一致就异常！！！\n",[240,99485,99486,99488,99490,99493,99495,99497,99499],{"class":242,"line":294},[240,99487,95219],{"class":257},[240,99489,440],{"class":288},[240,99491,99492],{"class":257},"a.reshape(",[240,99494,1668],{"class":264},[240,99496,2479],{"class":257},[240,99498,2445],{"class":264},[240,99500,2129],{"class":257},[19,99502,99503],{},"②一维数组转换为三维数组",[231,99505,99507],{"className":32324,"code":99506,"language":32326,"meta":236,"style":236},"aaa=a.reshape(2,3,2)\n",[23,99508,99509],{"__ignoreMap":236},[240,99510,99511,99513,99515,99517,99519,99521,99523,99525,99527],{"class":242,"line":243},[240,99512,97434],{"class":257},[240,99514,440],{"class":288},[240,99516,99492],{"class":257},[240,99518,1668],{"class":264},[240,99520,2479],{"class":257},[240,99522,1692],{"class":264},[240,99524,2479],{"class":257},[240,99526,1668],{"class":264},[240,99528,2129],{"class":257},[19,99530,99531],{},"③二维数组转化为一维数组",[231,99533,99535],{"className":32324,"code":99534,"language":32326,"meta":236,"style":236},"#知道元素个数：\naa.reshape(12)\n",[23,99536,99537,99542],{"__ignoreMap":236},[240,99538,99539],{"class":242,"line":243},[240,99540,99541],{"class":246},"#知道元素个数：\n",[240,99543,99544,99547,99549],{"class":242,"line":250},[240,99545,99546],{"class":257},"aa.reshape(",[240,99548,2597],{"class":264},[240,99550,2129],{"class":257},[231,99552,99554],{"className":32324,"code":99553,"language":32326,"meta":236,"style":236},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[23,99555,99556,99561],{"__ignoreMap":236},[240,99557,99558],{"class":242,"line":243},[240,99559,99560],{"class":246},"#不知道元素个数，参数传递-1\n",[240,99562,99563,99565,99567,99569],{"class":242,"line":250},[240,99564,99546],{"class":257},[240,99566,2631],{"class":288},[240,99568,1643],{"class":264},[240,99570,2129],{"class":257},[19,99572,99573],{},"④三维数组转换为一维数组",[231,99575,99577],{"className":32324,"code":99576,"language":32326,"meta":236,"style":236},"aaa.reshape(-1)\n",[23,99578,99579],{"__ignoreMap":236},[240,99580,99581,99584,99586,99588],{"class":242,"line":243},[240,99582,99583],{"class":257},"aaa.reshape(",[240,99585,2631],{"class":288},[240,99587,1643],{"class":264},[240,99589,2129],{"class":257},[14,99591,99593],{"id":99592},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[231,99595,99597],{"className":32324,"code":99596,"language":32326,"meta":236,"style":236},"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",[23,99598,99599,99626,99631,99635],{"__ignoreMap":236},[240,99600,99601,99603,99605,99607,99609,99611,99613,99615,99617,99619,99621,99623],{"class":242,"line":243},[240,99602,95219],{"class":257},[240,99604,440],{"class":288},[240,99606,94915],{"class":257},[240,99608,1643],{"class":264},[240,99610,2479],{"class":257},[240,99612,2622],{"class":264},[240,99614,94920],{"class":257},[240,99616,1668],{"class":264},[240,99618,2479],{"class":257},[240,99620,2445],{"class":264},[240,99622,2529],{"class":257},[240,99624,99625],{"class":246},"#转换为2行6列的数组\n",[240,99627,99628],{"class":242,"line":250},[240,99629,99630],{"class":257},"aa.revel()\n",[240,99632,99633],{"class":242,"line":261},[240,99634,95477],{"class":246},[240,99636,99637],{"class":242,"line":277},[240,99638,99639],{"class":246},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[14,99641,99643],{"id":99642},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[231,99645,99647],{"className":32324,"code":99646,"language":32326,"meta":236,"style":236},"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",[23,99648,99649,99673,99678,99682],{"__ignoreMap":236},[240,99650,99651,99653,99655,99657,99659,99661,99663,99665,99667,99669,99671],{"class":242,"line":243},[240,99652,95219],{"class":257},[240,99654,440],{"class":288},[240,99656,94915],{"class":257},[240,99658,1643],{"class":264},[240,99660,2479],{"class":257},[240,99662,2622],{"class":264},[240,99664,94920],{"class":257},[240,99666,1668],{"class":264},[240,99668,2479],{"class":257},[240,99670,2445],{"class":264},[240,99672,2129],{"class":257},[240,99674,99675],{"class":242,"line":250},[240,99676,99677],{"class":257},"aa.flatten()\n",[240,99679,99680],{"class":242,"line":261},[240,99681,95477],{"class":246},[240,99683,99684],{"class":242,"line":277},[240,99685,99639],{"class":246},[14,99687,99689],{"id":99688},"_54-使用resize","5.4 使用resize()",[19,99691,99692],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[19,99694,99695],{},"通过resize方法可以改变数组的维度",[19,99697,99698],{},"#resize修改数组维度",[19,99700,99701],{},"#以元组的形式指定形状",[19,99703,99704],{},"#改变的是原数组",[231,99706,99708],{"className":32324,"code":99707,"language":32326,"meta":236,"style":236},"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",[23,99709,99710,99726,99746,99759,99763],{"__ignoreMap":236},[240,99711,99712,99714,99716,99718,99720,99722,99724],{"class":242,"line":243},[240,99713,254],{"class":257},[240,99715,440],{"class":288},[240,99717,94915],{"class":257},[240,99719,1643],{"class":264},[240,99721,2479],{"class":257},[240,99723,2622],{"class":264},[240,99725,2129],{"class":257},[240,99727,99728,99731,99733,99735,99737,99739,99741,99743],{"class":242,"line":250},[240,99729,99730],{"class":257},"a.shape",[240,99732,440],{"class":288},[240,99734,789],{"class":257},[240,99736,1668],{"class":264},[240,99738,2479],{"class":257},[240,99740,2445],{"class":264},[240,99742,2529],{"class":257},[240,99744,99745],{"class":246},"#改变了原数组\n",[240,99747,99748,99750,99752,99755,99757],{"class":242,"line":261},[240,99749,254],{"class":257},[240,99751,440],{"class":288},[240,99753,99754],{"class":257},"resize((",[240,99756,2597],{"class":264},[240,99758,32443],{"class":257},[240,99760,99761],{"class":242,"line":277},[240,99762,95477],{"class":246},[240,99764,99765],{"class":242,"line":294},[240,99766,99639],{"class":246},[231,99768,99770],{"className":32324,"code":99769,"language":32326,"meta":236,"style":236},"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",[23,99771,99772,99785,99789,99793,99798,99803,99808,99813,99818,99823],{"__ignoreMap":236},[240,99773,99774,99777,99779,99781,99783],{"class":242,"line":243},[240,99775,99776],{"class":257},"a.resize((",[240,99778,2445],{"class":264},[240,99780,2479],{"class":257},[240,99782,1668],{"class":264},[240,99784,32443],{"class":257},[240,99786,99787],{"class":242,"line":250},[240,99788,95477],{"class":246},[240,99790,99791],{"class":242,"line":261},[240,99792,95841],{"class":443},[240,99794,99795],{"class":242,"line":277},[240,99796,99797],{"class":443},"array([[ 1,  2],\n",[240,99799,99800],{"class":242,"line":294},[240,99801,99802],{"class":443},"       [ 3,  4],\n",[240,99804,99805],{"class":242,"line":309},[240,99806,99807],{"class":443},"       [ 5,  6],\n",[240,99809,99810],{"class":242,"line":529},[240,99811,99812],{"class":443},"       [ 7,  8],\n",[240,99814,99815],{"class":242,"line":549},[240,99816,99817],{"class":443},"       [ 9, 10],\n",[240,99819,99820],{"class":242,"line":569},[240,99821,99822],{"class":443},"       [11, 12]])\n",[240,99824,99825],{"class":242,"line":589},[240,99826,95841],{"class":443},[14,99828,99830],{"id":99829},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[19,99832,99833],{},"改变了原数组",[231,99835,99837],{"className":32324,"code":99836,"language":32326,"meta":236,"style":236},"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",[23,99838,99839,99855,99871,99875,99879,99883,99887],{"__ignoreMap":236},[240,99840,99841,99843,99845,99847,99849,99851,99853],{"class":242,"line":243},[240,99842,254],{"class":257},[240,99844,440],{"class":288},[240,99846,94915],{"class":257},[240,99848,1643],{"class":264},[240,99850,2479],{"class":257},[240,99852,2622],{"class":264},[240,99854,2129],{"class":257},[240,99856,99857,99859,99861,99863,99865,99867,99869],{"class":242,"line":250},[240,99858,99730],{"class":257},[240,99860,440],{"class":288},[240,99862,789],{"class":257},[240,99864,1668],{"class":264},[240,99866,2479],{"class":257},[240,99868,2445],{"class":264},[240,99870,2129],{"class":257},[240,99872,99873],{"class":242,"line":261},[240,99874,95477],{"class":246},[240,99876,99877],{"class":242,"line":277},[240,99878,95841],{"class":443},[240,99880,99881],{"class":242,"line":294},[240,99882,99101],{"class":443},[240,99884,99885],{"class":242,"line":309},[240,99886,99106],{"class":443},[240,99888,99889],{"class":242,"line":529},[240,99890,95841],{"class":443},[14,99892,99894],{"id":99893},"_56-重要比较","5.6 重要比较：",[19,99896,99897],{},[219,99898],{"alt":236,"src":99899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[19,99901,99902,99903,99905,99906,99908],{},"口诀：NumPy 函数要么用 ",[23,99904,97876],{},"，要么用 ",[23,99907,33442],{},"，创建结构用 shape，造数据用 size",[19,99910,99911],{},[219,99912],{"alt":236,"src":99913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[2019,99915,99916],{},"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":236,"searchDepth":250,"depth":250,"links":99918},[99919,99920,99921,99922,99923,99924],{"id":99440,"depth":250,"text":99441},{"id":99592,"depth":250,"text":99593},{"id":99642,"depth":250,"text":99643},{"id":99688,"depth":250,"text":99689},{"id":99829,"depth":250,"text":99830},{"id":99893,"depth":250,"text":99894},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":99432,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":99931,"title":99932,"body":99933,"description":2048,"extension":2049,"meta":101005,"navigation":2051,"path":101006,"seo":101007,"stem":101008,"__hash__":101009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":99934,"toc":100999},[99935,99938,99942,99945,99948,99951,100016,100019,100059,100062,100144,100147,100152,100174,100176,100181,100186,100189,100192,100347,100350,100552,100556,100559,100562,100630,100632,100637,100640,100643,100723,100727,100730,100732,100805,100807,100812,100814,100894,100898,100901,100904,100907,100910,100913,100916,100996],[10,99936,99932],{"id":99937},"_6数组的拼接",[14,99939,99941],{"id":99940},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[19,99943,99944],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[19,99946,99947],{},"函数内部传两个数列构成的数列或者元组",[19,99949,99950],{},"①一维数组的拼接",[231,99952,99954],{"className":32324,"code":99953,"language":32326,"meta":236,"style":236},"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",[23,99955,99956,99976,99996,100001,100006,100011],{"__ignoreMap":236},[240,99957,99958,99960,99962,99964,99966,99968,99970,99972,99974],{"class":242,"line":243},[240,99959,254],{"class":257},[240,99961,440],{"class":288},[240,99963,94937],{"class":257},[240,99965,1643],{"class":264},[240,99967,2479],{"class":257},[240,99969,1668],{"class":264},[240,99971,2479],{"class":257},[240,99973,1692],{"class":264},[240,99975,6609],{"class":257},[240,99977,99978,99980,99982,99984,99986,99988,99990,99992,99994],{"class":242,"line":250},[240,99979,2367],{"class":257},[240,99981,440],{"class":288},[240,99983,94937],{"class":257},[240,99985,1716],{"class":264},[240,99987,2479],{"class":257},[240,99989,1741],{"class":264},[240,99991,2479],{"class":257},[240,99993,2445],{"class":264},[240,99995,6609],{"class":257},[240,99997,99998],{"class":242,"line":261},[240,99999,100000],{"class":246},"#调用concatenate进行数组拼接\n",[240,100002,100003],{"class":242,"line":277},[240,100004,100005],{"class":257},"np.concatenate((a,b))\n",[240,100007,100008],{"class":242,"line":294},[240,100009,100010],{"class":246},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[240,100012,100013],{"class":242,"line":309},[240,100014,100015],{"class":246},"#np.concatenate([a,b])\n",[19,100017,100018],{},"②一维多个数组拼接",[231,100020,100022],{"className":32324,"code":100021,"language":32326,"meta":236,"style":236},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[23,100023,100024,100029,100049,100054],{"__ignoreMap":236},[240,100025,100026],{"class":242,"line":243},[240,100027,100028],{"class":246},"#也可以多个数组进行拼接\n",[240,100030,100031,100033,100035,100037,100039,100041,100043,100045,100047],{"class":242,"line":250},[240,100032,2392],{"class":257},[240,100034,440],{"class":288},[240,100036,94937],{"class":257},[240,100038,2546],{"class":264},[240,100040,2479],{"class":257},[240,100042,2571],{"class":264},[240,100044,2479],{"class":257},[240,100046,2622],{"class":264},[240,100048,6609],{"class":257},[240,100050,100051],{"class":242,"line":261},[240,100052,100053],{"class":257},"c\n",[240,100055,100056],{"class":242,"line":277},[240,100057,100058],{"class":257},"np.concatenate((a,b,c))\n",[19,100060,100061],{},"③二维数组拼接",[231,100063,100065],{"className":32324,"code":100064,"language":32326,"meta":236,"style":236},"#二维数组使用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",[23,100066,100067,100072,100096,100121,100126,100131],{"__ignoreMap":236},[240,100068,100069],{"class":242,"line":243},[240,100070,100071],{"class":246},"#二维数组使用concatenate进行拼接\n",[240,100073,100074,100076,100078,100080,100082,100084,100086,100088,100090,100092,100094],{"class":242,"line":250},[240,100075,95219],{"class":257},[240,100077,440],{"class":288},[240,100079,94915],{"class":257},[240,100081,1643],{"class":264},[240,100083,2479],{"class":257},[240,100085,2622],{"class":264},[240,100087,94920],{"class":257},[240,100089,1692],{"class":264},[240,100091,2479],{"class":257},[240,100093,1716],{"class":264},[240,100095,2129],{"class":257},[240,100097,100098,100101,100103,100105,100107,100109,100111,100113,100115,100117,100119],{"class":242,"line":261},[240,100099,100100],{"class":257},"bb",[240,100102,440],{"class":288},[240,100104,94915],{"class":257},[240,100106,2438],{"class":264},[240,100108,2479],{"class":257},[240,100110,2740],{"class":264},[240,100112,94920],{"class":257},[240,100114,1692],{"class":264},[240,100116,2479],{"class":257},[240,100118,1716],{"class":264},[240,100120,2129],{"class":257},[240,100122,100123],{"class":242,"line":277},[240,100124,100125],{"class":246},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[240,100127,100128],{"class":242,"line":294},[240,100129,100130],{"class":246},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[240,100132,100133,100136,100138,100140,100142],{"class":242,"line":309},[240,100134,100135],{"class":257},"np.concatenate((aa,bb),",[240,100137,49460],{"class":792},[240,100139,440],{"class":288},[240,100141,1274],{"class":264},[240,100143,2129],{"class":257},[19,100145,100146],{},"结果：",[19,100148,100149],{},[219,100150],{"alt":236,"src":100151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[231,100153,100155],{"className":32324,"code":100154,"language":32326,"meta":236,"style":236},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[23,100156,100157,100162],{"__ignoreMap":236},[240,100158,100159],{"class":242,"line":243},[240,100160,100161],{"class":246},"#指定axis为1进行拼接\n",[240,100163,100164,100166,100168,100170,100172],{"class":242,"line":250},[240,100165,100135],{"class":257},[240,100167,49460],{"class":792},[240,100169,440],{"class":288},[240,100171,1643],{"class":264},[240,100173,2129],{"class":257},[19,100175,100146],{},[19,100177,100178],{},[219,100179],{"alt":236,"src":100180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[19,100182,100183],{},[68,100184,100185],{},"二维数组总结：0竖着方向，1横着方向",[19,100187,100188],{},"④三维数组拼接",[19,100190,100191],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[231,100193,100195],{"className":32324,"code":100194,"language":32326,"meta":236,"style":236},"#两个三行六列\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",[23,100196,100197,100202,100230,100260,100265,100282,100287,100292,100297,100314,100319,100324,100329,100342],{"__ignoreMap":236},[240,100198,100199],{"class":242,"line":243},[240,100200,100201],{"class":246},"#两个三行六列\n",[240,100203,100204,100206,100208,100210,100212,100214,100216,100218,100220,100222,100224,100226,100228],{"class":242,"line":250},[240,100205,97434],{"class":257},[240,100207,440],{"class":288},[240,100209,94915],{"class":257},[240,100211,1643],{"class":264},[240,100213,2479],{"class":257},[240,100215,2426],{"class":264},[240,100217,94920],{"class":257},[240,100219,1668],{"class":264},[240,100221,2479],{"class":257},[240,100223,1692],{"class":264},[240,100225,2479],{"class":257},[240,100227,2445],{"class":264},[240,100229,2129],{"class":257},[240,100231,100232,100235,100237,100239,100241,100243,100246,100248,100250,100252,100254,100256,100258],{"class":242,"line":261},[240,100233,100234],{"class":257},"bbb",[240,100236,440],{"class":288},[240,100238,94915],{"class":257},[240,100240,2438],{"class":264},[240,100242,2479],{"class":257},[240,100244,100245],{"class":264},"137",[240,100247,94920],{"class":257},[240,100249,1668],{"class":264},[240,100251,2479],{"class":257},[240,100253,1692],{"class":264},[240,100255,2479],{"class":257},[240,100257,2445],{"class":264},[240,100259,2129],{"class":257},[240,100261,100262],{"class":242,"line":277},[240,100263,100264],{"class":246},"#axis=0\n",[240,100266,100267,100269,100271,100274,100276,100278,100280],{"class":242,"line":294},[240,100268,2793],{"class":257},[240,100270,440],{"class":288},[240,100272,100273],{"class":257},"np.concatenate((aaa,bbb),",[240,100275,49460],{"class":792},[240,100277,440],{"class":288},[240,100279,1274],{"class":264},[240,100281,2129],{"class":257},[240,100283,100284],{"class":242,"line":309},[240,100285,100286],{"class":257},"s.shape\n",[240,100288,100289],{"class":242,"line":529},[240,100290,100291],{"class":246},"#输出：(4,3,6)\n",[240,100293,100294],{"class":242,"line":549},[240,100295,100296],{"class":246},"#axis=1\n",[240,100298,100299,100302,100304,100306,100308,100310,100312],{"class":242,"line":569},[240,100300,100301],{"class":257},"ss",[240,100303,440],{"class":288},[240,100305,100273],{"class":257},[240,100307,49460],{"class":792},[240,100309,440],{"class":288},[240,100311,1643],{"class":264},[240,100313,2129],{"class":257},[240,100315,100316],{"class":242,"line":589},[240,100317,100318],{"class":257},"ss.shape\n",[240,100320,100321],{"class":242,"line":715},[240,100322,100323],{"class":246},"#输出：(2,6,6)\n",[240,100325,100326],{"class":242,"line":727},[240,100327,100328],{"class":246},"#axis=2\n",[240,100330,100331,100333,100335,100337,100339],{"class":242,"line":1730},[240,100332,100273],{"class":257},[240,100334,49460],{"class":792},[240,100336,440],{"class":288},[240,100338,1668],{"class":264},[240,100340,100341],{"class":257},").shape\n",[240,100343,100344],{"class":242,"line":3582},[240,100345,100346],{"class":246},"#输出：（2，3，12）\n",[19,100348,100349],{},"⑤四维数组拼接",[231,100351,100353],{"className":32324,"code":100352,"language":32326,"meta":236,"style":236},"#两个三行六列\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",[23,100354,100355,100359,100387,100415,100440,100466,100470,100483,100488,100492,100504,100509,100513,100525,100530,100535,100547],{"__ignoreMap":236},[240,100356,100357],{"class":242,"line":243},[240,100358,100201],{"class":246},[240,100360,100361,100363,100365,100367,100369,100371,100373,100375,100377,100379,100381,100383,100385],{"class":242,"line":250},[240,100362,97434],{"class":257},[240,100364,440],{"class":288},[240,100366,94915],{"class":257},[240,100368,1643],{"class":264},[240,100370,2479],{"class":257},[240,100372,2426],{"class":264},[240,100374,94920],{"class":257},[240,100376,1668],{"class":264},[240,100378,2479],{"class":257},[240,100380,1692],{"class":264},[240,100382,2479],{"class":257},[240,100384,2445],{"class":264},[240,100386,2129],{"class":257},[240,100388,100389,100391,100393,100395,100397,100399,100401,100403,100405,100407,100409,100411,100413],{"class":242,"line":261},[240,100390,100234],{"class":257},[240,100392,440],{"class":288},[240,100394,94915],{"class":257},[240,100396,2438],{"class":264},[240,100398,2479],{"class":257},[240,100400,100245],{"class":264},[240,100402,94920],{"class":257},[240,100404,1668],{"class":264},[240,100406,2479],{"class":257},[240,100408,1692],{"class":264},[240,100410,2479],{"class":257},[240,100412,2445],{"class":264},[240,100414,2129],{"class":257},[240,100416,100417,100420,100422,100424,100426,100428,100430,100432,100434,100436,100438],{"class":242,"line":277},[240,100418,100419],{"class":257},"aaaa",[240,100421,440],{"class":288},[240,100423,99583],{"class":257},[240,100425,1668],{"class":264},[240,100427,2479],{"class":257},[240,100429,1692],{"class":264},[240,100431,2479],{"class":257},[240,100433,1692],{"class":264},[240,100435,2479],{"class":257},[240,100437,1668],{"class":264},[240,100439,2129],{"class":257},[240,100441,100442,100445,100447,100450,100452,100454,100456,100458,100460,100462,100464],{"class":242,"line":294},[240,100443,100444],{"class":257},"bbbb",[240,100446,440],{"class":288},[240,100448,100449],{"class":257},"bbb.reshape(",[240,100451,1668],{"class":264},[240,100453,2479],{"class":257},[240,100455,1692],{"class":264},[240,100457,2479],{"class":257},[240,100459,1692],{"class":264},[240,100461,2479],{"class":257},[240,100463,1668],{"class":264},[240,100465,2129],{"class":257},[240,100467,100468],{"class":242,"line":309},[240,100469,100264],{"class":246},[240,100471,100472,100475,100477,100479,100481],{"class":242,"line":529},[240,100473,100474],{"class":257},"np.concatenate((aaaa,bbbb),",[240,100476,49460],{"class":792},[240,100478,440],{"class":288},[240,100480,1274],{"class":264},[240,100482,100341],{"class":257},[240,100484,100485],{"class":242,"line":549},[240,100486,100487],{"class":246},"#结果：（4，3，3，2）\n",[240,100489,100490],{"class":242,"line":569},[240,100491,100296],{"class":246},[240,100493,100494,100496,100498,100500,100502],{"class":242,"line":589},[240,100495,100474],{"class":257},[240,100497,49460],{"class":792},[240,100499,440],{"class":288},[240,100501,1643],{"class":264},[240,100503,100341],{"class":257},[240,100505,100506],{"class":242,"line":715},[240,100507,100508],{"class":246},"#结果：（2，6，3，2）\n",[240,100510,100511],{"class":242,"line":727},[240,100512,100328],{"class":246},[240,100514,100515,100517,100519,100521,100523],{"class":242,"line":1730},[240,100516,100474],{"class":257},[240,100518,49460],{"class":792},[240,100520,440],{"class":288},[240,100522,1668],{"class":264},[240,100524,100341],{"class":257},[240,100526,100527],{"class":242,"line":3582},[240,100528,100529],{"class":246},"#结果：（2，3，6，2）\n",[240,100531,100532],{"class":242,"line":3596},[240,100533,100534],{"class":246},"#axis=3\n",[240,100536,100537,100539,100541,100543,100545],{"class":242,"line":3601},[240,100538,100474],{"class":257},[240,100540,49460],{"class":792},[240,100542,440],{"class":288},[240,100544,1692],{"class":264},[240,100546,100341],{"class":257},[240,100548,100549],{"class":242,"line":3607},[240,100550,100551],{"class":246},"#结果：（2，3，3，4）\n",[14,100553,100555],{"id":100554},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[19,100557,100558],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[19,100560,100561],{},"①二维数组",[231,100563,100565],{"className":32324,"code":100564,"language":32326,"meta":236,"style":236},"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",[23,100566,100567,100591,100615,100620,100625],{"__ignoreMap":236},[240,100568,100569,100571,100573,100575,100577,100579,100581,100583,100585,100587,100589],{"class":242,"line":243},[240,100570,95219],{"class":257},[240,100572,440],{"class":288},[240,100574,94915],{"class":257},[240,100576,1643],{"class":264},[240,100578,2479],{"class":257},[240,100580,2622],{"class":264},[240,100582,94920],{"class":257},[240,100584,1692],{"class":264},[240,100586,2479],{"class":257},[240,100588,1716],{"class":264},[240,100590,2129],{"class":257},[240,100592,100593,100595,100597,100599,100601,100603,100605,100607,100609,100611,100613],{"class":242,"line":250},[240,100594,100100],{"class":257},[240,100596,440],{"class":288},[240,100598,94915],{"class":257},[240,100600,2438],{"class":264},[240,100602,2479],{"class":257},[240,100604,2740],{"class":264},[240,100606,94920],{"class":257},[240,100608,1692],{"class":264},[240,100610,2479],{"class":257},[240,100612,1716],{"class":264},[240,100614,2129],{"class":257},[240,100616,100617],{"class":242,"line":261},[240,100618,100619],{"class":257},"np.hstack((aa,bb))\n",[240,100621,100622],{"class":242,"line":277},[240,100623,100624],{"class":246},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[240,100626,100627],{"class":242,"line":294},[240,100628,100629],{"class":246},"#np.hstack([aa,bb])\n",[19,100631,100146],{},[19,100633,100634],{},[219,100635],{"alt":236,"src":100636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[19,100638,100639],{},"等效于concatenate()函数中axis=1时的情况",[19,100641,100642],{},"②三维数组",[231,100644,100646],{"className":32324,"code":100645,"language":32326,"meta":236,"style":236},"#两个三行六列\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",[23,100647,100648,100652,100680,100708,100713,100718],{"__ignoreMap":236},[240,100649,100650],{"class":242,"line":243},[240,100651,100201],{"class":246},[240,100653,100654,100656,100658,100660,100662,100664,100666,100668,100670,100672,100674,100676,100678],{"class":242,"line":250},[240,100655,97434],{"class":257},[240,100657,440],{"class":288},[240,100659,94915],{"class":257},[240,100661,1643],{"class":264},[240,100663,2479],{"class":257},[240,100665,2426],{"class":264},[240,100667,94920],{"class":257},[240,100669,1668],{"class":264},[240,100671,2479],{"class":257},[240,100673,1692],{"class":264},[240,100675,2479],{"class":257},[240,100677,2445],{"class":264},[240,100679,2129],{"class":257},[240,100681,100682,100684,100686,100688,100690,100692,100694,100696,100698,100700,100702,100704,100706],{"class":242,"line":261},[240,100683,100234],{"class":257},[240,100685,440],{"class":288},[240,100687,94915],{"class":257},[240,100689,2438],{"class":264},[240,100691,2479],{"class":257},[240,100693,100245],{"class":264},[240,100695,94920],{"class":257},[240,100697,1668],{"class":264},[240,100699,2479],{"class":257},[240,100701,1692],{"class":264},[240,100703,2479],{"class":257},[240,100705,2445],{"class":264},[240,100707,2129],{"class":257},[240,100709,100710],{"class":242,"line":277},[240,100711,100712],{"class":246},"#使用hstack\n",[240,100714,100715],{"class":242,"line":294},[240,100716,100717],{"class":257},"np.hstack((aaa,bbb)).shape\n",[240,100719,100720],{"class":242,"line":309},[240,100721,100722],{"class":246},"#输出：（2，6，6）\n",[14,100724,100726],{"id":100725},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[19,100728,100729],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[19,100731,100561],{},[231,100733,100735],{"className":32324,"code":100734,"language":32326,"meta":236,"style":236},"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",[23,100736,100737,100761,100785,100790,100795,100800],{"__ignoreMap":236},[240,100738,100739,100741,100743,100745,100747,100749,100751,100753,100755,100757,100759],{"class":242,"line":243},[240,100740,95219],{"class":257},[240,100742,440],{"class":288},[240,100744,94915],{"class":257},[240,100746,1643],{"class":264},[240,100748,2479],{"class":257},[240,100750,2622],{"class":264},[240,100752,94920],{"class":257},[240,100754,1692],{"class":264},[240,100756,2479],{"class":257},[240,100758,1716],{"class":264},[240,100760,2129],{"class":257},[240,100762,100763,100765,100767,100769,100771,100773,100775,100777,100779,100781,100783],{"class":242,"line":250},[240,100764,100100],{"class":257},[240,100766,440],{"class":288},[240,100768,94915],{"class":257},[240,100770,2438],{"class":264},[240,100772,2479],{"class":257},[240,100774,2740],{"class":264},[240,100776,94920],{"class":257},[240,100778,1692],{"class":264},[240,100780,2479],{"class":257},[240,100782,1716],{"class":264},[240,100784,2129],{"class":257},[240,100786,100787],{"class":242,"line":261},[240,100788,100789],{"class":246},"#vstack 垂直方向进行堆叠\n",[240,100791,100792],{"class":242,"line":277},[240,100793,100794],{"class":257},"np.vstack((aa,bb))\n",[240,100796,100797],{"class":242,"line":294},[240,100798,100799],{"class":246},"#与hstack传的参数类似，等价于：\n",[240,100801,100802],{"class":242,"line":309},[240,100803,100804],{"class":257},"np.vstack([aa,bb])\n",[19,100806,100146],{},[19,100808,100809],{},[219,100810],{"alt":236,"src":100811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[19,100813,100642],{},[231,100815,100817],{"className":32324,"code":100816,"language":32326,"meta":236,"style":236},"#两个三行六列\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",[23,100818,100819,100823,100851,100879,100884,100889],{"__ignoreMap":236},[240,100820,100821],{"class":242,"line":243},[240,100822,100201],{"class":246},[240,100824,100825,100827,100829,100831,100833,100835,100837,100839,100841,100843,100845,100847,100849],{"class":242,"line":250},[240,100826,97434],{"class":257},[240,100828,440],{"class":288},[240,100830,94915],{"class":257},[240,100832,1643],{"class":264},[240,100834,2479],{"class":257},[240,100836,2426],{"class":264},[240,100838,94920],{"class":257},[240,100840,1668],{"class":264},[240,100842,2479],{"class":257},[240,100844,1692],{"class":264},[240,100846,2479],{"class":257},[240,100848,2445],{"class":264},[240,100850,2129],{"class":257},[240,100852,100853,100855,100857,100859,100861,100863,100865,100867,100869,100871,100873,100875,100877],{"class":242,"line":261},[240,100854,100234],{"class":257},[240,100856,440],{"class":288},[240,100858,94915],{"class":257},[240,100860,2438],{"class":264},[240,100862,2479],{"class":257},[240,100864,100245],{"class":264},[240,100866,94920],{"class":257},[240,100868,1668],{"class":264},[240,100870,2479],{"class":257},[240,100872,1692],{"class":264},[240,100874,2479],{"class":257},[240,100876,2445],{"class":264},[240,100878,2129],{"class":257},[240,100880,100881],{"class":242,"line":277},[240,100882,100883],{"class":246},"#使用vstack\n",[240,100885,100886],{"class":242,"line":294},[240,100887,100888],{"class":257},"np.vstack((aaa,bbb)).shape\n",[240,100890,100891],{"class":242,"line":309},[240,100892,100893],{"class":246},"#输出：（4，3，6）\n",[14,100895,100897],{"id":100896},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[19,100899,100900],{},"该方法是三维数组特有的方法",[19,100902,100903],{},"也就是说",[19,100905,100906],{},"一维数组拼接方法用：concatenate()",[19,100908,100909],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[19,100911,100912],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[19,100914,100915],{},"四维数组及多维数组只能用concatenate进行拼接",[231,100917,100919],{"className":32324,"code":100918,"language":32326,"meta":236,"style":236},"#两个三行六列\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",[23,100920,100921,100925,100953,100981,100986,100991],{"__ignoreMap":236},[240,100922,100923],{"class":242,"line":243},[240,100924,100201],{"class":246},[240,100926,100927,100929,100931,100933,100935,100937,100939,100941,100943,100945,100947,100949,100951],{"class":242,"line":250},[240,100928,97434],{"class":257},[240,100930,440],{"class":288},[240,100932,94915],{"class":257},[240,100934,1643],{"class":264},[240,100936,2479],{"class":257},[240,100938,2426],{"class":264},[240,100940,94920],{"class":257},[240,100942,1668],{"class":264},[240,100944,2479],{"class":257},[240,100946,1692],{"class":264},[240,100948,2479],{"class":257},[240,100950,2445],{"class":264},[240,100952,2129],{"class":257},[240,100954,100955,100957,100959,100961,100963,100965,100967,100969,100971,100973,100975,100977,100979],{"class":242,"line":261},[240,100956,100234],{"class":257},[240,100958,440],{"class":288},[240,100960,94915],{"class":257},[240,100962,2438],{"class":264},[240,100964,2479],{"class":257},[240,100966,100245],{"class":264},[240,100968,94920],{"class":257},[240,100970,1668],{"class":264},[240,100972,2479],{"class":257},[240,100974,1692],{"class":264},[240,100976,2479],{"class":257},[240,100978,2445],{"class":264},[240,100980,2129],{"class":257},[240,100982,100983],{"class":242,"line":277},[240,100984,100985],{"class":246},"#使用dstack\n",[240,100987,100988],{"class":242,"line":294},[240,100989,100990],{"class":257},"np.dstack((aaa,bbb)).shape\n",[240,100992,100993],{"class":242,"line":309},[240,100994,100995],{"class":246},"#结果：（2，3，12）\n",[2019,100997,100998],{},"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":236,"searchDepth":250,"depth":250,"links":101000},[101001,101002,101003,101004],{"id":99940,"depth":250,"text":99941},{"id":100554,"depth":250,"text":100555},{"id":100725,"depth":250,"text":100726},{"id":100896,"depth":250,"text":100897},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":99932,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":101011,"title":101012,"body":101013,"description":2048,"extension":2049,"meta":101288,"navigation":2051,"path":101289,"seo":101290,"stem":101291,"__hash__":101292},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":101014,"toc":101286},[101015,101018,101021,101115,101118,101121,101124,101127,101130,101133,101136,101139,101283],[10,101016,101012],{"id":101017},"_7数组转置",[19,101019,101020],{},"使用transpose()函数",[231,101022,101024],{"className":32324,"code":101023,"language":32326,"meta":236,"style":236},"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",[23,101025,101026,101036,101060,101065,101070,101075,101080,101088,101092,101096,101101,101106,101111],{"__ignoreMap":236},[240,101027,101028,101030,101032,101034],{"class":242,"line":243},[240,101029,32338],{"class":288},[240,101031,33326],{"class":257},[240,101033,33329],{"class":288},[240,101035,33332],{"class":257},[240,101037,101038,101040,101042,101044,101046,101048,101050,101052,101054,101056,101058],{"class":242,"line":250},[240,101039,254],{"class":257},[240,101041,440],{"class":288},[240,101043,33663],{"class":257},[240,101045,1643],{"class":264},[240,101047,2479],{"class":257},[240,101049,2622],{"class":264},[240,101051,94920],{"class":257},[240,101053,1716],{"class":264},[240,101055,2479],{"class":257},[240,101057,1692],{"class":264},[240,101059,2129],{"class":257},[240,101061,101062],{"class":242,"line":261},[240,101063,101064],{"class":246},"#二维数组转置\n",[240,101066,101067],{"class":242,"line":277},[240,101068,101069],{"class":246},"#调用transpose()函数\n",[240,101071,101072],{"class":242,"line":294},[240,101073,101074],{"class":257},"a.transpose()\n",[240,101076,101077],{"class":242,"line":309},[240,101078,101079],{"class":246},"#对于二维数组也可以采用.T来实现\n",[240,101081,101082,101085],{"class":242,"line":529},[240,101083,101084],{"class":257},"a.T",[240,101086,101087],{"class":246},"#与上述代码一样\n",[240,101089,101090],{"class":242,"line":549},[240,101091,95477],{"class":246},[240,101093,101094],{"class":242,"line":569},[240,101095,95841],{"class":443},[240,101097,101098],{"class":242,"line":589},[240,101099,101100],{"class":443},"array([[ 1,  4,  7, 10],\n",[240,101102,101103],{"class":242,"line":715},[240,101104,101105],{"class":443},"       [ 2,  5,  8, 11],\n",[240,101107,101108],{"class":242,"line":727},[240,101109,101110],{"class":443},"       [ 3,  6,  9, 12]])\n",[240,101112,101113],{"class":242,"line":1730},[240,101114,95841],{"class":443},[19,101116,101117],{},"也可以使用np.transpose()的形式",[19,101119,101120],{},"#多维数组进行转置 np.transpose()",[19,101122,101123],{},"#对二维数组也可以使用np.transpose()进行转置",[19,101125,101126],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[19,101128,101129],{},"第二个参数，维度可以理解为用axis中的数来理解",[19,101131,101132],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[19,101134,101135],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[19,101137,101138],{},"四维及以上的数组也是一样的道理",[231,101140,101142],{"className":32324,"code":101141,"language":32326,"meta":236,"style":236},"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",[23,101143,101144,101172,101177,101182,101187,101205,101210,101242,101247,101252,101257,101278],{"__ignoreMap":236},[240,101145,101146,101148,101150,101152,101154,101156,101158,101160,101162,101164,101166,101168,101170],{"class":242,"line":243},[240,101147,2916],{"class":257},[240,101149,440],{"class":288},[240,101151,94915],{"class":257},[240,101153,1643],{"class":264},[240,101155,2479],{"class":257},[240,101157,2426],{"class":264},[240,101159,94920],{"class":257},[240,101161,1692],{"class":264},[240,101163,2479],{"class":257},[240,101165,2445],{"class":264},[240,101167,2479],{"class":257},[240,101169,1668],{"class":264},[240,101171,2129],{"class":257},[240,101173,101174],{"class":242,"line":250},[240,101175,101176],{"class":257},"x.shape\n",[240,101178,101179],{"class":242,"line":261},[240,101180,101181],{"class":246},"#结果：（3,6,2）\n",[240,101183,101184],{"class":242,"line":277},[240,101185,101186],{"class":246},"#使用np.transpose()进行转置 变为(2,6,3)\n",[240,101188,101189,101192,101194,101196,101198,101200,101202],{"class":242,"line":294},[240,101190,101191],{"class":257},"np.transpose(x,(",[240,101193,1668],{"class":264},[240,101195,2479],{"class":257},[240,101197,1643],{"class":264},[240,101199,2479],{"class":257},[240,101201,1274],{"class":264},[240,101203,101204],{"class":257},")).shape\n",[240,101206,101207],{"class":242,"line":309},[240,101208,101209],{"class":246},"#结果：(2,6,3)\n",[240,101211,101212,101214,101216,101218,101220,101222,101224,101226,101228,101230,101232,101234,101236,101238,101240],{"class":242,"line":529},[240,101213,100419],{"class":257},[240,101215,440],{"class":288},[240,101217,94915],{"class":257},[240,101219,1643],{"class":264},[240,101221,2479],{"class":257},[240,101223,2426],{"class":264},[240,101225,94920],{"class":257},[240,101227,1692],{"class":264},[240,101229,2479],{"class":257},[240,101231,1668],{"class":264},[240,101233,2479],{"class":257},[240,101235,1643],{"class":264},[240,101237,2479],{"class":257},[240,101239,2445],{"class":264},[240,101241,2129],{"class":257},[240,101243,101244],{"class":242,"line":549},[240,101245,101246],{"class":257},"aaaa.shape\n",[240,101248,101249],{"class":242,"line":569},[240,101250,101251],{"class":246},"#结果：（3，2，1，6）\n",[240,101253,101254],{"class":242,"line":589},[240,101255,101256],{"class":246},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[240,101258,101259,101262,101264,101266,101268,101270,101272,101274,101276],{"class":242,"line":715},[240,101260,101261],{"class":257},"np.transpose(aaaa,(",[240,101263,1643],{"class":264},[240,101265,2479],{"class":257},[240,101267,1668],{"class":264},[240,101269,2479],{"class":257},[240,101271,1274],{"class":264},[240,101273,2479],{"class":257},[240,101275,1692],{"class":264},[240,101277,101204],{"class":257},[240,101279,101280],{"class":242,"line":727},[240,101281,101282],{"class":246},"#结果：(2,1,3,6)\n",[2019,101284,101285],{},"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":236,"searchDepth":250,"depth":250,"links":101287},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":101012,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":101294,"title":101295,"body":101296,"description":2048,"extension":2049,"meta":102029,"navigation":2051,"path":102030,"seo":102031,"stem":102032,"__hash__":102033},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":101297,"toc":102027},[101298,101301,101304,101307,101309,101312,101315,101318,101321,101430,101433,101436,102024],[10,101299,101295],{"id":101300},"_8数组分割",[19,101302,101303],{},"split分割",[19,101305,101306],{},"numpy.split(ary,indics_or_sections,axis)",[19,101308,1297],{},[19,101310,101311],{},"ary:被分割的数组",[19,101313,101314],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[19,101316,101317],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[19,101319,101320],{},"①一维数组的分割",[231,101322,101324],{"className":32324,"code":101323,"language":32326,"meta":236,"style":236},"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",[23,101325,101326,101342,101347,101356,101360,101365,101373,101377,101382,101387,101400,101404,101409,101421,101425],{"__ignoreMap":236},[240,101327,101328,101330,101332,101334,101336,101338,101340],{"class":242,"line":243},[240,101329,254],{"class":257},[240,101331,440],{"class":288},[240,101333,94915],{"class":257},[240,101335,1643],{"class":264},[240,101337,2479],{"class":257},[240,101339,2520],{"class":264},[240,101341,2129],{"class":257},[240,101343,101344],{"class":242,"line":250},[240,101345,101346],{"class":246},"#如果传入整数，必须能够平分，否则会报错\n",[240,101348,101349,101352,101354],{"class":242,"line":261},[240,101350,101351],{"class":257},"np.split(a,",[240,101353,1668],{"class":264},[240,101355,2129],{"class":257},[240,101357,101358],{"class":242,"line":277},[240,101359,95477],{"class":246},[240,101361,101362],{"class":242,"line":294},[240,101363,101364],{"class":246},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[240,101366,101367,101369,101371],{"class":242,"line":309},[240,101368,101351],{"class":257},[240,101370,1716],{"class":264},[240,101372,2129],{"class":257},[240,101374,101375],{"class":242,"line":529},[240,101376,95477],{"class":246},[240,101378,101379],{"class":242,"line":549},[240,101380,101381],{"class":246},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[240,101383,101384],{"class":242,"line":569},[240,101385,101386],{"class":246},"#传入数组\n",[240,101388,101389,101392,101394,101396,101398],{"class":242,"line":589},[240,101390,101391],{"class":257},"np.split(a,[",[240,101393,1692],{"class":264},[240,101395,2479],{"class":257},[240,101397,1741],{"class":264},[240,101399,6609],{"class":257},[240,101401,101402],{"class":242,"line":715},[240,101403,95477],{"class":246},[240,101405,101406],{"class":242,"line":727},[240,101407,101408],{"class":246},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[240,101410,101411,101413,101415,101417,101419],{"class":242,"line":1730},[240,101412,101391],{"class":257},[240,101414,1741],{"class":264},[240,101416,2479],{"class":257},[240,101418,2470],{"class":264},[240,101420,6609],{"class":257},[240,101422,101423],{"class":242,"line":3582},[240,101424,95477],{"class":246},[240,101426,101427],{"class":242,"line":3596},[240,101428,101429],{"class":246},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[19,101431,101432],{},"②二维数组的分割",[19,101434,101435],{},"使用split()",[231,101437,101439],{"className":32324,"code":101438,"language":32326,"meta":236,"style":236},"#二维数组分割\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",[23,101440,101441,101446,101470,101475,101484,101488,101492,101497,101502,101507,101512,101517,101522,101527,101531,101544,101548,101552,101556,101560,101564,101569,101574,101579,101583,101588,101604,101608,101612,101617,101622,101627,101632,101637,101642,101647,101652,101657,101662,101667,101672,101677,101682,101687,101692,101697,101702,101706,101710,101730,101734,101738,101743,101748,101753,101758,101763,101768,101773,101778,101783,101788,101793,101798,101803,101808,101813,101818,101823,101828,101832,101837,101846,101850,101854,101858,101862,101866,101870,101874,101878,101882,101891,101895,101899,101903,101907,101911,101915,101919,101923,101927,101931,101935,101939,101943,101947,101951,101955,101959,101963,101967,101971,101975,101988,101992,101996,102000,102004,102008,102012,102016,102020],{"__ignoreMap":236},[240,101442,101443],{"class":242,"line":243},[240,101444,101445],{"class":246},"#二维数组分割\n",[240,101447,101448,101450,101452,101454,101456,101458,101460,101462,101464,101466,101468],{"class":242,"line":250},[240,101449,95219],{"class":257},[240,101451,440],{"class":288},[240,101453,94915],{"class":257},[240,101455,1643],{"class":264},[240,101457,2479],{"class":257},[240,101459,2426],{"class":264},[240,101461,94920],{"class":257},[240,101463,2445],{"class":264},[240,101465,2479],{"class":257},[240,101467,2445],{"class":264},[240,101469,2129],{"class":257},[240,101471,101472],{"class":242,"line":261},[240,101473,101474],{"class":246},"#默认axis=0  传入整数平均分,按行来的\n",[240,101476,101477,101480,101482],{"class":242,"line":277},[240,101478,101479],{"class":257},"np.split(aa,",[240,101481,1692],{"class":264},[240,101483,2129],{"class":257},[240,101485,101486],{"class":242,"line":294},[240,101487,97677],{"class":246},[240,101489,101490],{"class":242,"line":309},[240,101491,95841],{"class":443},[240,101493,101494],{"class":242,"line":529},[240,101495,101496],{"class":443},"[array([[ 1,  2,  3,  4,  5,  6],\n",[240,101498,101499],{"class":242,"line":549},[240,101500,101501],{"class":443},"        [ 7,  8,  9, 10, 11, 12]]),\n",[240,101503,101504],{"class":242,"line":569},[240,101505,101506],{"class":443}," array([[13, 14, 15, 16, 17, 18],\n",[240,101508,101509],{"class":242,"line":589},[240,101510,101511],{"class":443},"        [19, 20, 21, 22, 23, 24]]),\n",[240,101513,101514],{"class":242,"line":715},[240,101515,101516],{"class":443}," array([[25, 26, 27, 28, 29, 30],\n",[240,101518,101519],{"class":242,"line":727},[240,101520,101521],{"class":443},"        [31, 32, 33, 34, 35, 36]])]\n",[240,101523,101524],{"class":242,"line":1730},[240,101525,101526],{"class":443}," '''\n",[240,101528,101529],{"class":242,"line":3582},[240,101530,101386],{"class":246},[240,101532,101533,101536,101538,101540,101542],{"class":242,"line":3596},[240,101534,101535],{"class":257},"np.split(aa,[",[240,101537,1668],{"class":264},[240,101539,2479],{"class":257},[240,101541,1741],{"class":264},[240,101543,6609],{"class":257},[240,101545,101546],{"class":242,"line":3601},[240,101547,97677],{"class":246},[240,101549,101550],{"class":242,"line":3607},[240,101551,95841],{"class":443},[240,101553,101554],{"class":242,"line":3628},[240,101555,101496],{"class":443},[240,101557,101558],{"class":242,"line":3633},[240,101559,101501],{"class":443},[240,101561,101562],{"class":242,"line":3647},[240,101563,101506],{"class":443},[240,101565,101566],{"class":242,"line":3652},[240,101567,101568],{"class":443},"        [19, 20, 21, 22, 23, 24],\n",[240,101570,101571],{"class":242,"line":3681},[240,101572,101573],{"class":443},"        [25, 26, 27, 28, 29, 30]]),\n",[240,101575,101576],{"class":242,"line":3686},[240,101577,101578],{"class":443}," array([[31, 32, 33, 34, 35, 36]])]\n",[240,101580,101581],{"class":242,"line":3703},[240,101582,95841],{"class":443},[240,101584,101585],{"class":242,"line":3708},[240,101586,101587],{"class":246},"#axis=1 按照列来分\n",[240,101589,101590,101592,101594,101596,101598,101600,101602],{"class":242,"line":3713},[240,101591,101479],{"class":257},[240,101593,1692],{"class":264},[240,101595,2479],{"class":257},[240,101597,49460],{"class":792},[240,101599,440],{"class":288},[240,101601,1643],{"class":264},[240,101603,2129],{"class":257},[240,101605,101606],{"class":242,"line":3718},[240,101607,97677],{"class":246},[240,101609,101610],{"class":242,"line":3732},[240,101611,95841],{"class":443},[240,101613,101614],{"class":242,"line":3737},[240,101615,101616],{"class":443},"[array([[ 1,  2],\n",[240,101618,101619],{"class":242,"line":4530},[240,101620,101621],{"class":443},"        [ 7,  8],\n",[240,101623,101624],{"class":242,"line":4544},[240,101625,101626],{"class":443},"        [13, 14],\n",[240,101628,101629],{"class":242,"line":4552},[240,101630,101631],{"class":443},"        [19, 20],\n",[240,101633,101634],{"class":242,"line":4557},[240,101635,101636],{"class":443},"        [25, 26],\n",[240,101638,101639],{"class":242,"line":4563},[240,101640,101641],{"class":443},"        [31, 32]]),\n",[240,101643,101644],{"class":242,"line":4569},[240,101645,101646],{"class":443}," array([[ 3,  4],\n",[240,101648,101649],{"class":242,"line":4574},[240,101650,101651],{"class":443},"        [ 9, 10],\n",[240,101653,101654],{"class":242,"line":9899},[240,101655,101656],{"class":443},"        [15, 16],\n",[240,101658,101659],{"class":242,"line":9923},[240,101660,101661],{"class":443},"        [21, 22],\n",[240,101663,101664],{"class":242,"line":9928},[240,101665,101666],{"class":443},"        [27, 28],\n",[240,101668,101669],{"class":242,"line":9934},[240,101670,101671],{"class":443},"        [33, 34]]),\n",[240,101673,101674],{"class":242,"line":9961},[240,101675,101676],{"class":443}," array([[ 5,  6],\n",[240,101678,101679],{"class":242,"line":9966},[240,101680,101681],{"class":443},"        [11, 12],\n",[240,101683,101684],{"class":242,"line":9972},[240,101685,101686],{"class":443},"        [17, 18],\n",[240,101688,101689],{"class":242,"line":9984},[240,101690,101691],{"class":443},"        [23, 24],\n",[240,101693,101694],{"class":242,"line":9996},[240,101695,101696],{"class":443},"        [29, 30],\n",[240,101698,101699],{"class":242,"line":10008},[240,101700,101701],{"class":443},"        [35, 36]])]\n",[240,101703,101704],{"class":242,"line":11667},[240,101705,101526],{"class":443},[240,101707,101708],{"class":242,"line":11692},[240,101709,101386],{"class":246},[240,101711,101712,101714,101716,101718,101720,101722,101724,101726,101728],{"class":242,"line":11715},[240,101713,101535],{"class":257},[240,101715,1643],{"class":264},[240,101717,2479],{"class":257},[240,101719,1668],{"class":264},[240,101721,43555],{"class":257},[240,101723,49460],{"class":792},[240,101725,440],{"class":288},[240,101727,1643],{"class":264},[240,101729,2129],{"class":257},[240,101731,101732],{"class":242,"line":11739},[240,101733,95477],{"class":246},[240,101735,101736],{"class":242,"line":11744},[240,101737,95841],{"class":443},[240,101739,101740],{"class":242,"line":11749},[240,101741,101742],{"class":443},"[array([[ 1],\n",[240,101744,101745],{"class":242,"line":11754},[240,101746,101747],{"class":443},"        [ 7],\n",[240,101749,101750],{"class":242,"line":11763},[240,101751,101752],{"class":443},"        [13],\n",[240,101754,101755],{"class":242,"line":11768},[240,101756,101757],{"class":443},"        [19],\n",[240,101759,101760],{"class":242,"line":11774},[240,101761,101762],{"class":443},"        [25],\n",[240,101764,101765],{"class":242,"line":11795},[240,101766,101767],{"class":443},"        [31]]),\n",[240,101769,101770],{"class":242,"line":11801},[240,101771,101772],{"class":443}," array([[ 2],\n",[240,101774,101775],{"class":242,"line":11815},[240,101776,101777],{"class":443},"        [ 8],\n",[240,101779,101780],{"class":242,"line":11821},[240,101781,101782],{"class":443},"        [14],\n",[240,101784,101785],{"class":242,"line":11848},[240,101786,101787],{"class":443},"        [20],\n",[240,101789,101790],{"class":242,"line":11857},[240,101791,101792],{"class":443},"        [26],\n",[240,101794,101795],{"class":242,"line":11863},[240,101796,101797],{"class":443},"        [32]]),\n",[240,101799,101800],{"class":242,"line":11871},[240,101801,101802],{"class":443}," array([[ 3,  4,  5,  6],\n",[240,101804,101805],{"class":242,"line":11876},[240,101806,101807],{"class":443},"        [ 9, 10, 11, 12],\n",[240,101809,101810],{"class":242,"line":18552},[240,101811,101812],{"class":443},"        [15, 16, 17, 18],\n",[240,101814,101815],{"class":242,"line":18558},[240,101816,101817],{"class":443},"        [21, 22, 23, 24],\n",[240,101819,101820],{"class":242,"line":18581},[240,101821,101822],{"class":443},"        [27, 28, 29, 30],\n",[240,101824,101825],{"class":242,"line":18587},[240,101826,101827],{"class":443},"        [33, 34, 35, 36]])]\n",[240,101829,101830],{"class":242,"line":18610},[240,101831,95841],{"class":443},[240,101833,101834],{"class":242,"line":18624},[240,101835,101836],{"class":246},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[240,101838,101839,101842,101844],{"class":242,"line":18644},[240,101840,101841],{"class":257},"np.vsplit(aa,",[240,101843,1692],{"class":264},[240,101845,2129],{"class":257},[240,101847,101848],{"class":242,"line":18650},[240,101849,95477],{"class":246},[240,101851,101852],{"class":242,"line":18661},[240,101853,95841],{"class":443},[240,101855,101856],{"class":242,"line":18684},[240,101857,101496],{"class":443},[240,101859,101860],{"class":242,"line":18706},[240,101861,101501],{"class":443},[240,101863,101864],{"class":242,"line":18711},[240,101865,101506],{"class":443},[240,101867,101868],{"class":242,"line":18717},[240,101869,101511],{"class":443},[240,101871,101872],{"class":242,"line":18731},[240,101873,101516],{"class":443},[240,101875,101876],{"class":242,"line":18744},[240,101877,101521],{"class":443},[240,101879,101880],{"class":242,"line":18749},[240,101881,95841],{"class":443},[240,101883,101884,101887,101889],{"class":242,"line":18763},[240,101885,101886],{"class":257},"np.hsplit(aa,",[240,101888,1692],{"class":264},[240,101890,2129],{"class":257},[240,101892,101893],{"class":242,"line":18768},[240,101894,95477],{"class":246},[240,101896,101897],{"class":242,"line":18774},[240,101898,95841],{"class":443},[240,101900,101901],{"class":242,"line":18779},[240,101902,101616],{"class":443},[240,101904,101905],{"class":242,"line":18793},[240,101906,101621],{"class":443},[240,101908,101909],{"class":242,"line":18798},[240,101910,101626],{"class":443},[240,101912,101913],{"class":242,"line":18803},[240,101914,101631],{"class":443},[240,101916,101917],{"class":242,"line":18817},[240,101918,101636],{"class":443},[240,101920,101921],{"class":242,"line":18829},[240,101922,101641],{"class":443},[240,101924,101925],{"class":242,"line":18834},[240,101926,101646],{"class":443},[240,101928,101929],{"class":242,"line":18847},[240,101930,101651],{"class":443},[240,101932,101933],{"class":242,"line":18852},[240,101934,101656],{"class":443},[240,101936,101937],{"class":242,"line":18857},[240,101938,101661],{"class":443},[240,101940,101941],{"class":242,"line":18862},[240,101942,101666],{"class":443},[240,101944,101945],{"class":242,"line":18875},[240,101946,101671],{"class":443},[240,101948,101949],{"class":242,"line":18880},[240,101950,101676],{"class":443},[240,101952,101953],{"class":242,"line":34579},[240,101954,101681],{"class":443},[240,101956,101957],{"class":242,"line":34585},[240,101958,101686],{"class":443},[240,101960,101961],{"class":242,"line":34591},[240,101962,101691],{"class":443},[240,101964,101965],{"class":242,"line":34597},[240,101966,101696],{"class":443},[240,101968,101969],{"class":242,"line":34603},[240,101970,101701],{"class":443},[240,101972,101973],{"class":242,"line":34614},[240,101974,95841],{"class":443},[240,101976,101977,101980,101982,101984,101986],{"class":242,"line":34620},[240,101978,101979],{"class":257},"np.vsplit(aa,[",[240,101981,1668],{"class":264},[240,101983,2479],{"class":257},[240,101985,1741],{"class":264},[240,101987,6609],{"class":257},[240,101989,101990],{"class":242,"line":34640},[240,101991,95477],{"class":246},[240,101993,101994],{"class":242,"line":34646},[240,101995,95841],{"class":443},[240,101997,101998],{"class":242,"line":34657},[240,101999,101496],{"class":443},[240,102001,102002],{"class":242,"line":34663},[240,102003,101501],{"class":443},[240,102005,102006],{"class":242,"line":34669},[240,102007,101506],{"class":443},[240,102009,102010],{"class":242,"line":34675},[240,102011,101568],{"class":443},[240,102013,102014],{"class":242,"line":34681},[240,102015,101573],{"class":443},[240,102017,102018],{"class":242,"line":34687},[240,102019,101578],{"class":443},[240,102021,102022],{"class":242,"line":34693},[240,102023,101526],{"class":443},[2019,102025,102026],{},"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":236,"searchDepth":250,"depth":250,"links":102028},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":101295,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":102035,"title":102036,"body":102037,"description":2048,"extension":2049,"meta":102530,"navigation":2051,"path":102531,"seo":102532,"stem":102533,"__hash__":102534},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":102038,"toc":102521},[102039,102042,102045,102070,102074,102133,102185,102189,102191,102227,102281,102283,102321,102392,102396,102401,102405,102408,102440,102443,102447,102450,102453,102456,102459,102464,102468,102471,102474,102477,102480,102485,102489,102494,102497,102518],[10,102040,102036],{"id":102041},"_9数学函数",[19,102043,102044],{},"补充回顾：python的列表推导式",[231,102046,102048],{"className":32324,"code":102047,"language":32326,"meta":236,"style":236},"[1\u002Fi for i in a]\n",[23,102049,102050],{"__ignoreMap":236},[240,102051,102052,102054,102056,102058,102061,102063,102065,102067],{"class":242,"line":243},[240,102053,2985],{"class":257},[240,102055,1643],{"class":264},[240,102057,2683],{"class":288},[240,102059,102060],{"class":257},"i ",[240,102062,4977],{"class":288},[240,102064,11389],{"class":257},[240,102066,27989],{"class":288},[240,102068,102069],{"class":257}," a]\n",[14,102071,102073],{"id":102072},"_91-求倒数","9.1 求倒数",[231,102075,102077],{"className":32324,"code":102076,"language":32326,"meta":236,"style":236},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[23,102078,102079,102084,102112,102124],{"__ignoreMap":236},[240,102080,102081],{"class":242,"line":243},[240,102082,102083],{"class":246},"#数组求倒数\n",[240,102085,102086,102088,102090,102092,102094,102096,102098,102100,102102,102104,102106,102108,102110],{"class":242,"line":250},[240,102087,254],{"class":257},[240,102089,440],{"class":288},[240,102091,2985],{"class":257},[240,102093,1643],{"class":264},[240,102095,2479],{"class":257},[240,102097,1668],{"class":264},[240,102099,2479],{"class":257},[240,102101,1692],{"class":264},[240,102103,2479],{"class":257},[240,102105,1716],{"class":264},[240,102107,2479],{"class":257},[240,102109,1741],{"class":264},[240,102111,35192],{"class":257},[240,102113,102114,102116,102118,102121],{"class":242,"line":261},[240,102115,2367],{"class":257},[240,102117,440],{"class":288},[240,102119,102120],{"class":257},"np.array(a)",[240,102122,102123],{"class":246},"#将列表转换为数组\n",[240,102125,102126,102128,102130],{"class":242,"line":277},[240,102127,1643],{"class":264},[240,102129,2683],{"class":288},[240,102131,102132],{"class":257},"b\n",[231,102134,102136],{"className":32324,"code":102135,"language":32326,"meta":236,"style":236},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[23,102137,102138,102166,102175,102180],{"__ignoreMap":236},[240,102139,102140,102142,102144,102146,102148,102150,102152,102154,102156,102158,102160,102162,102164],{"class":242,"line":243},[240,102141,254],{"class":257},[240,102143,440],{"class":288},[240,102145,2985],{"class":257},[240,102147,1643],{"class":264},[240,102149,2479],{"class":257},[240,102151,1668],{"class":264},[240,102153,2479],{"class":257},[240,102155,1692],{"class":264},[240,102157,2479],{"class":257},[240,102159,1716],{"class":264},[240,102161,2479],{"class":257},[240,102163,1741],{"class":264},[240,102165,35192],{"class":257},[240,102167,102168,102170,102172],{"class":242,"line":250},[240,102169,2367],{"class":257},[240,102171,440],{"class":288},[240,102173,102174],{"class":257},"np.array(a)\n",[240,102176,102177],{"class":242,"line":261},[240,102178,102179],{"class":246},"#调用numpy中的函数reciprocal()\n",[240,102181,102182],{"class":242,"line":277},[240,102183,102184],{"class":257},"np.reciprocal(b)\n",[14,102186,102188],{"id":102187},"_92-求平方","9.2 求平方",[19,102190,96443],{},[231,102192,102194],{"className":32324,"code":102193,"language":32326,"meta":236,"style":236},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[23,102195,102196,102201,102206,102222],{"__ignoreMap":236},[240,102197,102198],{"class":242,"line":243},[240,102199,102200],{"class":246},"#square()，求平方\n",[240,102202,102203],{"class":242,"line":250},[240,102204,102205],{"class":246},"#一维数组\n",[240,102207,102208,102210,102212,102214,102216,102218,102220],{"class":242,"line":261},[240,102209,254],{"class":257},[240,102211,440],{"class":288},[240,102213,94915],{"class":257},[240,102215,1643],{"class":264},[240,102217,2479],{"class":257},[240,102219,2546],{"class":264},[240,102221,2129],{"class":257},[240,102223,102224],{"class":242,"line":277},[240,102225,102226],{"class":257},"np.square(a)\n",[231,102228,102230],{"className":32324,"code":102229,"language":32326,"meta":236,"style":236},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[23,102231,102232,102237,102242,102263],{"__ignoreMap":236},[240,102233,102234],{"class":242,"line":243},[240,102235,102236],{"class":246},"#或者通过循环遍历的形式来计算\n",[240,102238,102239],{"class":242,"line":250},[240,102240,102241],{"class":246},"#这是一个列表\n",[240,102243,102244,102247,102249,102251,102253,102255,102257,102260],{"class":242,"line":261},[240,102245,102246],{"class":257},"[i",[240,102248,2554],{"class":288},[240,102250,102060],{"class":257},[240,102252,4977],{"class":288},[240,102254,11389],{"class":257},[240,102256,27989],{"class":288},[240,102258,102259],{"class":257}," a]",[240,102261,102262],{"class":246},"#这个求完之后在数列当中\n",[240,102264,102265,102268,102270,102272,102274,102276,102278],{"class":242,"line":277},[240,102266,102267],{"class":257},"np.array([i",[240,102269,2554],{"class":288},[240,102271,102060],{"class":257},[240,102273,4977],{"class":288},[240,102275,11389],{"class":257},[240,102277,27989],{"class":288},[240,102279,102280],{"class":257}," a])\n",[19,102282,95204],{},[231,102284,102286],{"className":32324,"code":102285,"language":32326,"meta":236,"style":236},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[23,102287,102288,102292,102316],{"__ignoreMap":236},[240,102289,102290],{"class":242,"line":243},[240,102291,95214],{"class":246},[240,102293,102294,102296,102298,102300,102302,102304,102306,102308,102310,102312,102314],{"class":242,"line":250},[240,102295,95219],{"class":257},[240,102297,440],{"class":288},[240,102299,94915],{"class":257},[240,102301,1643],{"class":264},[240,102303,2479],{"class":257},[240,102305,2622],{"class":264},[240,102307,94920],{"class":257},[240,102309,1716],{"class":264},[240,102311,2479],{"class":257},[240,102313,1692],{"class":264},[240,102315,2129],{"class":257},[240,102317,102318],{"class":242,"line":261},[240,102319,102320],{"class":257},"np.square(aa)\n",[231,102322,102324],{"className":32324,"code":102323,"language":32326,"meta":236,"style":236},"#传统的方式\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",[23,102325,102326,102331,102340,102356,102372,102387],{"__ignoreMap":236},[240,102327,102328],{"class":242,"line":243},[240,102329,102330],{"class":246},"#传统的方式\n",[240,102332,102333,102335,102337],{"class":242,"line":250},[240,102334,100100],{"class":257},[240,102336,440],{"class":288},[240,102338,102339],{"class":257},"np.empty_like(aa)\n",[240,102341,102342,102344,102346,102348,102350,102352,102354],{"class":242,"line":261},[240,102343,4977],{"class":288},[240,102345,11389],{"class":257},[240,102347,27989],{"class":288},[240,102349,34389],{"class":264},[240,102351,789],{"class":257},[240,102353,1716],{"class":264},[240,102355,32732],{"class":257},[240,102357,102358,102360,102362,102364,102366,102368,102370],{"class":242,"line":277},[240,102359,5153],{"class":288},[240,102361,11451],{"class":257},[240,102363,27989],{"class":288},[240,102365,34389],{"class":264},[240,102367,789],{"class":257},[240,102369,1692],{"class":264},[240,102371,32732],{"class":257},[240,102373,102374,102377,102379,102382,102384],{"class":242,"line":294},[240,102375,102376],{"class":257},"        bb[i,j]",[240,102378,440],{"class":288},[240,102380,102381],{"class":257},"aa[i,j]",[240,102383,2554],{"class":288},[240,102385,102386],{"class":257},"aa[i,j]\n",[240,102388,102389],{"class":242,"line":309},[240,102390,102391],{"class":257},"bb\n",[14,102393,102395],{"id":102394},"_93-求各元素的符号","9.3 求各元素的符号",[19,102397,102398],{},[219,102399],{"alt":236,"src":102400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[14,102402,102404],{"id":102403},"_94-modf函数","9.4 modf函数",[19,102406,102407],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[231,102409,102411],{"className":32324,"code":102410,"language":32326,"meta":236,"style":236},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[23,102412,102413,102435],{"__ignoreMap":236},[240,102414,102415,102417,102419,102421,102423,102425,102427,102429,102431,102433],{"class":242,"line":243},[240,102416,254],{"class":257},[240,102418,440],{"class":288},[240,102420,94915],{"class":257},[240,102422,2631],{"class":288},[240,102424,2546],{"class":264},[240,102426,2479],{"class":257},[240,102428,2546],{"class":264},[240,102430,2479],{"class":257},[240,102432,1288],{"class":264},[240,102434,2129],{"class":257},[240,102436,102437],{"class":242,"line":250},[240,102438,102439],{"class":257},"np.modf(a)\n",[19,102441,102442],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[14,102444,102446],{"id":102445},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[19,102448,102449],{},"np.cell()",[19,102451,102452],{},"np.floor()",[19,102454,102455],{},"np.rint()",[19,102457,102458],{},"对各元素分别向上取整、向下取整、四舍五入",[19,102460,102461],{},[219,102462],{"alt":236,"src":102463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[14,102465,102467],{"id":102466},"_96-around函数","9.6 around()函数",[19,102469,102470],{},"around()函数也可以实现对数的小数位数进行操作",[19,102472,102473],{},"其中的参数：",[19,102475,102476],{},"1.要传的数组",[19,102478,102479],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[19,102481,102482],{},[219,102483],{"alt":236,"src":102484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[14,102486,102488],{"id":102487},"_97-三角函数","9.7 三角函数",[19,102490,102491],{},[219,102492],{"alt":236,"src":102493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[19,102495,102496],{},"引入图像模块非常重要",[231,102498,102500],{"className":32324,"code":102499,"language":32326,"meta":236,"style":236},"from matplotlib import pyplot as plt\n",[23,102501,102502],{"__ignoreMap":236},[240,102503,102504,102506,102509,102511,102514,102516],{"class":242,"line":243},[240,102505,32683],{"class":288},[240,102507,102508],{"class":257}," matplotlib ",[240,102510,32338],{"class":288},[240,102512,102513],{"class":257}," pyplot ",[240,102515,33329],{"class":288},[240,102517,33383],{"class":257},[2019,102519,102520],{},"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":236,"searchDepth":250,"depth":250,"links":102522},[102523,102524,102525,102526,102527,102528,102529],{"id":102072,"depth":250,"text":102073},{"id":102187,"depth":250,"text":102188},{"id":102394,"depth":250,"text":102395},{"id":102403,"depth":250,"text":102404},{"id":102445,"depth":250,"text":102446},{"id":102466,"depth":250,"text":102467},{"id":102487,"depth":250,"text":102488},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":102036,"description":2048},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":102536,"title":102537,"body":102538,"description":2048,"extension":2049,"meta":102542,"navigation":2051,"path":102543,"seo":102544,"stem":102545,"__hash__":102546},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":102539,"toc":102540},[],{"title":236,"searchDepth":250,"depth":250,"links":102541},[],{"category":52366},"\u002Fwiki\u002F2025-08-14-numpy",{"title":102537,"description":2048},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":102548,"title":102549,"body":102550,"description":236,"extension":2049,"meta":104558,"navigation":2051,"path":104559,"seo":104560,"stem":104561,"__hash__":104562},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":102551,"toc":104534},[102552,102555,102559,102562,102565,102571,102574,102597,102600,102634,102637,102678,102682,102685,102778,102781,102825,102828,102845,102848,102862,102865,102868,102913,102916,102953,102957,102960,102966,102971,102991,102995,102998,103064,103067,103085,103089,103092,103121,103131,103137,103141,103144,103150,103161,103165,103168,103198,103201,103481,103484,103487,103498,103501,103504,103526,103533,103536,103554,103557,103560,103574,103582,103585,103611,103617,103620,103623,103633,103645,103665,103674,103694,103704,103728,103741,103755,103760,103801,103818,103843,103855,103875,103881,103926,103945,103962,103975,103991,103998,104010,104019,104054,104075,104100,104113,104137,104152,104177,104180,104201,104210,104213,104224,104228,104231,104237,104249,104256,104260,104263,104275,104278,104292,104295,104305,104315,104318,104358,104361,104365,104371,104374,104388,104392,104395,104428,104432,104435,104458,104466,104469,104475,104481,104484,104487,104515,104519,104522,104528,104531],[10,102553,102549],{"id":102554},"_1环境安装与第一个-mujoco-程序",[14,102556,102558],{"id":102557},"_1目标说明","1.目标说明",[19,102560,102561],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[19,102563,102564],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[231,102566,102569],{"className":102567,"code":102568,"language":7139,"meta":236},[7137],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[23,102570,102568],{"__ignoreMap":236},[19,102572,102573],{},"需要掌握:",[1826,102575,102576,102579,102582,102587,102592],{},[1829,102577,102578],{},"Fedora 44 下 MuJoCo 的系统依赖",[1829,102580,102581],{},"Python 虚拟环境创建",[1829,102583,102584],{},[23,102585,102586],{},"mujoco.MjModel",[1829,102588,102589],{},[23,102590,102591],{},"mujoco.MjData",[1829,102593,102594],{},[23,102595,102596],{},"mujoco.mj_step(model, data)",[19,102598,102599],{},"MuJoCo 中最重要的两个对象:",[802,102601,102602,102612],{},[805,102603,102604],{},[808,102605,102606,102609],{},[811,102607,102608],{"align":813},"对象",[811,102610,102611],{"align":813},"含义",[819,102613,102614,102624],{},[808,102615,102616,102621],{},[824,102617,102618],{"align":813},[23,102619,102620],{},"MjModel",[824,102622,102623],{"align":813},"模型结构，来自 XML，基本不随时间变化",[808,102625,102626,102631],{},[824,102627,102628],{"align":813},[23,102629,102630],{},"MjData",[824,102632,102633],{"align":813},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[19,102635,102636],{},"可以先用一个类比理解：",[802,102638,102639,102649],{},[805,102640,102641],{},[808,102642,102643,102646],{},[811,102644,102645],{"align":813},"类比",[811,102647,102648],{"align":813},"MuJoCo 对象",[819,102650,102651,102660,102669],{},[808,102652,102653,102656],{},[824,102654,102655],{"align":813},"游戏地图和角色配置",[824,102657,102658],{"align":813},[23,102659,102620],{},[808,102661,102662,102665],{},[824,102663,102664],{"align":813},"游戏运行到当前帧的状态",[824,102666,102667],{"align":813},[23,102668,102630],{},[808,102670,102671,102674],{},[824,102672,102673],{"align":813},"前进一帧",[824,102675,102676],{"align":813},[23,102677,102596],{},[14,102679,102681],{"id":102680},"_2环境与依赖安装","2.环境与依赖安装",[19,102683,102684],{},"Fedora 44 系统依赖:",[231,102686,102688],{"className":25768,"code":102687,"language":25770,"meta":236,"style":236},"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",[23,102689,102690,102702,102715,102728,102738,102748,102767],{"__ignoreMap":236},[240,102691,102692,102694,102696,102698,102700],{"class":242,"line":243},[240,102693,26523],{"class":436},[240,102695,28261],{"class":443},[240,102697,25780],{"class":443},[240,102699,28346],{"class":264},[240,102701,26625],{"class":264},[240,102703,102704,102707,102710,102713],{"class":242,"line":250},[240,102705,102706],{"class":443},"  python3",[240,102708,102709],{"class":443}," python3-pip",[240,102711,102712],{"class":443}," python3-virtualenv",[240,102714,26625],{"class":264},[240,102716,102717,102720,102723,102726],{"class":242,"line":261},[240,102718,102719],{"class":443},"  mesa-libGL",[240,102721,102722],{"class":443}," mesa-libGLU",[240,102724,102725],{"class":443}," mesa-dri-drivers",[240,102727,26625],{"class":264},[240,102729,102730,102733,102736],{"class":242,"line":277},[240,102731,102732],{"class":443},"  libglvnd-glx",[240,102734,102735],{"class":443}," libglvnd-opengl",[240,102737,26625],{"class":264},[240,102739,102740,102743,102746],{"class":242,"line":294},[240,102741,102742],{"class":443},"  glfw",[240,102744,102745],{"class":443}," glfw-devel",[240,102747,26625],{"class":264},[240,102749,102750,102753,102756,102759,102762,102765],{"class":242,"line":309},[240,102751,102752],{"class":443},"  libX11",[240,102754,102755],{"class":443}," libXcursor",[240,102757,102758],{"class":443}," libXi",[240,102760,102761],{"class":443}," libXinerama",[240,102763,102764],{"class":443}," libXrandr",[240,102766,26625],{"class":264},[240,102768,102769,102772,102775],{"class":242,"line":529},[240,102770,102771],{"class":443},"  gcc",[240,102773,102774],{"class":443}," gcc-c++",[240,102776,102777],{"class":443}," make\n",[19,102779,102780],{},"创建 Python 环境:",[231,102782,102784],{"className":25768,"code":102783,"language":25770,"meta":236,"style":236},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[23,102785,102786,102800,102808],{"__ignoreMap":236},[240,102787,102788,102791,102794,102797],{"class":242,"line":243},[240,102789,102790],{"class":436},"python3",[240,102792,102793],{"class":264}," -m",[240,102795,102796],{"class":443}," venv",[240,102798,102799],{"class":443}," .venv\n",[240,102801,102802,102805],{"class":242,"line":250},[240,102803,102804],{"class":264},"source",[240,102806,102807],{"class":443}," .venv\u002Fbin\u002Factivate\n",[240,102809,102810,102812,102814,102817,102819,102822],{"class":242,"line":261},[240,102811,32326],{"class":436},[240,102813,102793],{"class":264},[240,102815,102816],{"class":443}," pip",[240,102818,25780],{"class":443},[240,102820,102821],{"class":264}," --upgrade",[240,102823,102824],{"class":443}," pip\n",[19,102826,102827],{},"pip 安装:",[231,102829,102831],{"className":25768,"code":102830,"language":25770,"meta":236,"style":236},"pip install \"mujoco>=2.3\" numpy\n",[23,102832,102833],{"__ignoreMap":236},[240,102834,102835,102837,102839,102842],{"class":242,"line":243},[240,102836,25777],{"class":436},[240,102838,25780],{"class":443},[240,102840,102841],{"class":443}," \"mujoco>=2.3\"",[240,102843,102844],{"class":443}," numpy\n",[19,102846,102847],{},"安装完成后，先做最小检查：",[231,102849,102851],{"className":25768,"code":102850,"language":25770,"meta":236,"style":236},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[23,102852,102853],{"__ignoreMap":236},[240,102854,102855,102857,102859],{"class":242,"line":243},[240,102856,32326],{"class":436},[240,102858,32304],{"class":264},[240,102860,102861],{"class":443}," \"import mujoco; print(mujoco.__version__)\"\n",[19,102863,102864],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[19,102866,102867],{},"conda 安装:",[231,102869,102871],{"className":25768,"code":102870,"language":25770,"meta":236,"style":236},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[23,102872,102873,102893,102903],{"__ignoreMap":236},[240,102874,102875,102877,102879,102881,102884,102887,102890],{"class":242,"line":243},[240,102876,32276],{"class":436},[240,102878,31122],{"class":443},[240,102880,27062],{"class":264},[240,102882,102883],{"class":443}," mujoco-study",[240,102885,102886],{"class":443}," python=",[240,102888,102889],{"class":264},"3.10",[240,102891,102892],{"class":264}," -y\n",[240,102894,102895,102897,102900],{"class":242,"line":250},[240,102896,32276],{"class":436},[240,102898,102899],{"class":443}," activate",[240,102901,102902],{"class":443}," mujoco-study\n",[240,102904,102905,102907,102909,102911],{"class":242,"line":261},[240,102906,25777],{"class":436},[240,102908,25780],{"class":443},[240,102910,102841],{"class":443},[240,102912,102844],{"class":443},[19,102914,102915],{},"版本冲突说明:",[1826,102917,102918,102924,102934,102943],{},[1829,102919,102920,102921,30331],{},"不要安装 ",[23,102922,102923],{},"mujoco-py",[1829,102925,102926,102927,102929,102930,102933],{},"如果旧项目里同时安装了 ",[23,102928,102923],{}," 和 ",[23,102931,102932],{},"mujoco","，建议新建干净虚拟环境。",[1829,102935,102936,102939,102940,30331],{},[23,102937,102938],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[23,102941,102942],{},"~\u002F.mujoco\u002Fmujoco210",[1829,102944,102945,102946,84453,102949,102952],{},"离屏渲染可能涉及 OpenGL 后端，",[23,102947,102948],{},"MUJOCO_GL=egl",[23,102950,102951],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[14,102954,102956],{"id":102955},"_3核心概念解释","3.核心概念解释",[19,102958,102959],{},"MuJoCo 的基本执行流程:",[231,102961,102964],{"className":102962,"code":102963,"language":7139,"meta":236},[7137],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[23,102965,102963],{"__ignoreMap":236},[19,102967,102968,102970],{},[23,102969,102620],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[19,102972,102973,102975,102976,46,102979,46,102982,46,102985,46,102988,30331],{},[23,102974,102630],{}," 存放仿真运行时状态，例如 ",[23,102977,102978],{},"data.time",[23,102980,102981],{},"data.qpos",[23,102983,102984],{},"data.qvel",[23,102986,102987],{},"data.ctrl",[23,102989,102990],{},"data.xpos",[32,102992,102994],{"id":102993},"xml-是什么","XML 是什么",[19,102996,102997],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[231,102999,103001],{"className":55003,"code":103000,"language":55005,"meta":236,"style":236},"\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",[23,103002,103003,103025,103056],{"__ignoreMap":236},[240,103004,103005,103007,103009,103011,103013,103015,103018,103020,103023],{"class":242,"line":243},[240,103006,431],{"class":257},[240,103008,53738],{"class":253},[240,103010,16869],{"class":436},[240,103012,440],{"class":257},[240,103014,55426],{"class":443},[240,103016,103017],{"class":436}," pos",[240,103019,440],{"class":257},[240,103021,103022],{"class":443},"\"0 0 1\"",[240,103024,447],{"class":257},[240,103026,103027,103029,103032,103034,103036,103039,103041,103043,103045,103048,103050,103053],{"class":242,"line":250},[240,103028,452],{"class":257},[240,103030,103031],{"class":253},"geom",[240,103033,16869],{"class":436},[240,103035,440],{"class":257},[240,103037,103038],{"class":443},"\"box_geom\"",[240,103040,55759],{"class":436},[240,103042,440],{"class":257},[240,103044,55426],{"class":443},[240,103046,103047],{"class":436}," size",[240,103049,440],{"class":257},[240,103051,103052],{"class":443},"\"0.1 0.1 0.1\"",[240,103054,103055],{"class":257},"\u002F>\n",[240,103057,103058,103060,103062],{"class":242,"line":261},[240,103059,592],{"class":257},[240,103061,53738],{"class":253},[240,103063,447],{"class":257},[19,103065,103066],{},"这段意思是：",[1826,103068,103069,103075,103082],{},[1829,103070,103071,103072,103074],{},"创建一个叫 ",[23,103073,55649],{}," 的刚体。",[1829,103076,103077,103078,103081],{},"它初始放在 ",[23,103079,103080],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[1829,103083,103084],{},"它里面有一个盒子形状的几何体。",[32,103086,103088],{"id":103087},"timestep-是什么","timestep 是什么",[19,103090,103091],{},"XML 里的：",[231,103093,103095],{"className":55003,"code":103094,"language":55005,"meta":236,"style":236},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[23,103096,103097],{"__ignoreMap":236},[240,103098,103099,103101,103103,103106,103108,103111,103114,103116,103119],{"class":242,"line":243},[240,103100,431],{"class":257},[240,103102,71089],{"class":253},[240,103104,103105],{"class":436}," timestep",[240,103107,440],{"class":257},[240,103109,103110],{"class":443},"\"0.01\"",[240,103112,103113],{"class":436}," gravity",[240,103115,440],{"class":257},[240,103117,103118],{"class":443},"\"0 0 -9.81\"",[240,103120,103055],{"class":257},[19,103122,103123,103124,103127,103128,103130],{},"表示每调用一次 ",[23,103125,103126],{},"mj_step","，仿真时间前进 ",[23,103129,40932],{}," 秒。循环 100 次，大约就是 1 秒：",[231,103132,103135],{"className":103133,"code":103134,"language":7139,"meta":236},[7137],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[23,103136,103134],{"__ignoreMap":236},[32,103138,103140],{"id":103139},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[19,103142,103143],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[231,103145,103148],{"className":103146,"code":103147,"language":7139,"meta":236},[7137],"x y z qw qx qy qz\n",[23,103149,103147],{"__ignoreMap":236},[19,103151,103152,103153,103156,103157,103160],{},"表示一个自由刚体的位置和姿态。其中 ",[23,103154,103155],{},"x y z"," 是位置，",[23,103158,103159],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[14,103162,103164],{"id":103163},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[19,103166,103167],{},"新建文件:",[231,103169,103171],{"className":25768,"code":103170,"language":25770,"meta":236,"style":236},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[23,103172,103173,103183,103190],{"__ignoreMap":236},[240,103174,103175,103178,103180],{"class":242,"line":243},[240,103176,103177],{"class":436},"mkdir",[240,103179,31162],{"class":264},[240,103181,103182],{"class":443}," mujoco_tutorial\n",[240,103184,103185,103188],{"class":242,"line":250},[240,103186,103187],{"class":264},"cd",[240,103189,103182],{"class":443},[240,103191,103192,103195],{"class":242,"line":261},[240,103193,103194],{"class":436},"touch",[240,103196,103197],{"class":443}," ch1_first_sim.py\n",[19,103199,103200],{},"写入:",[231,103202,103204],{"className":32324,"code":103203,"language":32326,"meta":236,"style":236},"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",[23,103205,103206,103213,103217,103221,103231,103236,103241,103245,103250,103255,103259,103264,103269,103274,103279,103284,103289,103293,103297,103301,103314,103328,103338,103342,103354,103366,103378,103390,103402,103406,103423,103428,103432,103443,103454,103458,103462,103476],{"__ignoreMap":236},[240,103207,103208,103210],{"class":242,"line":243},[240,103209,32338],{"class":288},[240,103211,103212],{"class":257}," mujoco\n",[240,103214,103215],{"class":242,"line":250},[240,103216,4353],{"emptyLinePlaceholder":2051},[240,103218,103219],{"class":242,"line":261},[240,103220,4353],{"emptyLinePlaceholder":2051},[240,103222,103223,103226,103228],{"class":242,"line":277},[240,103224,103225],{"class":264},"XML",[240,103227,15514],{"class":288},[240,103229,103230],{"class":443}," \"\"\"\n",[240,103232,103233],{"class":242,"line":294},[240,103234,103235],{"class":443},"\u003Cmujoco model=\"first_sim\">\n",[240,103237,103238],{"class":242,"line":309},[240,103239,103240],{"class":443},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[240,103242,103243],{"class":242,"line":529},[240,103244,4353],{"emptyLinePlaceholder":2051},[240,103246,103247],{"class":242,"line":549},[240,103248,103249],{"class":443},"  \u003Cworldbody>\n",[240,103251,103252],{"class":242,"line":569},[240,103253,103254],{"class":443},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[240,103256,103257],{"class":242,"line":589},[240,103258,4353],{"emptyLinePlaceholder":2051},[240,103260,103261],{"class":242,"line":715},[240,103262,103263],{"class":443},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[240,103265,103266],{"class":242,"line":727},[240,103267,103268],{"class":443},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[240,103270,103271],{"class":242,"line":1730},[240,103272,103273],{"class":443},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[240,103275,103276],{"class":242,"line":3582},[240,103277,103278],{"class":443},"    \u003C\u002Fbody>\n",[240,103280,103281],{"class":242,"line":3596},[240,103282,103283],{"class":443},"  \u003C\u002Fworldbody>\n",[240,103285,103286],{"class":242,"line":3601},[240,103287,103288],{"class":443},"\u003C\u002Fmujoco>\n",[240,103290,103291],{"class":242,"line":3607},[240,103292,97611],{"class":443},[240,103294,103295],{"class":242,"line":3628},[240,103296,4353],{"emptyLinePlaceholder":2051},[240,103298,103299],{"class":242,"line":3633},[240,103300,4353],{"emptyLinePlaceholder":2051},[240,103302,103303,103305,103307,103310,103312],{"class":242,"line":3647},[240,103304,33893],{"class":288},[240,103306,3926],{"class":436},[240,103308,103309],{"class":257},"() -> ",[240,103311,97599],{"class":264},[240,103313,5691],{"class":257},[240,103315,103316,103319,103321,103324,103326],{"class":242,"line":3652},[240,103317,103318],{"class":257},"    model ",[240,103320,440],{"class":288},[240,103322,103323],{"class":257}," mujoco.MjModel.from_xml_string(",[240,103325,103225],{"class":264},[240,103327,2129],{"class":257},[240,103329,103330,103333,103335],{"class":242,"line":3681},[240,103331,103332],{"class":257},"    data ",[240,103334,440],{"class":288},[240,103336,103337],{"class":257}," mujoco.MjData(model)\n",[240,103339,103340],{"class":242,"line":3686},[240,103341,4353],{"emptyLinePlaceholder":2051},[240,103343,103344,103346,103348,103351],{"class":242,"line":3703},[240,103345,33245],{"class":264},[240,103347,789],{"class":257},[240,103349,103350],{"class":443},"\"nq:\"",[240,103352,103353],{"class":257},", model.nq)\n",[240,103355,103356,103358,103360,103363],{"class":242,"line":3708},[240,103357,33245],{"class":264},[240,103359,789],{"class":257},[240,103361,103362],{"class":443},"\"nv:\"",[240,103364,103365],{"class":257},", model.nv)\n",[240,103367,103368,103370,103372,103375],{"class":242,"line":3713},[240,103369,33245],{"class":264},[240,103371,789],{"class":257},[240,103373,103374],{"class":443},"\"nu:\"",[240,103376,103377],{"class":257},", model.nu)\n",[240,103379,103380,103382,103384,103387],{"class":242,"line":3718},[240,103381,33245],{"class":264},[240,103383,789],{"class":257},[240,103385,103386],{"class":443},"\"initial time:\"",[240,103388,103389],{"class":257},", data.time)\n",[240,103391,103392,103394,103396,103399],{"class":242,"line":3732},[240,103393,33245],{"class":264},[240,103395,789],{"class":257},[240,103397,103398],{"class":443},"\"initial qpos:\"",[240,103400,103401],{"class":257},", data.qpos.copy())\n",[240,103403,103404],{"class":242,"line":3737},[240,103405,4353],{"emptyLinePlaceholder":2051},[240,103407,103408,103410,103413,103415,103417,103419,103421],{"class":242,"line":4530},[240,103409,5153],{"class":288},[240,103411,103412],{"class":257}," _ ",[240,103414,27989],{"class":288},[240,103416,34389],{"class":264},[240,103418,789],{"class":257},[240,103420,285],{"class":264},[240,103422,32732],{"class":257},[240,103424,103425],{"class":242,"line":4544},[240,103426,103427],{"class":257},"        mujoco.mj_step(model, data)\n",[240,103429,103430],{"class":242,"line":4552},[240,103431,4353],{"emptyLinePlaceholder":2051},[240,103433,103434,103436,103438,103441],{"class":242,"line":4557},[240,103435,33245],{"class":264},[240,103437,789],{"class":257},[240,103439,103440],{"class":443},"\"final time:\"",[240,103442,103389],{"class":257},[240,103444,103445,103447,103449,103452],{"class":242,"line":4563},[240,103446,33245],{"class":264},[240,103448,789],{"class":257},[240,103450,103451],{"class":443},"\"final qpos:\"",[240,103453,103401],{"class":257},[240,103455,103456],{"class":242,"line":4569},[240,103457,4353],{"emptyLinePlaceholder":2051},[240,103459,103460],{"class":242,"line":4574},[240,103461,4353],{"emptyLinePlaceholder":2051},[240,103463,103464,103466,103468,103471,103474],{"class":242,"line":9899},[240,103465,3489],{"class":288},[240,103467,33166],{"class":264},[240,103469,103470],{"class":288}," ==",[240,103472,103473],{"class":443}," \"__main__\"",[240,103475,5691],{"class":257},[240,103477,103478],{"class":242,"line":9923},[240,103479,103480],{"class":257},"    main()\n",[32,103482,103483],{"id":103483},"代码逐段解释",[19,103485,103486],{},"导入库：",[231,103488,103490],{"className":32324,"code":103489,"language":32326,"meta":236,"style":236},"import mujoco\n",[23,103491,103492],{"__ignoreMap":236},[240,103493,103494,103496],{"class":242,"line":243},[240,103495,32338],{"class":288},[240,103497,103212],{"class":257},[19,103499,103500],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[19,103502,103503],{},"定义 XML：",[231,103505,103507],{"className":32324,"code":103506,"language":32326,"meta":236,"style":236},"XML = \"\"\"\n...\n\"\"\"\n",[23,103508,103509,103517,103522],{"__ignoreMap":236},[240,103510,103511,103513,103515],{"class":242,"line":243},[240,103512,103225],{"class":264},[240,103514,15514],{"class":288},[240,103516,103230],{"class":443},[240,103518,103519],{"class":242,"line":250},[240,103520,103521],{"class":443},"...\n",[240,103523,103524],{"class":242,"line":261},[240,103525,97611],{"class":443},[19,103527,103528,103529,103532],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[23,103530,103531],{},"freejoint"," 的方块。",[19,103534,103535],{},"编译模型：",[231,103537,103539],{"className":32324,"code":103538,"language":32326,"meta":236,"style":236},"model = mujoco.MjModel.from_xml_string(XML)\n",[23,103540,103541],{"__ignoreMap":236},[240,103542,103543,103546,103548,103550,103552],{"class":242,"line":243},[240,103544,103545],{"class":257},"model ",[240,103547,440],{"class":288},[240,103549,103323],{"class":257},[240,103551,103225],{"class":264},[240,103553,2129],{"class":257},[19,103555,103556],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[19,103558,103559],{},"创建数据：",[231,103561,103563],{"className":32324,"code":103562,"language":32326,"meta":236,"style":236},"data = mujoco.MjData(model)\n",[23,103564,103565],{"__ignoreMap":236},[240,103566,103567,103570,103572],{"class":242,"line":243},[240,103568,103569],{"class":257},"data ",[240,103571,440],{"class":288},[240,103573,103337],{"class":257},[19,103575,103576,103578,103579,103581],{},[23,103577,35347],{}," 会保存仿真当前状态。刚创建时，时间是 ",[23,103580,1274],{},"，方块还在初始位置。",[19,103583,103584],{},"推进仿真：",[231,103586,103588],{"className":32324,"code":103587,"language":32326,"meta":236,"style":236},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[23,103589,103590,103606],{"__ignoreMap":236},[240,103591,103592,103594,103596,103598,103600,103602,103604],{"class":242,"line":243},[240,103593,4977],{"class":288},[240,103595,103412],{"class":257},[240,103597,27989],{"class":288},[240,103599,34389],{"class":264},[240,103601,789],{"class":257},[240,103603,285],{"class":264},[240,103605,32732],{"class":257},[240,103607,103608],{"class":242,"line":250},[240,103609,103610],{"class":257},"    mujoco.mj_step(model, data)\n",[19,103612,103613,103614,103616],{},"每次 ",[23,103615,103126],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[32,103618,103619],{"id":103619},"代码逐行细讲",[19,103621,103622],{},"下面把完整代码按新手视角拆开讲。",[231,103624,103625],{"className":32324,"code":103489,"language":32326,"meta":236,"style":236},[23,103626,103627],{"__ignoreMap":236},[240,103628,103629,103631],{"class":242,"line":243},[240,103630,32338],{"class":288},[240,103632,103212],{"class":257},[19,103634,103635,103637,103638,46,103640,46,103642,30331],{},[23,103636,32338],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[23,103639,102586],{},[23,103641,102591],{},[23,103643,103644],{},"mujoco.mj_step",[231,103646,103647],{"className":32324,"code":103506,"language":32326,"meta":236,"style":236},[23,103648,103649,103657,103661],{"__ignoreMap":236},[240,103650,103651,103653,103655],{"class":242,"line":243},[240,103652,103225],{"class":264},[240,103654,15514],{"class":288},[240,103656,103230],{"class":443},[240,103658,103659],{"class":242,"line":250},[240,103660,103521],{"class":443},[240,103662,103663],{"class":242,"line":261},[240,103664,97611],{"class":443},[19,103666,103667,103669,103670,103673],{},[23,103668,103225],{}," 是一个变量名。右边的三引号 ",[23,103671,103672],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[231,103675,103676],{"className":55003,"code":103235,"language":55005,"meta":236,"style":236},[23,103677,103678],{"__ignoreMap":236},[240,103679,103680,103682,103684,103687,103689,103692],{"class":242,"line":243},[240,103681,431],{"class":257},[240,103683,102932],{"class":253},[240,103685,103686],{"class":436}," model",[240,103688,440],{"class":257},[240,103690,103691],{"class":443},"\"first_sim\"",[240,103693,447],{"class":257},[19,103695,103696,103697,103700,103701,30331],{},"这是 XML 的根标签。",[23,103698,103699],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[23,103702,103703],{},"first_sim",[231,103705,103706],{"className":55003,"code":103094,"language":55005,"meta":236,"style":236},[23,103707,103708],{"__ignoreMap":236},[240,103709,103710,103712,103714,103716,103718,103720,103722,103724,103726],{"class":242,"line":243},[240,103711,431],{"class":257},[240,103713,71089],{"class":253},[240,103715,103105],{"class":436},[240,103717,440],{"class":257},[240,103719,103110],{"class":443},[240,103721,103113],{"class":436},[240,103723,440],{"class":257},[240,103725,103118],{"class":443},[240,103727,103055],{"class":257},[19,103729,103730,103732,103733,103736,103737,103740],{},[23,103731,71089],{}," 用来设置仿真参数。",[23,103734,103735],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[23,103738,103739],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[231,103742,103744],{"className":55003,"code":103743,"language":55005,"meta":236,"style":236},"\u003Cworldbody>\n",[23,103745,103746],{"__ignoreMap":236},[240,103747,103748,103750,103753],{"class":242,"line":243},[240,103749,431],{"class":257},[240,103751,103752],{"class":253},"worldbody",[240,103754,447],{"class":257},[19,103756,103757,103759],{},[23,103758,103752],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[231,103761,103763],{"className":55003,"code":103762,"language":55005,"meta":236,"style":236},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[23,103764,103765],{"__ignoreMap":236},[240,103766,103767,103769,103771,103773,103775,103778,103780,103782,103785,103787,103789,103792,103794,103796,103799],{"class":242,"line":243},[240,103768,431],{"class":257},[240,103770,103031],{"class":253},[240,103772,16869],{"class":436},[240,103774,440],{"class":257},[240,103776,103777],{"class":443},"\"floor\"",[240,103779,55759],{"class":436},[240,103781,440],{"class":257},[240,103783,103784],{"class":443},"\"plane\"",[240,103786,103047],{"class":436},[240,103788,440],{"class":257},[240,103790,103791],{"class":443},"\"2 2 0.1\"",[240,103793,80681],{"class":436},[240,103795,440],{"class":257},[240,103797,103798],{"class":443},"\"0.8 0.8 0.8 1\"",[240,103800,103055],{"class":257},[19,103802,103803,103804,103806,103807,103810,103811,103814,103815,103817],{},"这行创建地面。",[23,103805,103031],{}," 是几何体。",[23,103808,103809],{},"name=\"floor\""," 是名字。",[23,103812,103813],{},"type=\"plane\""," 表示平面。",[23,103816,1269],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[231,103819,103821],{"className":55003,"code":103820,"language":55005,"meta":236,"style":236},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[23,103822,103823],{"__ignoreMap":236},[240,103824,103825,103827,103829,103831,103833,103835,103837,103839,103841],{"class":242,"line":243},[240,103826,431],{"class":257},[240,103828,53738],{"class":253},[240,103830,16869],{"class":436},[240,103832,440],{"class":257},[240,103834,55426],{"class":443},[240,103836,103017],{"class":436},[240,103838,440],{"class":257},[240,103840,103022],{"class":443},[240,103842,447],{"class":257},[19,103844,103845,103846,30331,103848,103851,103852,103854],{},"这行创建一个刚体，名字叫 ",[23,103847,55649],{},[23,103849,103850],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[23,103853,103080],{},"，也就是离地面 1 米高。",[231,103856,103858],{"className":55003,"code":103857,"language":55005,"meta":236,"style":236},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[23,103859,103860],{"__ignoreMap":236},[240,103861,103862,103864,103866,103868,103870,103873],{"class":242,"line":243},[240,103863,431],{"class":257},[240,103865,103531],{"class":253},[240,103867,16869],{"class":436},[240,103869,440],{"class":257},[240,103871,103872],{"class":443},"\"box_free\"",[240,103874,103055],{"class":257},[19,103876,103877,103878,103880],{},"这行很重要。",[23,103879,103531],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[231,103882,103884],{"className":55003,"code":103883,"language":55005,"meta":236,"style":236},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[23,103885,103886],{"__ignoreMap":236},[240,103887,103888,103890,103892,103894,103896,103898,103900,103902,103904,103906,103908,103910,103913,103915,103917,103919,103921,103924],{"class":242,"line":243},[240,103889,431],{"class":257},[240,103891,103031],{"class":253},[240,103893,16869],{"class":436},[240,103895,440],{"class":257},[240,103897,103038],{"class":443},[240,103899,55759],{"class":436},[240,103901,440],{"class":257},[240,103903,55426],{"class":443},[240,103905,103047],{"class":436},[240,103907,440],{"class":257},[240,103909,103052],{"class":443},[240,103911,103912],{"class":436}," mass",[240,103914,440],{"class":257},[240,103916,5630],{"class":443},[240,103918,80681],{"class":436},[240,103920,440],{"class":257},[240,103922,103923],{"class":443},"\"1 0 0 1\"",[240,103925,103055],{"class":257},[19,103927,103928,103929,103932,103933,103936,103937,103940,103941,103944],{},"这行给 box body 添加一个盒子形状。",[23,103930,103931],{},"type=\"box\""," 表示形状是盒子。",[23,103934,103935],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[23,103938,103939],{},"mass=\"1\""," 表示质量是 1。",[23,103942,103943],{},"rgba=\"1 0 0 1\""," 表示红色。",[231,103946,103948],{"className":32324,"code":103947,"language":32326,"meta":236,"style":236},"def main() -> None:\n",[23,103949,103950],{"__ignoreMap":236},[240,103951,103952,103954,103956,103958,103960],{"class":242,"line":243},[240,103953,33893],{"class":288},[240,103955,3926],{"class":436},[240,103957,103309],{"class":257},[240,103959,97599],{"class":264},[240,103961,5691],{"class":257},[19,103963,103964,103966,103967,103970,103971,103974],{},[23,103965,33893],{}," 用来定义函数。这里定义了一个叫 ",[23,103968,103969],{},"main"," 的函数。",[23,103972,103973],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[231,103976,103977],{"className":32324,"code":103538,"language":32326,"meta":236,"style":236},[23,103978,103979],{"__ignoreMap":236},[240,103980,103981,103983,103985,103987,103989],{"class":242,"line":243},[240,103982,103545],{"class":257},[240,103984,440],{"class":288},[240,103986,103323],{"class":257},[240,103988,103225],{"class":264},[240,103990,2129],{"class":257},[19,103992,103993,103994,103997],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[23,103995,103996],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[231,103999,104000],{"className":32324,"code":103562,"language":32326,"meta":236,"style":236},[23,104001,104002],{"__ignoreMap":236},[240,104003,104004,104006,104008],{"class":242,"line":243},[240,104005,103569],{"class":257},[240,104007,440],{"class":288},[240,104009,103337],{"class":257},[19,104011,104012,104013,104015,104016,104018],{},"这行创建仿真数据。",[23,104014,35347],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[23,104017,35347],{}," 都会变化。",[231,104020,104022],{"className":32324,"code":104021,"language":32326,"meta":236,"style":236},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[23,104023,104024,104034,104044],{"__ignoreMap":236},[240,104025,104026,104028,104030,104032],{"class":242,"line":243},[240,104027,32361],{"class":264},[240,104029,789],{"class":257},[240,104031,103350],{"class":443},[240,104033,103353],{"class":257},[240,104035,104036,104038,104040,104042],{"class":242,"line":250},[240,104037,32361],{"class":264},[240,104039,789],{"class":257},[240,104041,103362],{"class":443},[240,104043,103365],{"class":257},[240,104045,104046,104048,104050,104052],{"class":242,"line":261},[240,104047,32361],{"class":264},[240,104049,789],{"class":257},[240,104051,103374],{"class":443},[240,104053,103377],{"class":257},[19,104055,104056,104058,104059,104062,104063,104066,104067,104070,104071,104074],{},[23,104057,32361],{}," 用来输出信息。",[23,104060,104061],{},"model.nq"," 是位置变量数量，",[23,104064,104065],{},"model.nv"," 是速度变量数量，",[23,104068,104069],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[23,104072,104073],{},"nu"," 是 0。",[231,104076,104078],{"className":32324,"code":104077,"language":32326,"meta":236,"style":236},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[23,104079,104080,104090],{"__ignoreMap":236},[240,104081,104082,104084,104086,104088],{"class":242,"line":243},[240,104083,32361],{"class":264},[240,104085,789],{"class":257},[240,104087,103386],{"class":443},[240,104089,103389],{"class":257},[240,104091,104092,104094,104096,104098],{"class":242,"line":250},[240,104093,32361],{"class":264},[240,104095,789],{"class":257},[240,104097,103398],{"class":443},[240,104099,103401],{"class":257},[19,104101,104102,104103,104105,104106,104108,104109,104112],{},"这里打印初始时间和初始位置。",[23,104104,102978],{}," 一开始是 0。",[23,104107,102981],{}," 是位置数组。",[23,104110,104111],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[231,104114,104115],{"className":32324,"code":103587,"language":32326,"meta":236,"style":236},[23,104116,104117,104133],{"__ignoreMap":236},[240,104118,104119,104121,104123,104125,104127,104129,104131],{"class":242,"line":243},[240,104120,4977],{"class":288},[240,104122,103412],{"class":257},[240,104124,27989],{"class":288},[240,104126,34389],{"class":264},[240,104128,789],{"class":257},[240,104130,285],{"class":264},[240,104132,32732],{"class":257},[240,104134,104135],{"class":242,"line":250},[240,104136,103610],{"class":257},[19,104138,104139,104141,104142,104145,104146,104148,104149,104151],{},[23,104140,4977],{}," 是循环。",[23,104143,104144],{},"range(100)"," 表示循环 100 次。",[23,104147,3085],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[23,104150,103126],{},"，仿真就前进一步。",[231,104153,104155],{"className":32324,"code":104154,"language":32326,"meta":236,"style":236},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[23,104156,104157,104167],{"__ignoreMap":236},[240,104158,104159,104161,104163,104165],{"class":242,"line":243},[240,104160,32361],{"class":264},[240,104162,789],{"class":257},[240,104164,103440],{"class":443},[240,104166,103389],{"class":257},[240,104168,104169,104171,104173,104175],{"class":242,"line":250},[240,104170,32361],{"class":264},[240,104172,789],{"class":257},[240,104174,103451],{"class":443},[240,104176,103401],{"class":257},[19,104178,104179],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[231,104181,104183],{"className":32324,"code":104182,"language":32326,"meta":236,"style":236},"if __name__ == \"__main__\":\n    main()\n",[23,104184,104185,104197],{"__ignoreMap":236},[240,104186,104187,104189,104191,104193,104195],{"class":242,"line":243},[240,104188,3489],{"class":288},[240,104190,33166],{"class":264},[240,104192,103470],{"class":288},[240,104194,103473],{"class":443},[240,104196,5691],{"class":257},[240,104198,104199],{"class":242,"line":250},[240,104200,103480],{"class":257},[19,104202,104203,104204,104207,104208,30331],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[23,104205,104206],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[23,104209,104206],{},[19,104211,104212],{},"运行:",[231,104214,104216],{"className":25768,"code":104215,"language":25770,"meta":236,"style":236},"python ch1_first_sim.py\n",[23,104217,104218],{"__ignoreMap":236},[240,104219,104220,104222],{"class":242,"line":243},[240,104221,32326],{"class":436},[240,104223,103197],{"class":443},[14,104225,104227],{"id":104226},"_5运行结果说明","5.运行结果说明",[19,104229,104230],{},"你应该看到类似输出:",[231,104232,104235],{"className":104233,"code":104234,"language":7139,"meta":236},[7137],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[23,104236,104234],{"__ignoreMap":236},[19,104238,104239,104241,104242,104245,104246,30331],{},[23,104240,103531],{}," 有 7 个位置变量: ",[23,104243,104244],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[23,104247,104248],{},"vx vy vz wx wy wz",[19,104250,104251,104252,104255],{},"你还会看到 ",[23,104253,104254],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[14,104257,104259],{"id":104258},"_6验证步骤","6.验证步骤",[19,104261,104262],{},"确认版本:",[231,104264,104265],{"className":25768,"code":102850,"language":25770,"meta":236,"style":236},[23,104266,104267],{"__ignoreMap":236},[240,104268,104269,104271,104273],{"class":242,"line":243},[240,104270,32326],{"class":436},[240,104272,32304],{"class":264},[240,104274,102861],{"class":443},[19,104276,104277],{},"确认导入的是官方 bindings:",[231,104279,104281],{"className":25768,"code":104280,"language":25770,"meta":236,"style":236},"python -c \"import mujoco; print(mujoco)\"\n",[23,104282,104283],{"__ignoreMap":236},[240,104284,104285,104287,104289],{"class":242,"line":243},[240,104286,32326],{"class":436},[240,104288,32304],{"class":264},[240,104290,104291],{"class":443}," \"import mujoco; print(mujoco)\"\n",[19,104293,104294],{},"运行程序:",[231,104296,104297],{"className":25768,"code":104215,"language":25770,"meta":236,"style":236},[23,104298,104299],{"__ignoreMap":236},[240,104300,104301,104303],{"class":242,"line":243},[240,104302,32326],{"class":436},[240,104304,103197],{"class":443},[19,104306,104307,104308,104311,104312,30331],{},"检查 ",[23,104309,104310],{},"final time"," 是否约等于 ",[23,104313,104314],{},"1.0",[19,104316,104317],{},"再做几个小实验：",[1826,104319,104320,104330,104338,104351],{},[1829,104321,104322,104323,104325,104326,104329],{},"把 ",[23,104324,103850],{}," 改成 ",[23,104327,104328],{},"pos=\"0 0 2\"","，观察初始高度变化。",[1829,104331,104322,104332,104325,104334,104337],{},[23,104333,103739],{},[23,104335,104336],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[1829,104339,104322,104340,104325,104342,104345,104346,104348,104349,30331],{},[23,104341,103735],{},[23,104343,104344],{},"timestep=\"0.005\"","，观察 100 步后的 ",[23,104347,104310],{}," 是否变成约 ",[23,104350,37275],{},[1829,104352,104353,104354,104357],{},"删除 ",[23,104355,104356],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[19,104359,104360],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[14,104362,104364],{"id":104363},"_7常见错误与解决方案","7.常见错误与解决方案",[32,104366,104368],{"id":104367},"modulenotfounderror-no-module-named-mujoco",[23,104369,104370],{},"ModuleNotFoundError: No module named 'mujoco'",[19,104372,104373],{},"解决:",[231,104375,104377],{"className":25768,"code":104376,"language":25770,"meta":236,"style":236},"pip install \"mujoco>=2.3\"\n",[23,104378,104379],{"__ignoreMap":236},[240,104380,104381,104383,104385],{"class":242,"line":243},[240,104382,25777],{"class":436},[240,104384,25780],{"class":443},[240,104386,104387],{"class":443}," \"mujoco>=2.3\"\n",[32,104389,104391],{"id":104390},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[19,104393,104394],{},"先安装系统依赖:",[231,104396,104398],{"className":25768,"code":104397,"language":25770,"meta":236,"style":236},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[23,104399,104400],{"__ignoreMap":236},[240,104401,104402,104404,104406,104408,104410,104413,104415,104418,104420,104423,104425],{"class":242,"line":243},[240,104403,26523],{"class":436},[240,104405,28261],{"class":443},[240,104407,25780],{"class":443},[240,104409,28346],{"class":264},[240,104411,104412],{"class":443}," mesa-libGL",[240,104414,102725],{"class":443},[240,104416,104417],{"class":443}," glfw",[240,104419,102745],{"class":443},[240,104421,104422],{"class":443}," libX11",[240,104424,102758],{"class":443},[240,104426,104427],{"class":443}," libXrandr\n",[32,104429,104431],{"id":104430},"xml-解析失败","XML 解析失败",[19,104433,104434],{},"检查:",[1826,104436,104437,104440,104443,104449],{},[1829,104438,104439],{},"标签是否闭合",[1829,104441,104442],{},"属性是否带引号",[1829,104444,104445,104446],{},"根节点是否是 ",[23,104447,104448],{},"\u003Cmujoco>",[1829,104450,104451,104453,104454,104457],{},[23,104452,53738],{}," 是否放在 ",[23,104455,104456],{},"\u003Cworldbody>"," 内部",[32,104459,104461,104463,104464],{"id":104460},"final-time-不是严格等于-10",[23,104462,104310],{}," 不是严格等于 ",[23,104465,104314],{},[19,104467,104468],{},"这通常不是错误。浮点数计算可能得到：",[231,104470,104473],{"className":104471,"code":104472,"language":7139,"meta":236},[7137],"1.0000000000000007\n",[23,104474,104472],{"__ignoreMap":236},[19,104476,104477,104478,104480],{},"只要接近 ",[23,104479,104314],{}," 就正常。",[32,104482,104483],{"id":104483},"方块没有掉下来",[19,104485,104486],{},"检查：",[1826,104488,104489,104495,104501,104506],{},[1829,104490,104491,104492],{},"方块 body 里是否有 ",[23,104493,104494],{},"\u003Cfreejoint\u002F>",[1829,104496,104497,104498],{},"重力是否是 ",[23,104499,104500],{},"0 0 -9.81",[1829,104502,104503,104504],{},"是否真的调用了 ",[23,104505,102596],{},[1829,104507,104508,104509,104511,104512],{},"你看的是否是 ",[23,104510,104254],{},"，不是 ",[23,104513,104514],{},"initial qpos",[14,104516,104518],{"id":104517},"_8本章小结","8.本章小结",[19,104520,104521],{},"本章你已经完成了 MuJoCo 的最小闭环：",[231,104523,104526],{"className":104524,"code":104525,"language":7139,"meta":236},[7137],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[23,104527,104525],{"__ignoreMap":236},[19,104529,104530],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[2019,104532,104533],{},"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":236,"searchDepth":250,"depth":250,"links":104535},[104536,104537,104538,104543,104547,104548,104549,104557],{"id":102557,"depth":250,"text":102558},{"id":102680,"depth":250,"text":102681},{"id":102955,"depth":250,"text":102956,"children":104539},[104540,104541,104542],{"id":102993,"depth":261,"text":102994},{"id":103087,"depth":261,"text":103088},{"id":103139,"depth":261,"text":103140},{"id":103163,"depth":250,"text":103164,"children":104544},[104545,104546],{"id":103483,"depth":261,"text":103483},{"id":103619,"depth":261,"text":103619},{"id":104226,"depth":250,"text":104227},{"id":104258,"depth":250,"text":104259},{"id":104363,"depth":250,"text":104364,"children":104550},[104551,104552,104553,104554,104556],{"id":104367,"depth":261,"text":104370},{"id":104390,"depth":261,"text":104391},{"id":104430,"depth":261,"text":104431},{"id":104460,"depth":261,"text":104555},"final time 不是严格等于 1.0",{"id":104483,"depth":261,"text":104483},{"id":104517,"depth":250,"text":104518},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":102549,"description":236},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":104564,"title":104565,"body":104566,"description":236,"extension":2049,"meta":106221,"navigation":2051,"path":106222,"seo":106223,"stem":106224,"__hash__":106225},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":104567,"toc":106197},[104568,104571,104573,104576,104579,104596,104690,104693,104699,104701,104703,104727,104730,104744,104747,104788,104790,104803,104805,104808,104856,104868,104871,104874,104880,104893,104960,104963,104982,104985,104988,104994,104996,105005,105008,105012,105021,105103,105112,105116,105122,105136,105146,105148,105478,105481,105493,105495,105506,105508,105511,105529,105532,105535,105553,105564,105567,105582,105592,105594,105615,105632,105652,105658,105698,105714,105730,105736,105739,105763,105779,105784,105814,105831,105856,105859,105874,105883,105898,105907,105922,105929,105931,105941,105954,105961,105964,106003,106010,106012,106064,106066,106072,106075,106082,106089,106092,106094,106112,106115,106118,106152,106164,106166,106169,106191,106194],[10,104569,104565],{"id":104570},"_2xml-与-mjcf-物理建模基础",[14,104572,102558],{"id":102557},[19,104574,104575],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[19,104577,104578],{},"本章结束后，你应该能看懂一个简单模型里：",[1826,104580,104581,104584,104587,104590,104593],{},[1829,104582,104583],{},"地面在哪里。",[1829,104585,104586],{},"物体初始位置在哪里。",[1829,104588,104589],{},"几何体是什么形状。",[1829,104591,104592],{},"哪些 body 可以自由运动。",[1829,104594,104595],{},"如何用名字在 Python 里找到 XML 中的对象。",[802,104597,104598,104607],{},[805,104599,104600],{},[808,104601,104602,104605],{},[811,104603,104604],{"align":813},"标签",[811,104606,817],{"align":813},[819,104608,104609,104618,104628,104637,104647,104657,104670,104680],{},[808,104610,104611,104615],{},[824,104612,104613],{"align":813},[23,104614,104448],{},[824,104616,104617],{"align":813},"根节点",[808,104619,104620,104625],{},[824,104621,104622],{"align":813},[23,104623,104624],{},"\u003Coption>",[824,104626,104627],{"align":813},"仿真参数",[808,104629,104630,104634],{},[824,104631,104632],{"align":813},[23,104633,104456],{},[824,104635,104636],{"align":813},"世界中的物体",[808,104638,104639,104644],{},[824,104640,104641],{"align":813},[23,104642,104643],{},"\u003Cbody>",[824,104645,104646],{"align":813},"刚体",[808,104648,104649,104654],{},[824,104650,104651],{"align":813},[23,104652,104653],{},"\u003Cgeom>",[824,104655,104656],{"align":813},"几何体、碰撞体、可视体",[808,104658,104659,104667],{},[824,104660,104661,26925,104664],{"align":813},[23,104662,104663],{},"\u003Cjoint>",[23,104665,104666],{},"\u003Cfreejoint>",[824,104668,104669],{"align":813},"关节",[808,104671,104672,104677],{},[824,104673,104674],{"align":813},[23,104675,104676],{},"\u003Csite>",[824,104678,104679],{"align":813},"标记点",[808,104681,104682,104687],{},[824,104683,104684],{"align":813},[23,104685,104686],{},"\u003Cactuator>",[824,104688,104689],{"align":813},"控制器",[19,104691,104692],{},"初学时可以先记住：",[231,104694,104697],{"className":104695,"code":104696,"language":7139,"meta":236},[7137],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[23,104698,104696],{"__ignoreMap":236},[14,104700,102681],{"id":102680},[19,104702,102684],{},[231,104704,104706],{"className":25768,"code":104705,"language":25770,"meta":236,"style":236},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[23,104707,104708],{"__ignoreMap":236},[240,104709,104710,104712,104714,104716,104718,104720,104722,104724],{"class":242,"line":243},[240,104711,26523],{"class":436},[240,104713,28261],{"class":443},[240,104715,25780],{"class":443},[240,104717,28346],{"class":264},[240,104719,104412],{"class":443},[240,104721,102725],{"class":443},[240,104723,104417],{"class":443},[240,104725,104726],{"class":443}," glfw-devel\n",[19,104728,104729],{},"pip:",[231,104731,104732],{"className":25768,"code":102830,"language":25770,"meta":236,"style":236},[23,104733,104734],{"__ignoreMap":236},[240,104735,104736,104738,104740,104742],{"class":242,"line":243},[240,104737,25777],{"class":436},[240,104739,25780],{"class":443},[240,104741,102841],{"class":443},[240,104743,102844],{"class":443},[19,104745,104746],{},"conda:",[231,104748,104750],{"className":25768,"code":104749,"language":25770,"meta":236,"style":236},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[23,104751,104752,104769,104778],{"__ignoreMap":236},[240,104753,104754,104756,104758,104760,104763,104765,104767],{"class":242,"line":243},[240,104755,32276],{"class":436},[240,104757,31122],{"class":443},[240,104759,27062],{"class":264},[240,104761,104762],{"class":443}," mujoco-xml",[240,104764,102886],{"class":443},[240,104766,102889],{"class":264},[240,104768,102892],{"class":264},[240,104770,104771,104773,104775],{"class":242,"line":250},[240,104772,32276],{"class":436},[240,104774,102899],{"class":443},[240,104776,104777],{"class":443}," mujoco-xml\n",[240,104779,104780,104782,104784,104786],{"class":242,"line":261},[240,104781,25777],{"class":436},[240,104783,25780],{"class":443},[240,104785,102841],{"class":443},[240,104787,102844],{"class":443},[19,104789,102915],{},[1826,104791,104792,104795,104800],{},[1829,104793,104794],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[1829,104796,104797,104798,30331],{},"本章使用基础标签，适用于 ",[23,104799,102938],{},[1829,104801,104802],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[14,104804,102956],{"id":102955},[19,104806,104807],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[231,104809,104811],{"className":55003,"code":104810,"language":55005,"meta":236,"style":236},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[23,104812,104813,104827,104835,104840,104848],{"__ignoreMap":236},[240,104814,104815,104817,104819,104821,104823,104825],{"class":242,"line":243},[240,104816,431],{"class":257},[240,104818,102932],{"class":253},[240,104820,103686],{"class":436},[240,104822,440],{"class":257},[240,104824,64602],{"class":443},[240,104826,447],{"class":257},[240,104828,104829,104831,104833],{"class":242,"line":250},[240,104830,452],{"class":257},[240,104832,103752],{"class":253},[240,104834,447],{"class":257},[240,104836,104837],{"class":242,"line":261},[240,104838,104839],{"class":257},"    ...\n",[240,104841,104842,104844,104846],{"class":242,"line":277},[240,104843,54353],{"class":257},[240,104845,103752],{"class":253},[240,104847,447],{"class":257},[240,104849,104850,104852,104854],{"class":242,"line":294},[240,104851,592],{"class":257},[240,104853,102932],{"class":253},[240,104855,447],{"class":257},[19,104857,104858,104860,104861,104863,104864,104867],{},[23,104859,53738],{}," 表示刚体。",[23,104862,103031],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[23,104865,104866],{},"joint"," 表示刚体相对父刚体如何运动。",[32,104869,104870],{"id":104870},"层级结构非常重要",[19,104872,104873],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[231,104875,104878],{"className":104876,"code":104877,"language":7139,"meta":236},[7137],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[23,104879,104877],{"__ignoreMap":236},[19,104881,104882,102929,104885,104888,104889,104892],{},[23,104883,104884],{},"red_box_geom",[23,104886,104887],{},"box_center"," 都属于 ",[23,104890,104891],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[231,104894,104896],{"className":55003,"code":104895,"language":55005,"meta":236,"style":236},"\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",[23,104897,104898,104918,104932,104952],{"__ignoreMap":236},[240,104899,104900,104902,104904,104906,104908,104910,104912,104914,104916],{"class":242,"line":243},[240,104901,431],{"class":257},[240,104903,53738],{"class":253},[240,104905,16869],{"class":436},[240,104907,440],{"class":257},[240,104909,55426],{"class":443},[240,104911,103017],{"class":436},[240,104913,440],{"class":257},[240,104915,103022],{"class":443},[240,104917,447],{"class":257},[240,104919,104920,104922,104924,104926,104928,104930],{"class":242,"line":250},[240,104921,452],{"class":257},[240,104923,103531],{"class":253},[240,104925,16869],{"class":436},[240,104927,440],{"class":257},[240,104929,103872],{"class":443},[240,104931,103055],{"class":257},[240,104933,104934,104936,104938,104940,104942,104944,104946,104948,104950],{"class":242,"line":261},[240,104935,452],{"class":257},[240,104937,103031],{"class":253},[240,104939,55759],{"class":436},[240,104941,440],{"class":257},[240,104943,55426],{"class":443},[240,104945,103047],{"class":436},[240,104947,440],{"class":257},[240,104949,103052],{"class":443},[240,104951,103055],{"class":257},[240,104953,104954,104956,104958],{"class":242,"line":277},[240,104955,592],{"class":257},[240,104957,53738],{"class":253},[240,104959,447],{"class":257},[19,104961,104962],{},"含义:",[1826,104964,104965,104971,104976,104979],{},[1829,104966,104967,104968,104970],{},"创建名为 ",[23,104969,55649],{}," 的刚体",[1829,104972,104973,104974],{},"初始位置在世界坐标 ",[23,104975,103080],{},[1829,104977,104978],{},"它有一个自由关节",[1829,104980,104981],{},"它有一个盒子几何体",[32,104983,104984],{"id":104984},"坐标怎么理解",[19,104986,104987],{},"MuJoCo 默认使用三维坐标：",[231,104989,104992],{"className":104990,"code":104991,"language":7139,"meta":236},[7137],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[23,104993,104991],{"__ignoreMap":236},[19,104995,16582],{},[231,104997,104999],{"className":55003,"code":104998,"language":55005,"meta":236,"style":236},"pos=\"0 0 1\"\n",[23,105000,105001],{"__ignoreMap":236},[240,105002,105003],{"class":242,"line":243},[240,105004,104998],{"class":257},[19,105006,105007],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[32,105009,105011],{"id":105010},"geom-的-size-怎么理解","geom 的 size 怎么理解",[19,105013,105014,105015,84444,105018,105020],{},"不同 ",[23,105016,105017],{},"type",[23,105019,33442],{}," 含义不同：",[802,105022,105023,105038],{},[805,105024,105025],{},[808,105026,105027,105031,105036],{},[811,105028,105029],{"align":813},[23,105030,105017],{},[811,105032,105033,105035],{"align":813},[23,105034,33442],{}," 示例",[811,105037,102611],{"align":813},[819,105039,105040,105054,105069,105088],{},[808,105041,105042,105046,105051],{},[824,105043,105044],{"align":813},[23,105045,55649],{},[824,105047,105048],{"align":813},[23,105049,105050],{},"size=\"0.1 0.2 0.3\"",[824,105052,105053],{"align":813},"x\u002Fy\u002Fz 半边长，不是完整长度",[808,105055,105056,105061,105066],{},[824,105057,105058],{"align":813},[23,105059,105060],{},"sphere",[824,105062,105063],{"align":813},[23,105064,105065],{},"size=\"0.1\"",[824,105067,105068],{"align":813},"球半径",[808,105070,105071,105076,105081],{},[824,105072,105073],{"align":813},[23,105074,105075],{},"capsule",[824,105077,105078],{"align":813},[23,105079,105080],{},"size=\"0.03\"",[824,105082,105083,105084,105087],{"align":813},"胶囊半径，长度常用 ",[23,105085,105086],{},"fromto"," 指定",[808,105089,105090,105095,105100],{},[824,105091,105092],{"align":813},[23,105093,105094],{},"plane",[824,105096,105097],{"align":813},[23,105098,105099],{},"size=\"3 3 0.1\"",[824,105101,105102],{"align":813},"可视平面大小，通常当地面",[19,105104,105105,105106,105108,105109,105111],{},"最容易踩坑的是 box：",[23,105107,103935],{}," 表示边长大约是 ",[23,105110,33983],{},"，因为 MuJoCo 用的是半边长。",[32,105113,105115],{"id":105114},"site-是什么","site 是什么",[19,105117,105118,105121],{},[23,105119,105120],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[1826,105123,105124,105127,105130,105133],{},[1829,105125,105126],{},"标记机械臂末端。",[1829,105128,105129],{},"标记目标位置。",[1829,105131,105132],{},"放传感器或相机参考点。",[1829,105134,105135],{},"在 Python 中读取某个关键点的世界坐标。",[19,105137,105138,105139,102929,105142,105145],{},"在后面的 Reacher 任务中，",[23,105140,105141],{},"tip",[23,105143,105144],{},"target"," 就会用 site 表示。",[14,105147,103164],{"id":103163},[231,105149,105151],{"className":32324,"code":105150,"language":32326,"meta":236,"style":236},"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",[23,105152,105153,105159,105169,105173,105177,105185,105190,105194,105198,105202,105207,105211,105216,105221,105226,105231,105235,105239,105243,105247,105251,105255,105267,105279,105287,105291,105306,105321,105325,105338,105353,105366,105379,105383,105399,105403,105407,105418,105430,105442,105454,105458,105462,105474],{"__ignoreMap":236},[240,105154,105155,105157],{"class":242,"line":243},[240,105156,32338],{"class":288},[240,105158,103212],{"class":257},[240,105160,105161,105163,105165,105167],{"class":242,"line":250},[240,105162,32338],{"class":288},[240,105164,33326],{"class":257},[240,105166,33329],{"class":288},[240,105168,33332],{"class":257},[240,105170,105171],{"class":242,"line":261},[240,105172,4353],{"emptyLinePlaceholder":2051},[240,105174,105175],{"class":242,"line":277},[240,105176,4353],{"emptyLinePlaceholder":2051},[240,105178,105179,105181,105183],{"class":242,"line":294},[240,105180,103225],{"class":264},[240,105182,15514],{"class":288},[240,105184,103230],{"class":443},[240,105186,105187],{"class":242,"line":309},[240,105188,105189],{"class":443},"\u003Cmujoco model=\"xml_basic\">\n",[240,105191,105192],{"class":242,"line":529},[240,105193,103240],{"class":443},[240,105195,105196],{"class":242,"line":549},[240,105197,4353],{"emptyLinePlaceholder":2051},[240,105199,105200],{"class":242,"line":569},[240,105201,103249],{"class":443},[240,105203,105204],{"class":242,"line":589},[240,105205,105206],{"class":443},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[240,105208,105209],{"class":242,"line":715},[240,105210,4353],{"emptyLinePlaceholder":2051},[240,105212,105213],{"class":242,"line":727},[240,105214,105215],{"class":443},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[240,105217,105218],{"class":242,"line":1730},[240,105219,105220],{"class":443},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[240,105222,105223],{"class":242,"line":3582},[240,105224,105225],{"class":443},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[240,105227,105228],{"class":242,"line":3596},[240,105229,105230],{"class":443},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[240,105232,105233],{"class":242,"line":3601},[240,105234,103278],{"class":443},[240,105236,105237],{"class":242,"line":3607},[240,105238,103283],{"class":443},[240,105240,105241],{"class":242,"line":3628},[240,105242,103288],{"class":443},[240,105244,105245],{"class":242,"line":3633},[240,105246,97611],{"class":443},[240,105248,105249],{"class":242,"line":3647},[240,105250,4353],{"emptyLinePlaceholder":2051},[240,105252,105253],{"class":242,"line":3652},[240,105254,4353],{"emptyLinePlaceholder":2051},[240,105256,105257,105259,105261,105263,105265],{"class":242,"line":3681},[240,105258,33893],{"class":288},[240,105260,3926],{"class":436},[240,105262,103309],{"class":257},[240,105264,97599],{"class":264},[240,105266,5691],{"class":257},[240,105268,105269,105271,105273,105275,105277],{"class":242,"line":3686},[240,105270,103318],{"class":257},[240,105272,440],{"class":288},[240,105274,103323],{"class":257},[240,105276,103225],{"class":264},[240,105278,2129],{"class":257},[240,105280,105281,105283,105285],{"class":242,"line":3703},[240,105282,103332],{"class":257},[240,105284,440],{"class":288},[240,105286,103337],{"class":257},[240,105288,105289],{"class":242,"line":3708},[240,105290,4353],{"emptyLinePlaceholder":2051},[240,105292,105293,105296,105298,105301,105304],{"class":242,"line":3713},[240,105294,105295],{"class":257},"    box_body_id ",[240,105297,440],{"class":288},[240,105299,105300],{"class":257}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[240,105302,105303],{"class":443},"\"red_box\"",[240,105305,2129],{"class":257},[240,105307,105308,105311,105313,105316,105319],{"class":242,"line":3718},[240,105309,105310],{"class":257},"    site_id ",[240,105312,440],{"class":288},[240,105314,105315],{"class":257}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[240,105317,105318],{"class":443},"\"box_center\"",[240,105320,2129],{"class":257},[240,105322,105323],{"class":242,"line":3732},[240,105324,4353],{"emptyLinePlaceholder":2051},[240,105326,105327,105329,105332,105334,105336],{"class":242,"line":3737},[240,105328,5053],{"class":288},[240,105330,105331],{"class":257}," box_body_id ",[240,105333,431],{"class":288},[240,105335,6045],{"class":264},[240,105337,5691],{"class":257},[240,105339,105340,105343,105346,105348,105351],{"class":242,"line":4530},[240,105341,105342],{"class":288},"        raise",[240,105344,105345],{"class":264}," RuntimeError",[240,105347,789],{"class":257},[240,105349,105350],{"class":443},"\"body red_box not found\"",[240,105352,2129],{"class":257},[240,105354,105355,105357,105360,105362,105364],{"class":242,"line":4544},[240,105356,5053],{"class":288},[240,105358,105359],{"class":257}," site_id ",[240,105361,431],{"class":288},[240,105363,6045],{"class":264},[240,105365,5691],{"class":257},[240,105367,105368,105370,105372,105374,105377],{"class":242,"line":4552},[240,105369,105342],{"class":288},[240,105371,105345],{"class":264},[240,105373,789],{"class":257},[240,105375,105376],{"class":443},"\"site box_center not found\"",[240,105378,2129],{"class":257},[240,105380,105381],{"class":242,"line":4557},[240,105382,4353],{"emptyLinePlaceholder":2051},[240,105384,105385,105387,105389,105391,105393,105395,105397],{"class":242,"line":4563},[240,105386,5153],{"class":288},[240,105388,103412],{"class":257},[240,105390,27989],{"class":288},[240,105392,34389],{"class":264},[240,105394,789],{"class":257},[240,105396,3676],{"class":264},[240,105398,32732],{"class":257},[240,105400,105401],{"class":242,"line":4569},[240,105402,103427],{"class":257},[240,105404,105405],{"class":242,"line":4574},[240,105406,4353],{"emptyLinePlaceholder":2051},[240,105408,105409,105411,105413,105416],{"class":242,"line":9899},[240,105410,33245],{"class":264},[240,105412,789],{"class":257},[240,105414,105415],{"class":443},"\"simulation time:\"",[240,105417,103389],{"class":257},[240,105419,105420,105422,105424,105427],{"class":242,"line":9923},[240,105421,33245],{"class":264},[240,105423,789],{"class":257},[240,105425,105426],{"class":443},"\"box body position:\"",[240,105428,105429],{"class":257},", data.xpos[box_body_id].copy())\n",[240,105431,105432,105434,105436,105439],{"class":242,"line":9928},[240,105433,33245],{"class":264},[240,105435,789],{"class":257},[240,105437,105438],{"class":443},"\"site position:\"",[240,105440,105441],{"class":257},", data.site_xpos[site_id].copy())\n",[240,105443,105444,105446,105448,105451],{"class":242,"line":9934},[240,105445,33245],{"class":264},[240,105447,789],{"class":257},[240,105449,105450],{"class":443},"\"box qpos:\"",[240,105452,105453],{"class":257},", np.array(data.qpos))\n",[240,105455,105456],{"class":242,"line":9961},[240,105457,4353],{"emptyLinePlaceholder":2051},[240,105459,105460],{"class":242,"line":9966},[240,105461,4353],{"emptyLinePlaceholder":2051},[240,105463,105464,105466,105468,105470,105472],{"class":242,"line":9972},[240,105465,3489],{"class":288},[240,105467,33166],{"class":264},[240,105469,103470],{"class":288},[240,105471,103473],{"class":443},[240,105473,5691],{"class":257},[240,105475,105476],{"class":242,"line":9984},[240,105477,103480],{"class":257},[19,105479,105480],{},"保存为：",[231,105482,105484],{"className":25768,"code":105483,"language":25770,"meta":236,"style":236},"touch ch2_xml_basic.py\n",[23,105485,105486],{"__ignoreMap":236},[240,105487,105488,105490],{"class":242,"line":243},[240,105489,103194],{"class":436},[240,105491,105492],{"class":443}," ch2_xml_basic.py\n",[19,105494,104212],{},[231,105496,105498],{"className":25768,"code":105497,"language":25770,"meta":236,"style":236},"python ch2_xml_basic.py\n",[23,105499,105500],{"__ignoreMap":236},[240,105501,105502,105504],{"class":242,"line":243},[240,105503,32326],{"class":436},[240,105505,105492],{"class":443},[32,105507,103483],{"id":103483},[19,105509,105510],{},"用名字查找 body：",[231,105512,105514],{"className":32324,"code":105513,"language":32326,"meta":236,"style":236},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[23,105515,105516],{"__ignoreMap":236},[240,105517,105518,105521,105523,105525,105527],{"class":242,"line":243},[240,105519,105520],{"class":257},"box_body_id ",[240,105522,440],{"class":288},[240,105524,105300],{"class":257},[240,105526,105303],{"class":443},[240,105528,2129],{"class":257},[19,105530,105531],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[19,105533,105534],{},"用名字查找 site：",[231,105536,105538],{"className":32324,"code":105537,"language":32326,"meta":236,"style":236},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[23,105539,105540],{"__ignoreMap":236},[240,105541,105542,105545,105547,105549,105551],{"class":242,"line":243},[240,105543,105544],{"class":257},"site_id ",[240,105546,440],{"class":288},[240,105548,105315],{"class":257},[240,105550,105318],{"class":443},[240,105552,2129],{"class":257},[19,105554,105555,105556,105559,105560,105563],{},"注意第二个参数是对象类型。查 body 就用 ",[23,105557,105558],{},"mjOBJ_BODY","，查 site 就用 ",[23,105561,105562],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[19,105565,105566],{},"读取世界坐标：",[231,105568,105570],{"className":32324,"code":105569,"language":32326,"meta":236,"style":236},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[23,105571,105572,105577],{"__ignoreMap":236},[240,105573,105574],{"class":242,"line":243},[240,105575,105576],{"class":257},"data.xpos[box_body_id]\n",[240,105578,105579],{"class":242,"line":250},[240,105580,105581],{"class":257},"data.site_xpos[site_id]\n",[19,105583,105584,105587,105588,105591],{},[23,105585,105586],{},"xpos"," 是 body 的世界坐标，",[23,105589,105590],{},"site_xpos"," 是 site 的世界坐标。",[32,105593,103619],{"id":103619},[231,105595,105597],{"className":32324,"code":105596,"language":32326,"meta":236,"style":236},"import mujoco\nimport numpy as np\n",[23,105598,105599,105605],{"__ignoreMap":236},[240,105600,105601,105603],{"class":242,"line":243},[240,105602,32338],{"class":288},[240,105604,103212],{"class":257},[240,105606,105607,105609,105611,105613],{"class":242,"line":250},[240,105608,32338],{"class":288},[240,105610,33326],{"class":257},[240,105612,33329],{"class":288},[240,105614,33332],{"class":257},[19,105616,105617,105618,105621,105622,105625,105626,46,105629,30331],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[23,105619,105620],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[23,105623,105624],{},"as np"," 是习惯写法，后面就可以写 ",[23,105627,105628],{},"np.array(...)",[23,105630,105631],{},"np.round(...)",[231,105633,105634],{"className":32324,"code":103506,"language":32326,"meta":236,"style":236},[23,105635,105636,105644,105648],{"__ignoreMap":236},[240,105637,105638,105640,105642],{"class":242,"line":243},[240,105639,103225],{"class":264},[240,105641,15514],{"class":288},[240,105643,103230],{"class":443},[240,105645,105646],{"class":242,"line":250},[240,105647,103521],{"class":443},[240,105649,105650],{"class":242,"line":261},[240,105651,97611],{"class":443},[19,105653,105654,105655,30331],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[23,105656,105657],{},"mujoco.MjModel.from_xml_string(XML)",[231,105659,105661],{"className":55003,"code":105660,"language":55005,"meta":236,"style":236},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[23,105662,105663],{"__ignoreMap":236},[240,105664,105665,105667,105669,105671,105673,105675,105677,105679,105682,105684,105686,105689,105691,105693,105696],{"class":242,"line":243},[240,105666,431],{"class":257},[240,105668,105120],{"class":253},[240,105670,16869],{"class":436},[240,105672,440],{"class":257},[240,105674,105318],{"class":443},[240,105676,103017],{"class":436},[240,105678,440],{"class":257},[240,105680,105681],{"class":443},"\"0 0 0\"",[240,105683,103047],{"class":436},[240,105685,440],{"class":257},[240,105687,105688],{"class":443},"\"0.03\"",[240,105690,80681],{"class":436},[240,105692,440],{"class":257},[240,105694,105695],{"class":443},"\"0 1 0 1\"",[240,105697,103055],{"class":257},[19,105699,105700,105702,105703,105706,105707,105709,105710,105713],{},[23,105701,105120],{}," 是标记点。",[23,105704,105705],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[23,105708,105080],{}," 表示显示出来的小球大小。",[23,105711,105712],{},"rgba=\"0 1 0 1\""," 表示绿色。",[231,105715,105716],{"className":32324,"code":105513,"language":32326,"meta":236,"style":236},[23,105717,105718],{"__ignoreMap":236},[240,105719,105720,105722,105724,105726,105728],{"class":242,"line":243},[240,105721,105520],{"class":257},[240,105723,440],{"class":288},[240,105725,105300],{"class":257},[240,105727,105303],{"class":443},[240,105729,2129],{"class":257},[19,105731,105732,105733,105735],{},"这行的作用是：根据名字 ",[23,105734,105303],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[19,105737,105738],{},"拆开看：",[1826,105740,105741,105747,105752,105758],{},[1829,105742,105743,105746],{},[23,105744,105745],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[1829,105748,105749,105751],{},[23,105750,103996],{}," 是被查询的模型。",[1829,105753,105754,105757],{},[23,105755,105756],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[1829,105759,105760,105762],{},[23,105761,105303],{}," 是 XML 里写的名字。",[231,105764,105765],{"className":32324,"code":105537,"language":32326,"meta":236,"style":236},[23,105766,105767],{"__ignoreMap":236},[240,105768,105769,105771,105773,105775,105777],{"class":242,"line":243},[240,105770,105544],{"class":257},[240,105772,440],{"class":288},[240,105774,105315],{"class":257},[240,105776,105318],{"class":443},[240,105778,2129],{"class":257},[19,105780,105781,105782,30331],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[23,105783,105318],{},[231,105785,105787],{"className":32324,"code":105786,"language":32326,"meta":236,"style":236},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[23,105788,105789,105801],{"__ignoreMap":236},[240,105790,105791,105793,105795,105797,105799],{"class":242,"line":243},[240,105792,3489],{"class":288},[240,105794,105331],{"class":257},[240,105796,431],{"class":288},[240,105798,6045],{"class":264},[240,105800,5691],{"class":257},[240,105802,105803,105806,105808,105810,105812],{"class":242,"line":250},[240,105804,105805],{"class":288},"    raise",[240,105807,105345],{"class":264},[240,105809,789],{"class":257},[240,105811,105350],{"class":443},[240,105813,2129],{"class":257},[19,105815,105816,105818,105819,105822,105823,105826,105827,105830],{},[23,105817,3489],{}," 是条件判断。",[23,105820,105821],{},"mj_name2id"," 找不到对象时会返回 ",[23,105824,105825],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[23,105828,105829],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[231,105832,105834],{"className":32324,"code":105833,"language":32326,"meta":236,"style":236},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[23,105835,105836,105852],{"__ignoreMap":236},[240,105837,105838,105840,105842,105844,105846,105848,105850],{"class":242,"line":243},[240,105839,4977],{"class":288},[240,105841,103412],{"class":257},[240,105843,27989],{"class":288},[240,105845,34389],{"class":264},[240,105847,789],{"class":257},[240,105849,3676],{"class":264},[240,105851,32732],{"class":257},[240,105853,105854],{"class":242,"line":250},[240,105855,103610],{"class":257},[19,105857,105858],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[231,105860,105862],{"className":32324,"code":105861,"language":32326,"meta":236,"style":236},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[23,105863,105864],{"__ignoreMap":236},[240,105865,105866,105868,105870,105872],{"class":242,"line":243},[240,105867,32361],{"class":264},[240,105869,789],{"class":257},[240,105871,105426],{"class":443},[240,105873,105429],{"class":257},[19,105875,105876,105878,105879,105882],{},[23,105877,102990],{}," 保存所有 body 的世界坐标。",[23,105880,105881],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[231,105884,105886],{"className":32324,"code":105885,"language":32326,"meta":236,"style":236},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[23,105887,105888],{"__ignoreMap":236},[240,105889,105890,105892,105894,105896],{"class":242,"line":243},[240,105891,32361],{"class":264},[240,105893,789],{"class":257},[240,105895,105438],{"class":443},[240,105897,105441],{"class":257},[19,105899,105900,105903,105904,105906],{},[23,105901,105902],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[23,105905,104887],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[231,105908,105910],{"className":32324,"code":105909,"language":32326,"meta":236,"style":236},"print(\"box qpos:\", np.array(data.qpos))\n",[23,105911,105912],{"__ignoreMap":236},[240,105913,105914,105916,105918,105920],{"class":242,"line":243},[240,105915,32361],{"class":264},[240,105917,789],{"class":257},[240,105919,105450],{"class":443},[240,105921,105453],{"class":257},[19,105923,105924,105925,105928],{},"这里打印广义位置数组。",[23,105926,105927],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[14,105930,104227],{"id":104226},[19,105932,105933,105934,105937,105938,30331],{},"程序会输出 ",[23,105935,105936],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[23,105939,105940],{},"qpos",[19,105942,105943,105945,105946,105949,105950,105953],{},[23,105944,105881],{}," 是 body 的世界坐标位置。",[23,105947,105948],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[23,105951,105952],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[19,105955,84136,105956,84444,105958,105960],{},[23,105957,104887],{},[23,105959,105705],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[19,105962,105963],{},"如果你把 site 改成：",[231,105965,105967],{"className":55003,"code":105966,"language":55005,"meta":236,"style":236},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[23,105968,105969],{"__ignoreMap":236},[240,105970,105971,105973,105975,105977,105979,105982,105984,105986,105989,105991,105993,105995,105997,105999,106001],{"class":242,"line":243},[240,105972,431],{"class":257},[240,105974,105120],{"class":253},[240,105976,16869],{"class":436},[240,105978,440],{"class":257},[240,105980,105981],{"class":443},"\"box_top\"",[240,105983,103017],{"class":436},[240,105985,440],{"class":257},[240,105987,105988],{"class":443},"\"0 0 0.15\"",[240,105990,103047],{"class":436},[240,105992,440],{"class":257},[240,105994,105688],{"class":443},[240,105996,80681],{"class":436},[240,105998,440],{"class":257},[240,106000,105695],{"class":443},[240,106002,103055],{"class":257},[19,106004,106005,106006,106009],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[23,106007,106008],{},"site position"," 就会比 body position 的 z 坐标更高。",[14,106011,104259],{"id":104258},[1826,106013,106014,106023,106026,106033,106039,106050],{},[1829,106015,104322,106016,106018,106019,104325,106021,30331],{},[23,106017,104891],{}," 的初始高度从 ",[23,106020,1643],{},[23,106022,1668],{},[1829,106024,106025],{},"重新运行程序。",[1829,106027,106028,106029,106032],{},"观察 ",[23,106030,106031],{},"box qpos"," 和最终位置是否变化。",[1829,106034,106035,106036,106038],{},"故意把 ",[23,106037,105120],{}," 名称改错，确认程序能报错。",[1829,106040,104322,106041,106043,106044,104325,106046,106049],{},[23,106042,103031],{}," 的颜色 ",[23,106045,103943],{},[23,106047,106048],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[1829,106051,104322,106052,84444,106054,104325,106057,106060,106061,106063],{},[23,106053,104887],{},[23,106055,106056],{},"pos",[23,106058,106059],{},"0 0 0.2","，观察 ",[23,106062,106008],{}," 如何变化。",[14,106065,104364],{"id":104363},[32,106067,106069],{"id":106068},"xml-error-schema-violation",[23,106070,106071],{},"XML Error: Schema violation",[19,106073,106074],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[32,106076,106078,83204,106080],{"id":106077},"mj_name2id-返回-1",[23,106079,105821],{},[23,106081,105825],{},[19,106083,106084,106085,106088],{},"说明名字没有找到。检查 XML 中 ",[23,106086,106087],{},"name=\"...\"","，并确认对象类型正确。",[32,106090,106091],{"id":106091},"物体不下落",[19,106093,104434],{},[1826,106095,106096,106101,106106],{},[1829,106097,106098,106099],{},"body 是否有 ",[23,106100,103531],{},[1829,106102,106103,106104],{},"gravity 是否为 ",[23,106105,104500],{},[1829,106107,106108,106109,106111],{},"body 是否被固定在 ",[23,106110,103752],{}," 中",[32,106113,106114],{"id":106114},"坐标看起来不符合预期",[19,106116,106117],{},"先区分两种坐标：",[802,106119,106120,106129],{},[805,106121,106122],{},[808,106123,106124,106127],{},[811,106125,106126],{"align":813},"坐标",[811,106128,102611],{"align":813},[819,106130,106131,106141],{},[808,106132,106133,106138],{},[824,106134,106135,106136],{"align":813},"XML 里的 ",[23,106137,106056],{},[824,106139,106140],{"align":813},"相对父 body 的局部坐标",[808,106142,106143,106149],{},[824,106144,106145,26925,106147],{"align":813},[23,106146,102990],{},[23,106148,105902],{},[824,106150,106151],{"align":813},"仿真更新后的世界坐标",[19,106153,106154,106155,106157,106158,84453,106161,106163],{},"如果你修改了 ",[23,106156,102981],{},"，但还没调用 ",[23,106159,106160],{},"mj_forward",[23,106162,103126],{},"，世界坐标可能还没有更新。",[14,106165,104518],{"id":104517},[19,106167,106168],{},"MJCF 建模先掌握四件事：",[1826,106170,106171,106176,106181,106186],{},[1829,106172,106173,106175],{},[23,106174,53738],{}," 表示刚体层级。",[1829,106177,106178,106180],{},[23,106179,103031],{}," 表示形状、碰撞和质量。",[1829,106182,106183,106185],{},[23,106184,104866],{}," 决定 body 能不能动、怎么动。",[1829,106187,106188,106190],{},[23,106189,105120],{}," 用来标记关键点，方便 Python 读取位置。",[19,106192,106193],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[2019,106195,106196],{},"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":236,"searchDepth":250,"depth":250,"links":106198},[106199,106200,106201,106207,106211,106212,106213,106220],{"id":102557,"depth":250,"text":102558},{"id":102680,"depth":250,"text":102681},{"id":102955,"depth":250,"text":102956,"children":106202},[106203,106204,106205,106206],{"id":104870,"depth":261,"text":104870},{"id":104984,"depth":261,"text":104984},{"id":105010,"depth":261,"text":105011},{"id":105114,"depth":261,"text":105115},{"id":103163,"depth":250,"text":103164,"children":106208},[106209,106210],{"id":103483,"depth":261,"text":103483},{"id":103619,"depth":261,"text":103619},{"id":104226,"depth":250,"text":104227},{"id":104258,"depth":250,"text":104259},{"id":104363,"depth":250,"text":104364,"children":106214},[106215,106216,106218,106219],{"id":106068,"depth":261,"text":106071},{"id":106077,"depth":261,"text":106217},"mj_name2id 返回 -1",{"id":106091,"depth":261,"text":106091},{"id":106114,"depth":261,"text":106114},{"id":104517,"depth":250,"text":104518},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":104565,"description":236},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":106227,"title":106228,"body":106229,"description":236,"extension":2049,"meta":107724,"navigation":2051,"path":107725,"seo":107726,"stem":107727,"__hash__":107728},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":106230,"toc":107696},[106231,106234,106236,106239,106242,106280,106283,106289,106292,106294,106296,106323,106325,106339,106341,106382,106384,106408,106410,106413,106422,106431,106434,106443,106451,106460,106463,106473,106476,106528,106535,106541,106549,106597,106600,106619,106622,106630,106634,106643,106676,106678,107026,107028,107040,107042,107053,107055,107058,107079,107085,107088,107113,107123,107126,107134,107137,107140,107161,107172,107174,107194,107197,107218,107227,107246,107252,107277,107280,107294,107301,107325,107328,107336,107345,107361,107373,107381,107390,107392,107395,107419,107424,107427,107449,107451,107490,107492,107499,107501,107509,107512,107515,107527,107568,107575,107586,107593,107596,107645,107648,107651,107657,107659,107664,107690,107693],[10,106232,106228],{"id":106233},"_3python-控制接口读取状态与推进仿真",[14,106235,102558],{"id":102557},[19,106237,106238],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[19,106240,106241],{},"你将学习:",[1826,106243,106244,106249,106254,106258,106263,106274],{},[1829,106245,106246],{},[23,106247,106248],{},"MjModel.from_xml_string",[1829,106250,106251],{},[23,106252,106253],{},"MjData(model)",[1829,106255,106256],{},[23,106257,103126],{},[1829,106259,106260],{},[23,106261,106262],{},"mj_resetData",[1829,106264,106265,106266,46,106268,46,106271],{},"读取 ",[23,106267,105940],{},[23,106269,106270],{},"qvel",[23,106272,106273],{},"ctrl",[1829,106275,106276,106277],{},"使用 ",[23,106278,106279],{},"model.opt.timestep",[19,106281,106282],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[231,106284,106287],{"className":106285,"code":106286,"language":7139,"meta":236},[7137],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[23,106288,106286],{"__ignoreMap":236},[19,106290,106291],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[14,106293,102681],{"id":102680},[19,106295,102684],{},[231,106297,106299],{"className":25768,"code":106298,"language":25770,"meta":236,"style":236},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[23,106300,106301],{"__ignoreMap":236},[240,106302,106303,106305,106307,106309,106311,106314,106316,106318,106320],{"class":242,"line":243},[240,106304,26523],{"class":436},[240,106306,28261],{"class":443},[240,106308,25780],{"class":443},[240,106310,28346],{"class":264},[240,106312,106313],{"class":443}," python3",[240,106315,102709],{"class":443},[240,106317,104412],{"class":443},[240,106319,102725],{"class":443},[240,106321,106322],{"class":443}," glfw\n",[19,106324,104729],{},[231,106326,106327],{"className":25768,"code":102830,"language":25770,"meta":236,"style":236},[23,106328,106329],{"__ignoreMap":236},[240,106330,106331,106333,106335,106337],{"class":242,"line":243},[240,106332,25777],{"class":436},[240,106334,25780],{"class":443},[240,106336,102841],{"class":443},[240,106338,102844],{"class":443},[19,106340,104746],{},[231,106342,106344],{"className":25768,"code":106343,"language":25770,"meta":236,"style":236},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[23,106345,106346,106363,106372],{"__ignoreMap":236},[240,106347,106348,106350,106352,106354,106357,106359,106361],{"class":242,"line":243},[240,106349,32276],{"class":436},[240,106351,31122],{"class":443},[240,106353,27062],{"class":264},[240,106355,106356],{"class":443}," mujoco-python-api",[240,106358,102886],{"class":443},[240,106360,102889],{"class":264},[240,106362,102892],{"class":264},[240,106364,106365,106367,106369],{"class":242,"line":250},[240,106366,32276],{"class":436},[240,106368,102899],{"class":443},[240,106370,106371],{"class":443}," mujoco-python-api\n",[240,106373,106374,106376,106378,106380],{"class":242,"line":261},[240,106375,25777],{"class":436},[240,106377,25780],{"class":443},[240,106379,102841],{"class":443},[240,106381,102844],{"class":443},[19,106383,102915],{},[1826,106385,106386,106393,106402],{},[1829,106387,106388,102929,106390,106392],{},[23,106389,102586],{},[23,106391,102591],{}," 是官方 Python bindings 的类名。",[1829,106394,106395,106396,106399,106400,30331],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[23,106397,106398],{},"mjModel"," 在 Python 中是 ",[23,106401,102620],{},[1829,106403,106404,106405,30331],{},"不要使用 ",[23,106406,106407],{},"sim = mujoco_py.MjSim(...)",[14,106409,102956],{"id":102955},[19,106411,106412],{},"仿真推进核心代码:",[231,106414,106416],{"className":32324,"code":106415,"language":32326,"meta":236,"style":236},"mujoco.mj_step(model, data)\n",[23,106417,106418],{"__ignoreMap":236},[240,106419,106420],{"class":242,"line":243},[240,106421,106415],{"class":257},[19,106423,106424,106425,46,106427,46,106429,30331],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[23,106426,102981],{},[23,106428,102984],{},[23,106430,102978],{},[19,106432,106433],{},"重置仿真:",[231,106435,106437],{"className":32324,"code":106436,"language":32326,"meta":236,"style":236},"mujoco.mj_resetData(model, data)\n",[23,106438,106439],{"__ignoreMap":236},[240,106440,106441],{"class":242,"line":243},[240,106442,106436],{"class":257},[19,106444,106445,106446,84453,106448,106450],{},"如果手动修改了 ",[23,106447,102981],{},[23,106449,102984],{},"，通常应调用:",[231,106452,106454],{"className":32324,"code":106453,"language":32326,"meta":236,"style":236},"mujoco.mj_forward(model, data)\n",[23,106455,106456],{"__ignoreMap":236},[240,106457,106458],{"class":242,"line":243},[240,106459,106453],{"class":257},[19,106461,106462],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[32,106464,106466,46,106468,46,106470,106472],{"id":106465},"qposqvelctrl-是什么",[23,106467,105940],{},[23,106469,106270],{},[23,106471,106273],{}," 是什么",[19,106474,106475],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[802,106477,106478,106490],{},[805,106479,106480],{},[808,106481,106482,106485,106487],{},[811,106483,106484],{"align":813},"字段",[811,106486,102611],{"align":813},[811,106488,106489],{"align":813},"谁来修改",[819,106491,106492,106504,106516],{},[808,106493,106494,106498,106501],{},[824,106495,106496],{"align":813},[23,106497,102981],{},[824,106499,106500],{"align":813},"广义位置，例如小车位置、关节角、自由物体位置姿态",[824,106502,106503],{"align":813},"MuJoCo 更新，也可以手动设置初始状态",[808,106505,106506,106510,106513],{},[824,106507,106508],{"align":813},[23,106509,102984],{},[824,106511,106512],{"align":813},"广义速度，例如小车速度、关节角速度",[824,106514,106515],{"align":813},"MuJoCo 更新，也可以手动清零",[808,106517,106518,106522,106525],{},[824,106519,106520],{"align":813},[23,106521,102987],{},[824,106523,106524],{"align":813},"actuator 的控制输入",[824,106526,106527],{"align":813},"主要由你的控制代码写入",[19,106529,10976,106530,102929,106532,106534],{},[23,106531,105940],{},[23,106533,106270],{}," 不一定同维。自由刚体就是典型例子：",[231,106536,106539],{"className":106537,"code":106538,"language":7139,"meta":236},[7137],"freejoint: qpos 7 维，qvel 6 维\n",[23,106540,106538],{"__ignoreMap":236},[32,106542,106544,102929,106546,106548],{"id":106543},"mj_step-和-mj_forward-的区别",[23,106545,103126],{},[23,106547,106160],{}," 的区别",[802,106550,106551,106564],{},[805,106552,106553],{},[808,106554,106555,106558,106561],{},[811,106556,106557],{"align":813},"函数",[811,106559,106560],{"align":813},"是否推进时间",[811,106562,106563],{"align":813},"什么时候用",[819,106565,106566,106579],{},[808,106567,106568,106573,106576],{},[824,106569,106570],{"align":813},[23,106571,106572],{},"mj_step(model, data)",[824,106574,106575],{"align":813},"是",[824,106577,106578],{"align":813},"正常仿真循环，每调用一次前进一步",[808,106580,106581,106586,106589],{},[824,106582,106583],{"align":813},[23,106584,106585],{},"mj_forward(model, data)",[824,106587,106588],{"align":813},"否",[824,106590,106591,106592,46,106594,106596],{"align":813},"手动改了 ",[23,106593,105940],{},[23,106595,106270],{}," 后，刷新派生量",[19,106598,106599],{},"例如你写：",[231,106601,106603],{"className":32324,"code":106602,"language":32326,"meta":236,"style":236},"data.qpos[2] = 2.0\n",[23,106604,106605],{"__ignoreMap":236},[240,106606,106607,106610,106612,106614,106616],{"class":242,"line":243},[240,106608,106609],{"class":257},"data.qpos[",[240,106611,1668],{"class":264},[240,106613,6395],{"class":257},[240,106615,440],{"class":288},[240,106617,106618],{"class":264}," 2.0\n",[19,106620,106621],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[231,106623,106624],{"className":32324,"code":106453,"language":32326,"meta":236,"style":236},[23,106625,106626],{"__ignoreMap":236},[240,106627,106628],{"class":242,"line":243},[240,106629,106453],{"class":257},[32,106631,106633],{"id":106632},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[19,106635,106636,106639,106640,106642],{},[23,106637,106638],{},"mujoco.mj_resetData(model, data)"," 会把 ",[23,106641,35347],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[231,106644,106646],{"className":32324,"code":106645,"language":32326,"meta":236,"style":236},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[23,106647,106648,106652,106662,106672],{"__ignoreMap":236},[240,106649,106650],{"class":242,"line":243},[240,106651,106436],{"class":257},[240,106653,106654,106657,106659],{"class":242,"line":250},[240,106655,106656],{"class":257},"data.qpos[:] ",[240,106658,440],{"class":288},[240,106660,106661],{"class":257}," random_qpos\n",[240,106663,106664,106667,106669],{"class":242,"line":261},[240,106665,106666],{"class":257},"data.qvel[:] ",[240,106668,440],{"class":288},[240,106670,106671],{"class":264}," 0.0\n",[240,106673,106674],{"class":242,"line":277},[240,106675,106453],{"class":257},[14,106677,103164],{"id":103163},[231,106679,106681],{"className":32324,"code":106680,"language":32326,"meta":236,"style":236},"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",[23,106682,106683,106689,106699,106703,106707,106715,106720,106724,106728,106732,106737,106741,106746,106751,106756,106760,106764,106768,106772,106776,106780,106799,106806,106818,106829,106845,106861,106865,106869,106881,106893,106901,106905,106916,106920,106936,106940,106944,106953,106957,106962,106971,106975,106988,106993,107002,107006,107010,107022],{"__ignoreMap":236},[240,106684,106685,106687],{"class":242,"line":243},[240,106686,32338],{"class":288},[240,106688,103212],{"class":257},[240,106690,106691,106693,106695,106697],{"class":242,"line":250},[240,106692,32338],{"class":288},[240,106694,33326],{"class":257},[240,106696,33329],{"class":288},[240,106698,33332],{"class":257},[240,106700,106701],{"class":242,"line":261},[240,106702,4353],{"emptyLinePlaceholder":2051},[240,106704,106705],{"class":242,"line":277},[240,106706,4353],{"emptyLinePlaceholder":2051},[240,106708,106709,106711,106713],{"class":242,"line":294},[240,106710,103225],{"class":264},[240,106712,15514],{"class":288},[240,106714,103230],{"class":443},[240,106716,106717],{"class":242,"line":309},[240,106718,106719],{"class":443},"\u003Cmujoco model=\"state_api\">\n",[240,106721,106722],{"class":242,"line":529},[240,106723,103240],{"class":443},[240,106725,106726],{"class":242,"line":549},[240,106727,4353],{"emptyLinePlaceholder":2051},[240,106729,106730],{"class":242,"line":569},[240,106731,103249],{"class":443},[240,106733,106734],{"class":242,"line":589},[240,106735,106736],{"class":443},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[240,106738,106739],{"class":242,"line":715},[240,106740,4353],{"emptyLinePlaceholder":2051},[240,106742,106743],{"class":242,"line":727},[240,106744,106745],{"class":443},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[240,106747,106748],{"class":242,"line":1730},[240,106749,106750],{"class":443},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[240,106752,106753],{"class":242,"line":3582},[240,106754,106755],{"class":443},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[240,106757,106758],{"class":242,"line":3596},[240,106759,103278],{"class":443},[240,106761,106762],{"class":242,"line":3601},[240,106763,103283],{"class":443},[240,106765,106766],{"class":242,"line":3607},[240,106767,103288],{"class":443},[240,106769,106770],{"class":242,"line":3628},[240,106771,97611],{"class":443},[240,106773,106774],{"class":242,"line":3633},[240,106775,4353],{"emptyLinePlaceholder":2051},[240,106777,106778],{"class":242,"line":3647},[240,106779,4353],{"emptyLinePlaceholder":2051},[240,106781,106782,106784,106787,106790,106792,106795,106797],{"class":242,"line":3652},[240,106783,33893],{"class":288},[240,106785,106786],{"class":436}," print_state",[240,106788,106789],{"class":257},"(prefix: ",[240,106791,3262],{"class":264},[240,106793,106794],{"class":257},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[240,106796,97599],{"class":264},[240,106798,5691],{"class":257},[240,106800,106801,106803],{"class":242,"line":3681},[240,106802,33245],{"class":264},[240,106804,106805],{"class":257},"(prefix)\n",[240,106807,106808,106810,106812,106815],{"class":242,"line":3686},[240,106809,33245],{"class":264},[240,106811,789],{"class":257},[240,106813,106814],{"class":443},"\"  timestep:\"",[240,106816,106817],{"class":257},", model.opt.timestep)\n",[240,106819,106820,106822,106824,106827],{"class":242,"line":3703},[240,106821,33245],{"class":264},[240,106823,789],{"class":257},[240,106825,106826],{"class":443},"\"  time:\"",[240,106828,103389],{"class":257},[240,106830,106831,106833,106835,106838,106841,106843],{"class":242,"line":3708},[240,106832,33245],{"class":264},[240,106834,789],{"class":257},[240,106836,106837],{"class":443},"\"  qpos:\"",[240,106839,106840],{"class":257},", np.round(data.qpos.copy(), ",[240,106842,1716],{"class":264},[240,106844,32443],{"class":257},[240,106846,106847,106849,106851,106854,106857,106859],{"class":242,"line":3713},[240,106848,33245],{"class":264},[240,106850,789],{"class":257},[240,106852,106853],{"class":443},"\"  qvel:\"",[240,106855,106856],{"class":257},", np.round(data.qvel.copy(), ",[240,106858,1716],{"class":264},[240,106860,32443],{"class":257},[240,106862,106863],{"class":242,"line":3718},[240,106864,4353],{"emptyLinePlaceholder":2051},[240,106866,106867],{"class":242,"line":3732},[240,106868,4353],{"emptyLinePlaceholder":2051},[240,106870,106871,106873,106875,106877,106879],{"class":242,"line":3737},[240,106872,33893],{"class":288},[240,106874,3926],{"class":436},[240,106876,103309],{"class":257},[240,106878,97599],{"class":264},[240,106880,5691],{"class":257},[240,106882,106883,106885,106887,106889,106891],{"class":242,"line":4530},[240,106884,103318],{"class":257},[240,106886,440],{"class":288},[240,106888,103323],{"class":257},[240,106890,103225],{"class":264},[240,106892,2129],{"class":257},[240,106894,106895,106897,106899],{"class":242,"line":4544},[240,106896,103332],{"class":257},[240,106898,440],{"class":288},[240,106900,103337],{"class":257},[240,106902,106903],{"class":242,"line":4552},[240,106904,4353],{"emptyLinePlaceholder":2051},[240,106906,106907,106910,106913],{"class":242,"line":4557},[240,106908,106909],{"class":257},"    print_state(",[240,106911,106912],{"class":443},"\"initial\"",[240,106914,106915],{"class":257},", model, data)\n",[240,106917,106918],{"class":242,"line":4563},[240,106919,4353],{"emptyLinePlaceholder":2051},[240,106921,106922,106924,106926,106928,106930,106932,106934],{"class":242,"line":4569},[240,106923,5153],{"class":288},[240,106925,103412],{"class":257},[240,106927,27989],{"class":288},[240,106929,34389],{"class":264},[240,106931,789],{"class":257},[240,106933,2754],{"class":264},[240,106935,32732],{"class":257},[240,106937,106938],{"class":242,"line":4574},[240,106939,103427],{"class":257},[240,106941,106942],{"class":242,"line":9899},[240,106943,4353],{"emptyLinePlaceholder":2051},[240,106945,106946,106948,106951],{"class":242,"line":9923},[240,106947,106909],{"class":257},[240,106949,106950],{"class":443},"\"after 50 steps\"",[240,106952,106915],{"class":257},[240,106954,106955],{"class":242,"line":9928},[240,106956,4353],{"emptyLinePlaceholder":2051},[240,106958,106959],{"class":242,"line":9934},[240,106960,106961],{"class":257},"    mujoco.mj_resetData(model, data)\n",[240,106963,106964,106966,106969],{"class":242,"line":9961},[240,106965,106909],{"class":257},[240,106967,106968],{"class":443},"\"after reset\"",[240,106970,106915],{"class":257},[240,106972,106973],{"class":242,"line":9966},[240,106974,4353],{"emptyLinePlaceholder":2051},[240,106976,106977,106980,106982,106984,106986],{"class":242,"line":9972},[240,106978,106979],{"class":257},"    data.qpos[",[240,106981,1668],{"class":264},[240,106983,6395],{"class":257},[240,106985,440],{"class":288},[240,106987,106618],{"class":264},[240,106989,106990],{"class":242,"line":9984},[240,106991,106992],{"class":257},"    mujoco.mj_forward(model, data)\n",[240,106994,106995,106997,107000],{"class":242,"line":9996},[240,106996,106909],{"class":257},[240,106998,106999],{"class":443},"\"after manual qpos edit\"",[240,107001,106915],{"class":257},[240,107003,107004],{"class":242,"line":10008},[240,107005,4353],{"emptyLinePlaceholder":2051},[240,107007,107008],{"class":242,"line":11667},[240,107009,4353],{"emptyLinePlaceholder":2051},[240,107011,107012,107014,107016,107018,107020],{"class":242,"line":11692},[240,107013,3489],{"class":288},[240,107015,33166],{"class":264},[240,107017,103470],{"class":288},[240,107019,103473],{"class":443},[240,107021,5691],{"class":257},[240,107023,107024],{"class":242,"line":11715},[240,107025,103480],{"class":257},[19,107027,105480],{},[231,107029,107031],{"className":25768,"code":107030,"language":25770,"meta":236,"style":236},"touch ch3_python_state.py\n",[23,107032,107033],{"__ignoreMap":236},[240,107034,107035,107037],{"class":242,"line":243},[240,107036,103194],{"class":436},[240,107038,107039],{"class":443}," ch3_python_state.py\n",[19,107041,104212],{},[231,107043,107045],{"className":25768,"code":107044,"language":25770,"meta":236,"style":236},"python ch3_python_state.py\n",[23,107046,107047],{"__ignoreMap":236},[240,107048,107049,107051],{"class":242,"line":243},[240,107050,32326],{"class":436},[240,107052,107039],{"class":443},[32,107054,103483],{"id":103483},[19,107056,107057],{},"打印状态的函数：",[231,107059,107061],{"className":32324,"code":107060,"language":32326,"meta":236,"style":236},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[23,107062,107063],{"__ignoreMap":236},[240,107064,107065,107067,107069,107071,107073,107075,107077],{"class":242,"line":243},[240,107066,33893],{"class":288},[240,107068,106786],{"class":436},[240,107070,106789],{"class":257},[240,107072,3262],{"class":264},[240,107074,106794],{"class":257},[240,107076,97599],{"class":264},[240,107078,5691],{"class":257},[19,107080,107081,107082,107084],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[23,107083,35347],{}," 里发生了什么。",[19,107086,107087],{},"推进 50 步：",[231,107089,107091],{"className":32324,"code":107090,"language":32326,"meta":236,"style":236},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[23,107092,107093,107109],{"__ignoreMap":236},[240,107094,107095,107097,107099,107101,107103,107105,107107],{"class":242,"line":243},[240,107096,4977],{"class":288},[240,107098,103412],{"class":257},[240,107100,27989],{"class":288},[240,107102,34389],{"class":264},[240,107104,789],{"class":257},[240,107106,2754],{"class":264},[240,107108,32732],{"class":257},[240,107110,107111],{"class":242,"line":250},[240,107112,103610],{"class":257},[19,107114,107115,107116,107119,107120,107122],{},"由于 ",[23,107117,107118],{},"timestep=0.01","，所以 50 步后时间约为 ",[23,107121,37275],{}," 秒。",[19,107124,107125],{},"重置：",[231,107127,107128],{"className":32324,"code":106436,"language":32326,"meta":236,"style":236},[23,107129,107130],{"__ignoreMap":236},[240,107131,107132],{"class":242,"line":243},[240,107133,106436],{"class":257},[19,107135,107136],{},"这会把时间、位置、速度恢复到初始状态。",[19,107138,107139],{},"手动改高度：",[231,107141,107143],{"className":32324,"code":107142,"language":32326,"meta":236,"style":236},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[23,107144,107145,107157],{"__ignoreMap":236},[240,107146,107147,107149,107151,107153,107155],{"class":242,"line":243},[240,107148,106609],{"class":257},[240,107150,1668],{"class":264},[240,107152,6395],{"class":257},[240,107154,440],{"class":288},[240,107156,106618],{"class":264},[240,107158,107159],{"class":242,"line":250},[240,107160,106453],{"class":257},[19,107162,107163,107164,107167,107168,107171],{},"这个例子里 ",[23,107165,107166],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[23,107169,107170],{},"2.0"," 表示把小球放到更高的位置。",[32,107173,103619],{"id":103619},[231,107175,107176],{"className":32324,"code":107060,"language":32326,"meta":236,"style":236},[23,107177,107178],{"__ignoreMap":236},[240,107179,107180,107182,107184,107186,107188,107190,107192],{"class":242,"line":243},[240,107181,33893],{"class":288},[240,107183,106786],{"class":436},[240,107185,106789],{"class":257},[240,107187,3262],{"class":264},[240,107189,106794],{"class":257},[240,107191,97599],{"class":264},[240,107193,5691],{"class":257},[19,107195,107196],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[1826,107198,107199,107208,107213],{},[1829,107200,107201,107204,107205,107207],{},[23,107202,107203],{},"prefix","：一段文字，比如 ",[23,107206,106912],{},"，用来说明现在打印的是哪个阶段。",[1829,107209,107210,107212],{},[23,107211,103996],{},"：MuJoCo 模型。",[1829,107214,107215,107217],{},[23,107216,35347],{},"：MuJoCo 当前状态。",[19,107219,107220,46,107223,107226],{},[23,107221,107222],{},"prefix: str",[23,107224,107225],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[231,107228,107230],{"className":32324,"code":107229,"language":32326,"meta":236,"style":236},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[23,107231,107232],{"__ignoreMap":236},[240,107233,107234,107236,107238,107240,107242,107244],{"class":242,"line":243},[240,107235,32361],{"class":264},[240,107237,789],{"class":257},[240,107239,106837],{"class":443},[240,107241,106840],{"class":257},[240,107243,1716],{"class":264},[240,107245,32443],{"class":257},[19,107247,107248,107251],{},[23,107249,107250],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[231,107253,107255],{"className":32324,"code":107254,"language":32326,"meta":236,"style":236},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[23,107256,107257,107269],{"__ignoreMap":236},[240,107258,107259,107261,107263,107265,107267],{"class":242,"line":243},[240,107260,103545],{"class":257},[240,107262,440],{"class":288},[240,107264,103323],{"class":257},[240,107266,103225],{"class":264},[240,107268,2129],{"class":257},[240,107270,107271,107273,107275],{"class":242,"line":250},[240,107272,103569],{"class":257},[240,107274,440],{"class":288},[240,107276,103337],{"class":257},[19,107278,107279],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[231,107281,107283],{"className":32324,"code":107282,"language":32326,"meta":236,"style":236},"print_state(\"initial\", model, data)\n",[23,107284,107285],{"__ignoreMap":236},[240,107286,107287,107290,107292],{"class":242,"line":243},[240,107288,107289],{"class":257},"print_state(",[240,107291,106912],{"class":443},[240,107293,106915],{"class":257},[19,107295,107296,107297,107300],{},"调用刚才定义的 ",[23,107298,107299],{},"print_state"," 函数，打印初始状态。",[231,107302,107303],{"className":32324,"code":107090,"language":32326,"meta":236,"style":236},[23,107304,107305,107321],{"__ignoreMap":236},[240,107306,107307,107309,107311,107313,107315,107317,107319],{"class":242,"line":243},[240,107308,4977],{"class":288},[240,107310,103412],{"class":257},[240,107312,27989],{"class":288},[240,107314,34389],{"class":264},[240,107316,789],{"class":257},[240,107318,2754],{"class":264},[240,107320,32732],{"class":257},[240,107322,107323],{"class":242,"line":250},[240,107324,103610],{"class":257},[19,107326,107327],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[231,107329,107330],{"className":32324,"code":106436,"language":32326,"meta":236,"style":236},[23,107331,107332],{"__ignoreMap":236},[240,107333,107334],{"class":242,"line":243},[240,107335,106436],{"class":257},[19,107337,107338,107339,107341,107342,107344],{},"重置 ",[23,107340,35347],{},"。注意它不会重新创建 ",[23,107343,103996],{},"，因为模型结构没有变，只是状态回到初始值。",[231,107346,107347],{"className":32324,"code":106602,"language":32326,"meta":236,"style":236},[23,107348,107349],{"__ignoreMap":236},[240,107350,107351,107353,107355,107357,107359],{"class":242,"line":243},[240,107352,106609],{"class":257},[240,107354,1668],{"class":264},[240,107356,6395],{"class":257},[240,107358,440],{"class":288},[240,107360,106618],{"class":264},[19,107362,107363,107364,46,107367,46,107370,107372],{},"这行是“手动改状态”。在 freejoint 中，",[23,107365,107366],{},"qpos[0]",[23,107368,107369],{},"qpos[1]",[23,107371,107166],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[231,107374,107375],{"className":32324,"code":106453,"language":32326,"meta":236,"style":236},[23,107376,107377],{"__ignoreMap":236},[240,107378,107379],{"class":242,"line":243},[240,107380,106453],{"class":257},[19,107382,107383,107384,107386,107387,107389],{},"手动改完 ",[23,107385,105940],{}," 后，调用 ",[23,107388,106160],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[14,107391,104227],{"id":104226},[19,107393,107394],{},"你会看到:",[1826,107396,107397,107402,107407,107410],{},[1829,107398,107399,107400],{},"初始时间为 ",[23,107401,1274],{},[1829,107403,107404,107405],{},"50 步后时间约为 ",[23,107406,37275],{},[1829,107408,107409],{},"reset 后状态恢复",[1829,107411,107412,107413,107416,107417],{},"手动修改 ",[23,107414,107415],{},"data.qpos[2]"," 后，小球高度变为 ",[23,107418,107170],{},[19,107420,107421,107423],{},[23,107422,107166],{}," 在这个例子中表示自由刚体的 z 坐标。",[19,107425,107426],{},"输出里可以重点看三件事：",[1826,107428,107429,107437,107442],{},[1829,107430,107431,107433,107434,107436],{},[23,107432,4340],{}," 是否随着 ",[23,107435,103126],{}," 增加。",[1829,107438,107439,107441],{},[23,107440,105940],{}," 的 z 坐标是否因为下落而变化。",[1829,107443,107444,107446,107447,30331],{},[23,107445,106262],{}," 后时间是否回到 ",[23,107448,1274],{},[14,107450,104259],{"id":104258},[1826,107452,107453,107459,107465,107471,107474,107483],{},[1829,107454,107455,107456,30331],{},"修改 timestep 为 ",[23,107457,107458],{},"0.005",[1829,107460,107461,107462,30331],{},"重新运行，检查 50 步后时间是否约为 ",[23,107463,107464],{},"0.25",[1829,107466,107467,107468,30331],{},"修改重力为 ",[23,107469,107470],{},"0 0 -1.0",[1829,107472,107473],{},"观察小球下降速度是否变慢。",[1829,107475,104322,107476,104325,107479,107482],{},[23,107477,107478],{},"data.qpos[2] = 2.0",[23,107480,107481],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[1829,107484,107485,107486,107489],{},"注释掉 ",[23,107487,107488],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[14,107491,104364],{"id":104363},[32,107493,107495,107496,107498],{"id":107494},"修改-dataqpos-后位置没有更新","修改 ",[23,107497,102981],{}," 后位置没有更新",[19,107500,104373],{},[231,107502,107503],{"className":32324,"code":106453,"language":32326,"meta":236,"style":236},[23,107504,107505],{"__ignoreMap":236},[240,107506,107507],{"class":242,"line":243},[240,107508,106453],{"class":257},[32,107510,107511],{"id":107511},"数组维度看不懂",[19,107513,107514],{},"打印模型维度:",[231,107516,107518],{"className":32324,"code":107517,"language":32326,"meta":236,"style":236},"print(model.nq, model.nv, model.nu)\n",[23,107519,107520],{"__ignoreMap":236},[240,107521,107522,107524],{"class":242,"line":243},[240,107523,32361],{"class":264},[240,107525,107526],{"class":257},"(model.nq, model.nv, model.nu)\n",[802,107528,107529,107537],{},[805,107530,107531],{},[808,107532,107533,107535],{},[811,107534,106484],{"align":813},[811,107536,102611],{"align":813},[819,107538,107539,107549,107559],{},[808,107540,107541,107546],{},[824,107542,107543],{"align":813},[23,107544,107545],{},"nq",[824,107547,107548],{"align":813},"位置变量数量",[808,107550,107551,107556],{},[824,107552,107553],{"align":813},[23,107554,107555],{},"nv",[824,107557,107558],{"align":813},"速度变量数量",[808,107560,107561,107565],{},[824,107562,107563],{"align":813},[23,107564,104073],{},[824,107566,107567],{"align":813},"控制输入数量",[32,107569,107571,107572,107574],{"id":107570},"误以为-qpos-一定等于关节数","误以为 ",[23,107573,105940],{}," 一定等于关节数",[19,107576,107577,107578,84444,107580,107582,107583,107585],{},"不是。例如 ",[23,107579,103531],{},[23,107581,105940],{}," 是 7 维，但 ",[23,107584,106270],{}," 是 6 维。",[32,107587,107589,107590,107592],{"id":107588},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[23,107591,105940],{}," 的第几位",[19,107594,107595],{},"初学时可以先打印：",[231,107597,107599],{"className":32324,"code":107598,"language":32326,"meta":236,"style":236},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[23,107600,107601,107611,107621,107633],{"__ignoreMap":236},[240,107602,107603,107605,107607,107609],{"class":242,"line":243},[240,107604,32361],{"class":264},[240,107606,789],{"class":257},[240,107608,103350],{"class":443},[240,107610,103353],{"class":257},[240,107612,107613,107615,107617,107619],{"class":242,"line":250},[240,107614,32361],{"class":264},[240,107616,789],{"class":257},[240,107618,103362],{"class":443},[240,107620,103365],{"class":257},[240,107622,107623,107625,107627,107630],{"class":242,"line":261},[240,107624,32361],{"class":264},[240,107626,789],{"class":257},[240,107628,107629],{"class":443},"\"qpos:\"",[240,107631,107632],{"class":257},", data.qpos)\n",[240,107634,107635,107637,107639,107642],{"class":242,"line":277},[240,107636,32361],{"class":264},[240,107638,789],{"class":257},[240,107640,107641],{"class":443},"\"qvel:\"",[240,107643,107644],{"class":257},", data.qvel)\n",[19,107646,107647],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[32,107649,107650],{"id":107650},"仿真结果每次都一样",[19,107652,107653,107654,107656],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[23,107655,105940],{},"、目标点或控制输入。",[14,107658,104518],{"id":104517},[19,107660,107661,107662,26565],{},"Python 控制 MuJoCo 的核心就是读写 ",[23,107663,35347],{},[1826,107665,107666,107674,107679,107684],{},[1829,107667,107668,107669,102929,107671,107673],{},"用 ",[23,107670,102981],{},[23,107672,102984],{}," 读取状态。",[1829,107675,107668,107676,107678],{},[23,107677,102987],{}," 写入控制。",[1829,107680,107668,107681,107683],{},[23,107682,103126],{}," 推进时间。",[1829,107685,107686,107687,107689],{},"手动改状态后用 ",[23,107688,106160],{}," 刷新派生量。",[19,107691,107692],{},"理解这一章后，就可以进入关节和 actuator 控制。",[2019,107694,107695],{},"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":236,"searchDepth":250,"depth":250,"links":107697},[107698,107699,107700,107707,107711,107712,107713,107723],{"id":102557,"depth":250,"text":102558},{"id":102680,"depth":250,"text":102681},{"id":102955,"depth":250,"text":102956,"children":107701},[107702,107704,107706],{"id":106465,"depth":261,"text":107703},"qpos、qvel、ctrl 是什么",{"id":106543,"depth":261,"text":107705},"mj_step 和 mj_forward 的区别",{"id":106632,"depth":261,"text":106633},{"id":103163,"depth":250,"text":103164,"children":107708},[107709,107710],{"id":103483,"depth":261,"text":103483},{"id":103619,"depth":261,"text":103619},{"id":104226,"depth":250,"text":104227},{"id":104258,"depth":250,"text":104259},{"id":104363,"depth":250,"text":104364,"children":107714},[107715,107717,107718,107720,107722],{"id":107494,"depth":261,"text":107716},"修改 data.qpos 后位置没有更新",{"id":107511,"depth":261,"text":107511},{"id":107570,"depth":261,"text":107719},"误以为 qpos 一定等于关节数",{"id":107588,"depth":261,"text":107721},"不知道某个元素在 qpos 的第几位",{"id":107650,"depth":261,"text":107650},{"id":104517,"depth":250,"text":104518},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":106228,"description":236},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":107730,"title":107731,"body":107732,"description":236,"extension":2049,"meta":109422,"navigation":2051,"path":109423,"seo":109424,"stem":109425,"__hash__":109426},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":107733,"toc":109398},[107734,107737,107739,107742,107744,107769,107772,107791,107794,107796,107798,107822,107824,107838,107840,107881,107883,107907,107909,107912,107946,107948,107961,107964,108032,108041,108045,108048,108082,108088,108091,108095,108134,108137,108157,108161,108204,108206,108235,108238,108244,108247,108249,108643,108645,108657,108659,108670,108672,108675,108704,108712,108715,108750,108753,108755,108763,108766,108768,108779,108789,108809,108812,108848,108860,108908,108927,108969,108982,109010,109015,109036,109046,109064,109067,109101,109104,109124,109127,109146,109152,109154,109157,109163,109169,109179,109182,109188,109197,109199,109245,109247,109253,109259,109262,109265,109285,109288,109294,109300,109302,109325,109328,109331,109340,109343,109381,109383,109386,109392,109395],[10,107735,107731],{"id":107736},"_4关节actuator-与力控制",[14,107738,102558],{"id":102557},[19,107740,107741],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[19,107743,106241],{},[1826,107745,107746,107752,107757,107761,107766],{},[1829,107747,107748,107751],{},[23,107749,107750],{},"hinge"," 关节",[1829,107753,107754],{},[23,107755,107756],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[1829,107758,107759],{},[23,107760,102987],{},[1829,107762,107763],{},[23,107764,107765],{},"ctrlrange",[1829,107767,107768],{},"读取关节角和角速度",[19,107770,107771],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[231,107773,107775],{"className":32324,"code":107774,"language":32326,"meta":236,"style":236},"data.ctrl[0] = ...\n",[23,107776,107777],{"__ignoreMap":236},[240,107778,107779,107782,107784,107786,107788],{"class":242,"line":243},[240,107780,107781],{"class":257},"data.ctrl[",[240,107783,1274],{"class":264},[240,107785,6395],{"class":257},[240,107787,440],{"class":288},[240,107789,107790],{"class":264}," ...\n",[19,107792,107793],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[14,107795,102681],{"id":102680},[19,107797,102684],{},[231,107799,107800],{"className":25768,"code":106298,"language":25770,"meta":236,"style":236},[23,107801,107802],{"__ignoreMap":236},[240,107803,107804,107806,107808,107810,107812,107814,107816,107818,107820],{"class":242,"line":243},[240,107805,26523],{"class":436},[240,107807,28261],{"class":443},[240,107809,25780],{"class":443},[240,107811,28346],{"class":264},[240,107813,106313],{"class":443},[240,107815,102709],{"class":443},[240,107817,104412],{"class":443},[240,107819,102725],{"class":443},[240,107821,106322],{"class":443},[19,107823,104729],{},[231,107825,107826],{"className":25768,"code":102830,"language":25770,"meta":236,"style":236},[23,107827,107828],{"__ignoreMap":236},[240,107829,107830,107832,107834,107836],{"class":242,"line":243},[240,107831,25777],{"class":436},[240,107833,25780],{"class":443},[240,107835,102841],{"class":443},[240,107837,102844],{"class":443},[19,107839,104746],{},[231,107841,107843],{"className":25768,"code":107842,"language":25770,"meta":236,"style":236},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[23,107844,107845,107862,107871],{"__ignoreMap":236},[240,107846,107847,107849,107851,107853,107856,107858,107860],{"class":242,"line":243},[240,107848,32276],{"class":436},[240,107850,31122],{"class":443},[240,107852,27062],{"class":264},[240,107854,107855],{"class":443}," mujoco-control",[240,107857,102886],{"class":443},[240,107859,102889],{"class":264},[240,107861,102892],{"class":264},[240,107863,107864,107866,107868],{"class":242,"line":250},[240,107865,32276],{"class":436},[240,107867,102899],{"class":443},[240,107869,107870],{"class":443}," mujoco-control\n",[240,107872,107873,107875,107877,107879],{"class":242,"line":261},[240,107874,25777],{"class":436},[240,107876,25780],{"class":443},[240,107878,102841],{"class":443},[240,107880,102844],{"class":443},[19,107882,102915],{},[1826,107884,107885,107891,107898,107904],{},[1829,107886,107887,107890],{},[23,107888,107889],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[1829,107892,107893,107895,107896,30331],{},[23,107894,102987],{}," 长度等于 ",[23,107897,104069],{},[1829,107899,84136,107900,107903],{},[23,107901,107902],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[1829,107905,107906],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[14,107908,102956],{"id":102955},[19,107910,107911],{},"关节决定 body 如何运动:",[231,107913,107915],{"className":55003,"code":107914,"language":55005,"meta":236,"style":236},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[23,107916,107917],{"__ignoreMap":236},[240,107918,107919,107921,107923,107925,107927,107930,107932,107934,107936,107939,107941,107944],{"class":242,"line":243},[240,107920,431],{"class":257},[240,107922,104866],{"class":253},[240,107924,16869],{"class":436},[240,107926,440],{"class":257},[240,107928,107929],{"class":443},"\"hinge\"",[240,107931,55759],{"class":436},[240,107933,440],{"class":257},[240,107935,107929],{"class":443},[240,107937,107938],{"class":436}," axis",[240,107940,440],{"class":257},[240,107942,107943],{"class":443},"\"0 1 0\"",[240,107945,103055],{"class":257},[19,107947,104962],{},[1826,107949,107950,107955,107958],{},[1829,107951,107952,107953],{},"名字是 ",[23,107954,107750],{},[1829,107956,107957],{},"类型是旋转关节",[1829,107959,107960],{},"绕 y 轴旋转",[19,107962,107963],{},"actuator 决定如何施加控制:",[231,107965,107967],{"className":55003,"code":107966,"language":55005,"meta":236,"style":236},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[23,107968,107969,107978,108024],{"__ignoreMap":236},[240,107970,107971,107973,107976],{"class":242,"line":243},[240,107972,431],{"class":257},[240,107974,107975],{"class":253},"actuator",[240,107977,447],{"class":257},[240,107979,107980,107982,107985,107987,107989,107992,107995,107997,107999,108002,108004,108006,108009,108011,108014,108017,108019,108022],{"class":242,"line":250},[240,107981,452],{"class":257},[240,107983,107984],{"class":253},"motor",[240,107986,16869],{"class":436},[240,107988,440],{"class":257},[240,107990,107991],{"class":443},"\"hinge_motor\"",[240,107993,107994],{"class":436}," joint",[240,107996,440],{"class":257},[240,107998,107929],{"class":443},[240,108000,108001],{"class":436}," gear",[240,108003,440],{"class":257},[240,108005,5630],{"class":443},[240,108007,108008],{"class":436}," ctrlrange",[240,108010,440],{"class":257},[240,108012,108013],{"class":443},"\"-2 2\"",[240,108015,108016],{"class":436}," ctrllimited",[240,108018,440],{"class":257},[240,108020,108021],{"class":443},"\"true\"",[240,108023,103055],{"class":257},[240,108025,108026,108028,108030],{"class":242,"line":261},[240,108027,592],{"class":257},[240,108029,107975],{"class":253},[240,108031,447],{"class":257},[19,108033,108034,108037,108038,30331],{},[23,108035,108036],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[23,108039,108040],{},"[-2, 2]",[32,108042,108044],{"id":108043},"joint-和-actuator-的关系","joint 和 actuator 的关系",[19,108046,108047],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[802,108049,108050,108060],{},[805,108051,108052],{},[808,108053,108054,108056,108058],{},[811,108055,27700],{"align":813},[811,108057,817],{"align":813},[811,108059,102645],{"align":813},[819,108061,108062,108072],{},[808,108063,108064,108066,108069],{},[824,108065,104866],{"align":813},[824,108067,108068],{"align":813},"定义能怎么动",[824,108070,108071],{"align":813},"门轴允许门旋转",[808,108073,108074,108076,108079],{},[824,108075,107975],{"align":813},[824,108077,108078],{"align":813},"定义怎么施力或控制",[824,108080,108081],{"align":813},"人推门、马达带动门",[19,108083,108084,108085,108087],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[23,108086,102987],{}," 主动控制它。",[19,108089,108090],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[32,108092,108094],{"id":108093},"hinge-joint","hinge joint",[231,108096,108098],{"className":55003,"code":108097,"language":55005,"meta":236,"style":236},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[23,108099,108100],{"__ignoreMap":236},[240,108101,108102,108104,108106,108108,108110,108112,108114,108116,108118,108120,108122,108124,108127,108129,108132],{"class":242,"line":243},[240,108103,431],{"class":257},[240,108105,104866],{"class":253},[240,108107,16869],{"class":436},[240,108109,440],{"class":257},[240,108111,107929],{"class":443},[240,108113,55759],{"class":436},[240,108115,440],{"class":257},[240,108117,107929],{"class":443},[240,108119,107938],{"class":436},[240,108121,440],{"class":257},[240,108123,107943],{"class":443},[240,108125,108126],{"class":436}," damping",[240,108128,440],{"class":257},[240,108130,108131],{"class":443},"\"0.1\"",[240,108133,103055],{"class":257},[19,108135,108136],{},"含义：",[1826,108138,108139,108145,108151],{},[1829,108140,108141,108144],{},[23,108142,108143],{},"type=\"hinge\"","：只能绕一个轴旋转。",[1829,108146,108147,108150],{},[23,108148,108149],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[1829,108152,108153,108156],{},[23,108154,108155],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[32,108158,108160],{"id":108159},"motor-actuator","motor actuator",[231,108162,108164],{"className":55003,"code":108163,"language":55005,"meta":236,"style":236},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[23,108165,108166],{"__ignoreMap":236},[240,108167,108168,108170,108172,108174,108176,108178,108180,108182,108184,108186,108188,108190,108192,108194,108196,108198,108200,108202],{"class":242,"line":243},[240,108169,431],{"class":257},[240,108171,107984],{"class":253},[240,108173,16869],{"class":436},[240,108175,440],{"class":257},[240,108177,107991],{"class":443},[240,108179,107994],{"class":436},[240,108181,440],{"class":257},[240,108183,107929],{"class":443},[240,108185,108001],{"class":436},[240,108187,440],{"class":257},[240,108189,5630],{"class":443},[240,108191,108008],{"class":436},[240,108193,440],{"class":257},[240,108195,108013],{"class":443},[240,108197,108016],{"class":436},[240,108199,440],{"class":257},[240,108201,108021],{"class":443},[240,108203,103055],{"class":257},[19,108205,108136],{},[1826,108207,108208,108217,108223,108229],{},[1829,108209,108210,108213,108214,108216],{},[23,108211,108212],{},"joint=\"hinge\"","：这个电机作用在名为 ",[23,108215,107750],{}," 的关节上。",[1829,108218,108219,108222],{},[23,108220,108221],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[1829,108224,108225,108228],{},[23,108226,108227],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[1829,108230,108231,108234],{},[23,108232,108233],{},"ctrllimited=\"true\"","：启用控制范围限制。",[19,108236,108237],{},"简单理解：",[231,108239,108242],{"className":108240,"code":108241,"language":7139,"meta":236},[7137],"实际施加效果 ≈ data.ctrl[0] * gear\n",[23,108243,108241],{"__ignoreMap":236},[19,108245,108246],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[14,108248,103164],{"id":103163},[231,108250,108252],{"className":32324,"code":108251,"language":32326,"meta":236,"style":236},"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",[23,108253,108254,108261,108265,108271,108281,108285,108289,108297,108302,108307,108311,108315,108320,108325,108329,108334,108339,108344,108349,108353,108357,108361,108366,108371,108376,108380,108384,108388,108392,108404,108416,108424,108428,108438,108448,108458,108462,108475,108488,108492,108509,108523,108558,108562,108566,108577,108592,108607,108619,108623,108627,108639],{"__ignoreMap":236},[240,108255,108256,108258],{"class":242,"line":243},[240,108257,32338],{"class":288},[240,108259,108260],{"class":257}," math\n",[240,108262,108263],{"class":242,"line":250},[240,108264,4353],{"emptyLinePlaceholder":2051},[240,108266,108267,108269],{"class":242,"line":261},[240,108268,32338],{"class":288},[240,108270,103212],{"class":257},[240,108272,108273,108275,108277,108279],{"class":242,"line":277},[240,108274,32338],{"class":288},[240,108276,33326],{"class":257},[240,108278,33329],{"class":288},[240,108280,33332],{"class":257},[240,108282,108283],{"class":242,"line":294},[240,108284,4353],{"emptyLinePlaceholder":2051},[240,108286,108287],{"class":242,"line":309},[240,108288,4353],{"emptyLinePlaceholder":2051},[240,108290,108291,108293,108295],{"class":242,"line":529},[240,108292,103225],{"class":264},[240,108294,15514],{"class":288},[240,108296,103230],{"class":443},[240,108298,108299],{"class":242,"line":549},[240,108300,108301],{"class":443},"\u003Cmujoco model=\"one_link_motor\">\n",[240,108303,108304],{"class":242,"line":569},[240,108305,108306],{"class":443},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[240,108308,108309],{"class":242,"line":589},[240,108310,4353],{"emptyLinePlaceholder":2051},[240,108312,108313],{"class":242,"line":715},[240,108314,103249],{"class":443},[240,108316,108317],{"class":242,"line":727},[240,108318,108319],{"class":443},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[240,108321,108322],{"class":242,"line":1730},[240,108323,108324],{"class":443},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[240,108326,108327],{"class":242,"line":3582},[240,108328,4353],{"emptyLinePlaceholder":2051},[240,108330,108331],{"class":242,"line":3596},[240,108332,108333],{"class":443},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[240,108335,108336],{"class":242,"line":3601},[240,108337,108338],{"class":443},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[240,108340,108341],{"class":242,"line":3607},[240,108342,108343],{"class":443},"        \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",[240,108345,108346],{"class":242,"line":3628},[240,108347,108348],{"class":443},"      \u003C\u002Fbody>\n",[240,108350,108351],{"class":242,"line":3633},[240,108352,103278],{"class":443},[240,108354,108355],{"class":242,"line":3647},[240,108356,103283],{"class":443},[240,108358,108359],{"class":242,"line":3652},[240,108360,4353],{"emptyLinePlaceholder":2051},[240,108362,108363],{"class":242,"line":3681},[240,108364,108365],{"class":443},"  \u003Cactuator>\n",[240,108367,108368],{"class":242,"line":3686},[240,108369,108370],{"class":443},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[240,108372,108373],{"class":242,"line":3703},[240,108374,108375],{"class":443},"  \u003C\u002Factuator>\n",[240,108377,108378],{"class":242,"line":3708},[240,108379,103288],{"class":443},[240,108381,108382],{"class":242,"line":3713},[240,108383,97611],{"class":443},[240,108385,108386],{"class":242,"line":3718},[240,108387,4353],{"emptyLinePlaceholder":2051},[240,108389,108390],{"class":242,"line":3732},[240,108391,4353],{"emptyLinePlaceholder":2051},[240,108393,108394,108396,108398,108400,108402],{"class":242,"line":3737},[240,108395,33893],{"class":288},[240,108397,3926],{"class":436},[240,108399,103309],{"class":257},[240,108401,97599],{"class":264},[240,108403,5691],{"class":257},[240,108405,108406,108408,108410,108412,108414],{"class":242,"line":4530},[240,108407,103318],{"class":257},[240,108409,440],{"class":288},[240,108411,103323],{"class":257},[240,108413,103225],{"class":264},[240,108415,2129],{"class":257},[240,108417,108418,108420,108422],{"class":242,"line":4544},[240,108419,103332],{"class":257},[240,108421,440],{"class":288},[240,108423,103337],{"class":257},[240,108425,108426],{"class":242,"line":4552},[240,108427,4353],{"emptyLinePlaceholder":2051},[240,108429,108430,108432,108434,108436],{"class":242,"line":4557},[240,108431,33245],{"class":264},[240,108433,789],{"class":257},[240,108435,103350],{"class":443},[240,108437,103353],{"class":257},[240,108439,108440,108442,108444,108446],{"class":242,"line":4563},[240,108441,33245],{"class":264},[240,108443,789],{"class":257},[240,108445,103362],{"class":443},[240,108447,103365],{"class":257},[240,108449,108450,108452,108454,108456],{"class":242,"line":4569},[240,108451,33245],{"class":264},[240,108453,789],{"class":257},[240,108455,103374],{"class":443},[240,108457,103377],{"class":257},[240,108459,108460],{"class":242,"line":4574},[240,108461,4353],{"emptyLinePlaceholder":2051},[240,108463,108464,108466,108469,108471,108473],{"class":242,"line":9899},[240,108465,5053],{"class":288},[240,108467,108468],{"class":257}," model.nu ",[240,108470,22895],{"class":288},[240,108472,27065],{"class":264},[240,108474,5691],{"class":257},[240,108476,108477,108479,108481,108483,108486],{"class":242,"line":9923},[240,108478,105342],{"class":288},[240,108480,105345],{"class":264},[240,108482,789],{"class":257},[240,108484,108485],{"class":443},"\"expected exactly one actuator\"",[240,108487,2129],{"class":257},[240,108489,108490],{"class":242,"line":9928},[240,108491,4353],{"emptyLinePlaceholder":2051},[240,108493,108494,108496,108498,108500,108502,108504,108507],{"class":242,"line":9934},[240,108495,5153],{"class":288},[240,108497,33562],{"class":257},[240,108499,27989],{"class":288},[240,108501,34389],{"class":264},[240,108503,789],{"class":257},[240,108505,108506],{"class":264},"2000",[240,108508,32732],{"class":257},[240,108510,108511,108514,108516,108518,108520],{"class":242,"line":9961},[240,108512,108513],{"class":257},"        t ",[240,108515,440],{"class":288},[240,108517,33562],{"class":257},[240,108519,2554],{"class":288},[240,108521,108522],{"class":257}," model.opt.timestep\n",[240,108524,108525,108528,108530,108532,108534,108537,108539,108542,108544,108546,108549,108551,108553,108555],{"class":242,"line":9966},[240,108526,108527],{"class":257},"        data.ctrl[",[240,108529,1274],{"class":264},[240,108531,6395],{"class":257},[240,108533,440],{"class":288},[240,108535,108536],{"class":264}," 1.5",[240,108538,8469],{"class":288},[240,108540,108541],{"class":257}," math.sin(",[240,108543,107170],{"class":264},[240,108545,8469],{"class":288},[240,108547,108548],{"class":257}," math.pi ",[240,108550,2554],{"class":288},[240,108552,63791],{"class":264},[240,108554,8469],{"class":288},[240,108556,108557],{"class":257}," t)\n",[240,108559,108560],{"class":242,"line":9972},[240,108561,103427],{"class":257},[240,108563,108564],{"class":242,"line":9984},[240,108565,4353],{"emptyLinePlaceholder":2051},[240,108567,108568,108570,108572,108575],{"class":242,"line":9996},[240,108569,33245],{"class":264},[240,108571,789],{"class":257},[240,108573,108574],{"class":443},"\"time:\"",[240,108576,103389],{"class":257},[240,108578,108579,108581,108583,108586,108588,108590],{"class":242,"line":10008},[240,108580,33245],{"class":264},[240,108582,789],{"class":257},[240,108584,108585],{"class":443},"\"joint qpos:\"",[240,108587,106840],{"class":257},[240,108589,1716],{"class":264},[240,108591,32443],{"class":257},[240,108593,108594,108596,108598,108601,108603,108605],{"class":242,"line":11667},[240,108595,33245],{"class":264},[240,108597,789],{"class":257},[240,108599,108600],{"class":443},"\"joint qvel:\"",[240,108602,106856],{"class":257},[240,108604,1716],{"class":264},[240,108606,32443],{"class":257},[240,108608,108609,108611,108613,108616],{"class":242,"line":11692},[240,108610,33245],{"class":264},[240,108612,789],{"class":257},[240,108614,108615],{"class":443},"\"last ctrl:\"",[240,108617,108618],{"class":257},", data.ctrl.copy())\n",[240,108620,108621],{"class":242,"line":11715},[240,108622,4353],{"emptyLinePlaceholder":2051},[240,108624,108625],{"class":242,"line":11739},[240,108626,4353],{"emptyLinePlaceholder":2051},[240,108628,108629,108631,108633,108635,108637],{"class":242,"line":11744},[240,108630,3489],{"class":288},[240,108632,33166],{"class":264},[240,108634,103470],{"class":288},[240,108636,103473],{"class":443},[240,108638,5691],{"class":257},[240,108640,108641],{"class":242,"line":11749},[240,108642,103480],{"class":257},[19,108644,105480],{},[231,108646,108648],{"className":25768,"code":108647,"language":25770,"meta":236,"style":236},"touch ch4_joint_motor.py\n",[23,108649,108650],{"__ignoreMap":236},[240,108651,108652,108654],{"class":242,"line":243},[240,108653,103194],{"class":436},[240,108655,108656],{"class":443}," ch4_joint_motor.py\n",[19,108658,104212],{},[231,108660,108662],{"className":25768,"code":108661,"language":25770,"meta":236,"style":236},"python ch4_joint_motor.py\n",[23,108663,108664],{"__ignoreMap":236},[240,108665,108666,108668],{"class":242,"line":243},[240,108667,32326],{"class":436},[240,108669,108656],{"class":443},[32,108671,103483],{"id":103483},[19,108673,108674],{},"检查 actuator 数量：",[231,108676,108678],{"className":32324,"code":108677,"language":32326,"meta":236,"style":236},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[23,108679,108680,108692],{"__ignoreMap":236},[240,108681,108682,108684,108686,108688,108690],{"class":242,"line":243},[240,108683,3489],{"class":288},[240,108685,108468],{"class":257},[240,108687,22895],{"class":288},[240,108689,27065],{"class":264},[240,108691,5691],{"class":257},[240,108693,108694,108696,108698,108700,108702],{"class":242,"line":250},[240,108695,105805],{"class":288},[240,108697,105345],{"class":264},[240,108699,789],{"class":257},[240,108701,108485],{"class":443},[240,108703,2129],{"class":257},[19,108705,108706,108708,108709,108711],{},[23,108707,104069],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[23,108710,102987],{}," 长度应该是 1。",[19,108713,108714],{},"产生正弦控制信号：",[231,108716,108718],{"className":32324,"code":108717,"language":32326,"meta":236,"style":236},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[23,108719,108720],{"__ignoreMap":236},[240,108721,108722,108724,108726,108728,108730,108732,108734,108736,108738,108740,108742,108744,108746,108748],{"class":242,"line":243},[240,108723,107781],{"class":257},[240,108725,1274],{"class":264},[240,108727,6395],{"class":257},[240,108729,440],{"class":288},[240,108731,108536],{"class":264},[240,108733,8469],{"class":288},[240,108735,108541],{"class":257},[240,108737,107170],{"class":264},[240,108739,8469],{"class":288},[240,108741,108548],{"class":257},[240,108743,2554],{"class":288},[240,108745,63791],{"class":264},[240,108747,8469],{"class":288},[240,108749,108557],{"class":257},[19,108751,108752],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[19,108754,103584],{},[231,108756,108757],{"className":32324,"code":106415,"language":32326,"meta":236,"style":236},[23,108758,108759],{"__ignoreMap":236},[240,108760,108761],{"class":242,"line":243},[240,108762,106415],{"class":257},[19,108764,108765],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[32,108767,103619],{"id":103619},[231,108769,108771],{"className":32324,"code":108770,"language":32326,"meta":236,"style":236},"import math\n",[23,108772,108773],{"__ignoreMap":236},[240,108774,108775,108777],{"class":242,"line":243},[240,108776,32338],{"class":288},[240,108778,108260],{"class":257},[19,108780,108781,108782,102929,108785,108788],{},"导入 Python 标准库里的数学模块。后面要用 ",[23,108783,108784],{},"math.sin",[23,108786,108787],{},"math.pi"," 生成周期变化的控制信号。",[231,108790,108791],{"className":32324,"code":105596,"language":32326,"meta":236,"style":236},[23,108792,108793,108799],{"__ignoreMap":236},[240,108794,108795,108797],{"class":242,"line":243},[240,108796,32338],{"class":288},[240,108798,103212],{"class":257},[240,108800,108801,108803,108805,108807],{"class":242,"line":250},[240,108802,32338],{"class":288},[240,108804,33326],{"class":257},[240,108806,33329],{"class":288},[240,108808,33332],{"class":257},[19,108810,108811],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[231,108813,108814],{"className":55003,"code":108097,"language":55005,"meta":236,"style":236},[23,108815,108816],{"__ignoreMap":236},[240,108817,108818,108820,108822,108824,108826,108828,108830,108832,108834,108836,108838,108840,108842,108844,108846],{"class":242,"line":243},[240,108819,431],{"class":257},[240,108821,104866],{"class":253},[240,108823,16869],{"class":436},[240,108825,440],{"class":257},[240,108827,107929],{"class":443},[240,108829,55759],{"class":436},[240,108831,440],{"class":257},[240,108833,107929],{"class":443},[240,108835,107938],{"class":436},[240,108837,440],{"class":257},[240,108839,107943],{"class":443},[240,108841,108126],{"class":436},[240,108843,440],{"class":257},[240,108845,108131],{"class":443},[240,108847,103055],{"class":257},[19,108849,108850,108851,108853,108854,108856,108857,108859],{},"这行定义关节。",[23,108852,107750],{}," 表示旋转关节。",[23,108855,108149],{}," 表示绕 y 轴旋转。",[23,108858,108155],{}," 表示有一点阻尼，运动不会完全无损耗。",[231,108861,108863],{"className":55003,"code":108862,"language":55005,"meta":236,"style":236},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[23,108864,108865],{"__ignoreMap":236},[240,108866,108867,108869,108871,108873,108875,108878,108880,108882,108885,108888,108890,108893,108895,108897,108899,108901,108903,108906],{"class":242,"line":243},[240,108868,431],{"class":257},[240,108870,103031],{"class":253},[240,108872,16869],{"class":436},[240,108874,440],{"class":257},[240,108876,108877],{"class":443},"\"link_geom\"",[240,108879,55759],{"class":436},[240,108881,440],{"class":257},[240,108883,108884],{"class":443},"\"capsule\"",[240,108886,108887],{"class":436}," fromto",[240,108889,440],{"class":257},[240,108891,108892],{"class":443},"\"0 0 0 0 0 0.5\"",[240,108894,103047],{"class":436},[240,108896,440],{"class":257},[240,108898,105688],{"class":443},[240,108900,103912],{"class":436},[240,108902,440],{"class":257},[240,108904,108905],{"class":443},"\"0.5\"",[240,108907,103055],{"class":257},[19,108909,108910,108911,108913,108914,108916,108917,108920,108921,30331,108924,108926],{},"这行定义摆杆的形状。",[23,108912,105075],{}," 是胶囊体，适合表示杆子。",[23,108915,105086],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[23,108918,108919],{},"(0,0,0)"," 延伸到 ",[23,108922,108923],{},"(0,0,0.5)",[23,108925,105080],{}," 是半径。",[231,108928,108929],{"className":55003,"code":108163,"language":55005,"meta":236,"style":236},[23,108930,108931],{"__ignoreMap":236},[240,108932,108933,108935,108937,108939,108941,108943,108945,108947,108949,108951,108953,108955,108957,108959,108961,108963,108965,108967],{"class":242,"line":243},[240,108934,431],{"class":257},[240,108936,107984],{"class":253},[240,108938,16869],{"class":436},[240,108940,440],{"class":257},[240,108942,107991],{"class":443},[240,108944,107994],{"class":436},[240,108946,440],{"class":257},[240,108948,107929],{"class":443},[240,108950,108001],{"class":436},[240,108952,440],{"class":257},[240,108954,5630],{"class":443},[240,108956,108008],{"class":436},[240,108958,440],{"class":257},[240,108960,108013],{"class":443},[240,108962,108016],{"class":436},[240,108964,440],{"class":257},[240,108966,108021],{"class":443},[240,108968,103055],{"class":257},[19,108970,108971,108972,108974,108975,108978,108979,108981],{},"这行定义电机。它作用在 ",[23,108973,107750],{}," 关节上。",[23,108976,108977],{},"gear"," 可以理解成放大倍数。",[23,108980,107765],{}," 限制控制输入范围。",[231,108983,108984],{"className":32324,"code":108677,"language":32326,"meta":236,"style":236},[23,108985,108986,108998],{"__ignoreMap":236},[240,108987,108988,108990,108992,108994,108996],{"class":242,"line":243},[240,108989,3489],{"class":288},[240,108991,108468],{"class":257},[240,108993,22895],{"class":288},[240,108995,27065],{"class":264},[240,108997,5691],{"class":257},[240,108999,109000,109002,109004,109006,109008],{"class":242,"line":250},[240,109001,105805],{"class":288},[240,109003,105345],{"class":264},[240,109005,789],{"class":257},[240,109007,108485],{"class":443},[240,109009,2129],{"class":257},[19,109011,109012,109014],{},[23,109013,104069],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[231,109016,109018],{"className":32324,"code":109017,"language":32326,"meta":236,"style":236},"for step in range(2000):\n",[23,109019,109020],{"__ignoreMap":236},[240,109021,109022,109024,109026,109028,109030,109032,109034],{"class":242,"line":243},[240,109023,4977],{"class":288},[240,109025,33562],{"class":257},[240,109027,27989],{"class":288},[240,109029,34389],{"class":264},[240,109031,789],{"class":257},[240,109033,108506],{"class":264},[240,109035,32732],{"class":257},[19,109037,109038,109039,109041,109042,109045],{},"循环 2000 步。这里没有用 ",[23,109040,3085],{},"，而是用 ",[23,109043,109044],{},"step","，因为后面要用当前步数计算时间。",[231,109047,109049],{"className":32324,"code":109048,"language":32326,"meta":236,"style":236},"t = step * model.opt.timestep\n",[23,109050,109051],{"__ignoreMap":236},[240,109052,109053,109056,109058,109060,109062],{"class":242,"line":243},[240,109054,109055],{"class":257},"t ",[240,109057,440],{"class":288},[240,109059,33562],{"class":257},[240,109061,2554],{"class":288},[240,109063,108522],{"class":257},[19,109065,109066],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[231,109068,109069],{"className":32324,"code":108717,"language":32326,"meta":236,"style":236},[23,109070,109071],{"__ignoreMap":236},[240,109072,109073,109075,109077,109079,109081,109083,109085,109087,109089,109091,109093,109095,109097,109099],{"class":242,"line":243},[240,109074,107781],{"class":257},[240,109076,1274],{"class":264},[240,109078,6395],{"class":257},[240,109080,440],{"class":288},[240,109082,108536],{"class":264},[240,109084,8469],{"class":288},[240,109086,108541],{"class":257},[240,109088,107170],{"class":264},[240,109090,8469],{"class":288},[240,109092,108548],{"class":257},[240,109094,2554],{"class":288},[240,109096,63791],{"class":264},[240,109098,8469],{"class":288},[240,109100,108557],{"class":257},[19,109102,109103],{},"这行给电机输入一个正弦波。拆开看：",[1826,109105,109106,109112,109118],{},[1829,109107,109108,109111],{},[23,109109,109110],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[1829,109113,109114,109117],{},[23,109115,109116],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[1829,109119,109120,109123],{},[23,109121,109122],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[19,109125,109126],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[231,109128,109130],{"className":32324,"code":109129,"language":32326,"meta":236,"style":236},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[23,109131,109132],{"__ignoreMap":236},[240,109133,109134,109136,109138,109140,109142,109144],{"class":242,"line":243},[240,109135,32361],{"class":264},[240,109137,789],{"class":257},[240,109139,108585],{"class":443},[240,109141,106840],{"class":257},[240,109143,1716],{"class":264},[240,109145,32443],{"class":257},[19,109147,109148,109149,109151],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[23,109150,102981],{}," 只有一个数。",[14,109153,104227],{"id":104226},[19,109155,109156],{},"输出类似:",[231,109158,109161],{"className":109159,"code":109160,"language":7139,"meta":236},[7137],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[23,109162,109160],{"__ignoreMap":236},[19,109164,109165,109166,109168],{},"这里 ",[23,109167,108036],{}," 是电机输入。",[19,109170,109171,109174,109175,109178],{},[23,109172,109173],{},"joint qpos"," 是关节角度，单位通常是弧度。",[23,109176,109177],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[19,109180,109181],{},"角度单位提示：",[231,109183,109186],{"className":109184,"code":109185,"language":7139,"meta":236},[7137],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[23,109187,109185],{"__ignoreMap":236},[19,109189,109190,109191,109193,109194,109196],{},"如果你看到 ",[23,109192,105940],{}," 是 ",[23,109195,37275],{},"，大约就是 28.6 度。",[14,109198,104259],{"id":104258},[1826,109200,109201,109208,109211,109218,109221,109229,109237],{},[1829,109202,104322,109203,104325,109205,30331],{},[23,109204,108221],{},[23,109206,109207],{},"gear=\"5\"",[1829,109209,109210],{},"重新运行，观察关节运动是否更剧烈。",[1829,109212,104322,109213,104325,109215,30331],{},[23,109214,107765],{},[23,109216,109217],{},"-0.2 0.2",[1829,109219,109220],{},"重新运行，观察控制能力是否变弱。",[1829,109222,109223,109224,109226,109227,30331],{},"去掉 actuator，确认 ",[23,109225,104069],{}," 变成 ",[23,109228,1274],{},[1829,109230,104322,109231,104325,109233,109236],{},[23,109232,108155],{},[23,109234,109235],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[1829,109238,104322,109239,104325,109241,109244],{},[23,109240,108149],{},[23,109242,109243],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[14,109246,104364],{"id":104363},[32,109248,109250],{"id":109249},"indexerror-index-0-is-out-of-bounds",[23,109251,109252],{},"IndexError: index 0 is out of bounds",[19,109254,109255,109256,109258],{},"原因是 ",[23,109257,107902],{},"，没有 actuator。",[32,109260,109261],{"id":109261},"关节几乎不动",[19,109263,109264],{},"可能原因:",[1826,109266,109267,109272,109276,109282],{},[1829,109268,109269,109271],{},[23,109270,108977],{}," 太小",[1829,109273,109274,109271],{},[23,109275,107765],{},[1829,109277,109278,109281],{},[23,109279,109280],{},"damping"," 太大",[1829,109283,109284],{},"重力方向导致运动不明显",[32,109286,109287],{"id":109287},"模型编译失败",[19,109289,109290,109291,109293],{},"检查 actuator 引用的 ",[23,109292,108212],{}," 是否存在，joint 名称是否拼写一致。",[32,109295,109297,109299],{"id":109296},"datactrl0-写了但没有效果",[23,109298,108036],{}," 写了但没有效果",[19,109301,104486],{},[1826,109303,109304,109309,109312,109317,109322],{},[1829,109305,109306,109308],{},[23,109307,104069],{}," 是否大于 0。",[1829,109310,109311],{},"motor 是否引用了正确 joint。",[1829,109313,109314,109316],{},[23,109315,108977],{}," 是否太小。",[1829,109318,109319,109321],{},[23,109320,107765],{}," 是否把输入限制得太小。",[1829,109323,109324],{},"body 是否真的有可动 joint。",[32,109326,109327],{"id":109327},"控制输入超过范围会怎样",[19,109329,109330],{},"如果设置了：",[231,109332,109334],{"className":55003,"code":109333,"language":55005,"meta":236,"style":236},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[23,109335,109336],{"__ignoreMap":236},[240,109337,109338],{"class":242,"line":243},[240,109339,109333],{"class":257},[19,109341,109342],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[231,109344,109346],{"className":32324,"code":109345,"language":32326,"meta":236,"style":236},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[23,109347,109348,109368],{"__ignoreMap":236},[240,109349,109350,109353,109355,109358,109360,109362,109364,109366],{"class":242,"line":243},[240,109351,109352],{"class":257},"action ",[240,109354,440],{"class":288},[240,109356,109357],{"class":257}," np.clip(action, ",[240,109359,2631],{"class":288},[240,109361,107170],{"class":264},[240,109363,1277],{"class":257},[240,109365,107170],{"class":264},[240,109367,2129],{"class":257},[240,109369,109370,109372,109374,109376,109378],{"class":242,"line":250},[240,109371,107781],{"class":257},[240,109373,1274],{"class":264},[240,109375,6395],{"class":257},[240,109377,440],{"class":288},[240,109379,109380],{"class":257}," action\n",[14,109382,104518],{"id":104517},[19,109384,109385],{},"这一章建立了控制任务的基本形式：",[231,109387,109390],{"className":109388,"code":109389,"language":7139,"meta":236},[7137],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[23,109391,109389],{"__ignoreMap":236},[19,109393,109394],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[2019,109396,109397],{},"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":236,"searchDepth":250,"depth":250,"links":109399},[109400,109401,109402,109407,109411,109412,109413,109421],{"id":102557,"depth":250,"text":102558},{"id":102680,"depth":250,"text":102681},{"id":102955,"depth":250,"text":102956,"children":109403},[109404,109405,109406],{"id":108043,"depth":261,"text":108044},{"id":108093,"depth":261,"text":108094},{"id":108159,"depth":261,"text":108160},{"id":103163,"depth":250,"text":103164,"children":109408},[109409,109410],{"id":103483,"depth":261,"text":103483},{"id":103619,"depth":261,"text":103619},{"id":104226,"depth":250,"text":104227},{"id":104258,"depth":250,"text":104259},{"id":104363,"depth":250,"text":104364,"children":109414},[109415,109416,109417,109418,109420],{"id":109249,"depth":261,"text":109252},{"id":109261,"depth":261,"text":109261},{"id":109287,"depth":261,"text":109287},{"id":109296,"depth":261,"text":109419},"data.ctrl[0] 写了但没有效果",{"id":109327,"depth":261,"text":109327},{"id":104517,"depth":250,"text":104518},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":107731,"description":236},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":109428,"title":109429,"body":109430,"description":236,"extension":2049,"meta":111339,"navigation":2051,"path":111340,"seo":111341,"stem":111342,"__hash__":111343},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":109431,"toc":111315},[109432,109435,109437,109440,109448,109451,109468,109471,109496,109499,109545,109547,109549,109604,109606,109625,109627,109670,109673,109690,109693,109709,109719,109726,109728,109731,109734,109768,109771,109819,109823,109826,109840,109849,109853,109856,109881,109884,109888,109901,109904,109910,109913,109928,109930,109933,110193,110195,110207,110210,110522,110524,110536,110538,110541,110556,110561,110564,110586,110589,110592,110626,110629,110633,110644,110647,110664,110667,110681,110688,110708,110715,110729,110732,110744,110759,110779,110782,110804,110807,110811,110826,110837,110852,110855,110885,110901,110930,110938,110962,110965,110983,110993,111005,111012,111021,111027,111036,111039,111041,111050,111053,111068,111070,111073,111084,111087,111098,111101,111119,111121,111138,111141,111169,111171,111175,111178,111208,111214,111217,111221,111229,111232,111234,111255,111258,111261,111277,111280,111296,111298,111301,111312],[10,109433,109429],{"id":109434},"_5viewer-可视化与-renderer-离屏渲染",[14,109436,102558],{"id":102557},[19,109438,109439],{},"本章掌握两类可视化方式:",[1826,109441,109442,109445],{},[1829,109443,109444],{},"交互式 viewer: 适合人工观察仿真",[1829,109446,109447],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[19,109449,109450],{},"使用官方接口:",[231,109452,109454],{"className":32324,"code":109453,"language":32326,"meta":236,"style":236},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[23,109455,109456,109463],{"__ignoreMap":236},[240,109457,109458,109460],{"class":242,"line":243},[240,109459,32338],{"class":288},[240,109461,109462],{"class":257}," mujoco.viewer\n",[240,109464,109465],{"class":242,"line":250},[240,109466,109467],{"class":257},"mujoco.viewer.launch_passive(model, data)\n",[19,109469,109470],{},"以及:",[231,109472,109474],{"className":32324,"code":109473,"language":32326,"meta":236,"style":236},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[23,109475,109476,109486],{"__ignoreMap":236},[240,109477,109478,109481,109483],{"class":242,"line":243},[240,109479,109480],{"class":257},"renderer ",[240,109482,440],{"class":288},[240,109484,109485],{"class":257}," mujoco.Renderer(model)\n",[240,109487,109488,109491,109493],{"class":242,"line":250},[240,109489,109490],{"class":257},"image ",[240,109492,440],{"class":288},[240,109494,109495],{"class":257}," renderer.render()\n",[19,109497,109498],{},"新手建议先理解二者区别：",[802,109500,109501,109517],{},[805,109502,109503],{},[808,109504,109505,109508,109511,109514],{},[811,109506,109507],{"align":813},"工具",[811,109509,109510],{"align":813},"用途",[811,109512,109513],{"align":813},"是否打开窗口",[811,109515,109516],{"align":813},"常见场景",[819,109518,109519,109532],{},[808,109520,109521,109524,109527,109529],{},[824,109522,109523],{"align":813},"Viewer",[824,109525,109526],{"align":813},"人眼实时观察仿真",[824,109528,106575],{"align":813},[824,109530,109531],{"align":813},"调试模型、看控制效果",[808,109533,109534,109537,109540,109542],{},[824,109535,109536],{"align":813},"Renderer",[824,109538,109539],{"align":813},"生成图像数组",[824,109541,106588],{"align":813},[824,109543,109544],{"align":813},"保存图片、训练视觉策略、服务器批量采集",[14,109546,102681],{"id":102680},[19,109548,102684],{},[231,109550,109552],{"className":25768,"code":109551,"language":25770,"meta":236,"style":236},"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",[23,109553,109554,109566,109576,109584,109592],{"__ignoreMap":236},[240,109555,109556,109558,109560,109562,109564],{"class":242,"line":243},[240,109557,26523],{"class":436},[240,109559,28261],{"class":443},[240,109561,25780],{"class":443},[240,109563,28346],{"class":264},[240,109565,26625],{"class":264},[240,109567,109568,109570,109572,109574],{"class":242,"line":250},[240,109569,102719],{"class":443},[240,109571,102722],{"class":443},[240,109573,102725],{"class":443},[240,109575,26625],{"class":264},[240,109577,109578,109580,109582],{"class":242,"line":261},[240,109579,102732],{"class":443},[240,109581,102735],{"class":443},[240,109583,26625],{"class":264},[240,109585,109586,109588,109590],{"class":242,"line":277},[240,109587,102742],{"class":443},[240,109589,102745],{"class":443},[240,109591,26625],{"class":264},[240,109593,109594,109596,109598,109600,109602],{"class":242,"line":294},[240,109595,102752],{"class":443},[240,109597,102755],{"class":443},[240,109599,102758],{"class":443},[240,109601,102761],{"class":443},[240,109603,104427],{"class":443},[19,109605,104729],{},[231,109607,109609],{"className":25768,"code":109608,"language":25770,"meta":236,"style":236},"pip install \"mujoco>=2.3\" numpy pillow\n",[23,109610,109611],{"__ignoreMap":236},[240,109612,109613,109615,109617,109619,109622],{"class":242,"line":243},[240,109614,25777],{"class":436},[240,109616,25780],{"class":443},[240,109618,102841],{"class":443},[240,109620,109621],{"class":443}," numpy",[240,109623,109624],{"class":443}," pillow\n",[19,109626,104746],{},[231,109628,109630],{"className":25768,"code":109629,"language":25770,"meta":236,"style":236},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[23,109631,109632,109649,109658],{"__ignoreMap":236},[240,109633,109634,109636,109638,109640,109643,109645,109647],{"class":242,"line":243},[240,109635,32276],{"class":436},[240,109637,31122],{"class":443},[240,109639,27062],{"class":264},[240,109641,109642],{"class":443}," mujoco-render",[240,109644,102886],{"class":443},[240,109646,102889],{"class":264},[240,109648,102892],{"class":264},[240,109650,109651,109653,109655],{"class":242,"line":250},[240,109652,32276],{"class":436},[240,109654,102899],{"class":443},[240,109656,109657],{"class":443}," mujoco-render\n",[240,109659,109660,109662,109664,109666,109668],{"class":242,"line":261},[240,109661,25777],{"class":436},[240,109663,25780],{"class":443},[240,109665,102841],{"class":443},[240,109667,109621],{"class":443},[240,109669,109624],{"class":443},[19,109671,109672],{},"离屏渲染后端:",[231,109674,109676],{"className":25768,"code":109675,"language":25770,"meta":236,"style":236},"export MUJOCO_GL=egl\n",[23,109677,109678],{"__ignoreMap":236},[240,109679,109680,109682,109685,109687],{"class":242,"line":243},[240,109681,26989],{"class":288},[240,109683,109684],{"class":257}," MUJOCO_GL",[240,109686,440],{"class":288},[240,109688,109689],{"class":257},"egl\n",[19,109691,109692],{},"或:",[231,109694,109696],{"className":25768,"code":109695,"language":25770,"meta":236,"style":236},"export MUJOCO_GL=osmesa\n",[23,109697,109698],{"__ignoreMap":236},[240,109699,109700,109702,109704,109706],{"class":242,"line":243},[240,109701,26989],{"class":288},[240,109703,109684],{"class":257},[240,109705,440],{"class":288},[240,109707,109708],{"class":257},"osmesa\n",[19,109710,109711,109712,109715,109716,30331],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[23,109713,109714],{},"egl"," 失败，再尝试 ",[23,109717,109718],{},"osmesa",[19,109720,109721,109722,109725],{},"如果你在本机桌面环境运行，通常先不要设置 ",[23,109723,109724],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[14,109727,102956],{"id":102955},[19,109729,109730],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[19,109732,109733],{},"典型 viewer 流程:",[231,109735,109737],{"className":32324,"code":109736,"language":32326,"meta":236,"style":236},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[23,109738,109739,109752,109759,109763],{"__ignoreMap":236},[240,109740,109741,109744,109747,109749],{"class":242,"line":243},[240,109742,109743],{"class":288},"with",[240,109745,109746],{"class":257}," mujoco.viewer.launch_passive(model, data) ",[240,109748,33329],{"class":288},[240,109750,109751],{"class":257}," viewer:\n",[240,109753,109754,109756],{"class":242,"line":250},[240,109755,4204],{"class":288},[240,109757,109758],{"class":257}," viewer.is_running():\n",[240,109760,109761],{"class":242,"line":261},[240,109762,103427],{"class":257},[240,109764,109765],{"class":242,"line":277},[240,109766,109767],{"class":257},"        viewer.sync()\n",[19,109769,109770],{},"典型 renderer 流程:",[231,109772,109774],{"className":32324,"code":109773,"language":32326,"meta":236,"style":236},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[23,109775,109776,109802,109806,109811],{"__ignoreMap":236},[240,109777,109778,109780,109782,109785,109787,109789,109791,109793,109795,109797,109800],{"class":242,"line":243},[240,109779,109480],{"class":257},[240,109781,440],{"class":288},[240,109783,109784],{"class":257}," mujoco.Renderer(model, ",[240,109786,26928],{"class":792},[240,109788,440],{"class":288},[240,109790,44288],{"class":264},[240,109792,1277],{"class":257},[240,109794,26924],{"class":792},[240,109796,440],{"class":288},[240,109798,109799],{"class":264},"640",[240,109801,2129],{"class":257},[240,109803,109804],{"class":242,"line":250},[240,109805,106415],{"class":257},[240,109807,109808],{"class":242,"line":261},[240,109809,109810],{"class":257},"renderer.update_scene(data)\n",[240,109812,109813,109815,109817],{"class":242,"line":277},[240,109814,109490],{"class":257},[240,109816,440],{"class":288},[240,109818,109495],{"class":257},[32,109820,109822],{"id":109821},"viewer-的同步逻辑","viewer 的同步逻辑",[19,109824,109825],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[231,109827,109829],{"className":32324,"code":109828,"language":32326,"meta":236,"style":236},"mujoco.mj_step(model, data)\nviewer.sync()\n",[23,109830,109831,109835],{"__ignoreMap":236},[240,109832,109833],{"class":242,"line":243},[240,109834,106415],{"class":257},[240,109836,109837],{"class":242,"line":250},[240,109838,109839],{"class":257},"viewer.sync()\n",[19,109841,109842,109844,109845,109848],{},[23,109843,103126],{}," 负责算物理，",[23,109846,109847],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[32,109850,109852],{"id":109851},"为什么要-sleep","为什么要 sleep",[19,109854,109855],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[231,109857,109859],{"className":32324,"code":109858,"language":32326,"meta":236,"style":236},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[23,109860,109861],{"__ignoreMap":236},[240,109862,109863,109866,109868,109871,109873,109876,109878],{"class":242,"line":243},[240,109864,109865],{"class":257},"sleep_time ",[240,109867,440],{"class":288},[240,109869,109870],{"class":257}," model.opt.timestep ",[240,109872,2631],{"class":288},[240,109874,109875],{"class":257}," (time.time() ",[240,109877,2631],{"class":288},[240,109879,109880],{"class":257}," step_start)\n",[19,109882,109883],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[32,109885,109887],{"id":109886},"renderer-输出是什么","renderer 输出是什么",[231,109889,109891],{"className":32324,"code":109890,"language":32326,"meta":236,"style":236},"image = renderer.render()\n",[23,109892,109893],{"__ignoreMap":236},[240,109894,109895,109897,109899],{"class":242,"line":243},[240,109896,109490],{"class":257},[240,109898,440],{"class":288},[240,109900,109495],{"class":257},[19,109902,109903],{},"得到的是 NumPy 数组，形状通常是：",[231,109905,109908],{"className":109906,"code":109907,"language":7139,"meta":236},[7137],"(height, width, 3)\n",[23,109909,109907],{"__ignoreMap":236},[19,109911,109912],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[231,109914,109916],{"className":32324,"code":109915,"language":32326,"meta":236,"style":236},"Image.fromarray(image).save(\"render_output.png\")\n",[23,109917,109918],{"__ignoreMap":236},[240,109919,109920,109923,109926],{"class":242,"line":243},[240,109921,109922],{"class":257},"Image.fromarray(image).save(",[240,109924,109925],{"class":443},"\"render_output.png\"",[240,109927,2129],{"class":257},[14,109929,103164],{"id":103163},[19,109931,109932],{},"交互式 Viewer:",[231,109934,109936],{"className":32324,"code":109935,"language":32326,"meta":236,"style":236},"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",[23,109937,109938,109944,109948,109954,109960,109964,109968,109976,109981,109985,109989,109993,109998,110003,110007,110011,110015,110020,110024,110028,110032,110036,110040,110044,110056,110068,110076,110080,110090,110110,110120,110125,110130,110134,110151,110164,110169,110173,110177,110189],{"__ignoreMap":236},[240,109939,109940,109942],{"class":242,"line":243},[240,109941,32338],{"class":288},[240,109943,33775],{"class":257},[240,109945,109946],{"class":242,"line":250},[240,109947,4353],{"emptyLinePlaceholder":2051},[240,109949,109950,109952],{"class":242,"line":261},[240,109951,32338],{"class":288},[240,109953,103212],{"class":257},[240,109955,109956,109958],{"class":242,"line":277},[240,109957,32338],{"class":288},[240,109959,109462],{"class":257},[240,109961,109962],{"class":242,"line":294},[240,109963,4353],{"emptyLinePlaceholder":2051},[240,109965,109966],{"class":242,"line":309},[240,109967,4353],{"emptyLinePlaceholder":2051},[240,109969,109970,109972,109974],{"class":242,"line":529},[240,109971,103225],{"class":264},[240,109973,15514],{"class":288},[240,109975,103230],{"class":443},[240,109977,109978],{"class":242,"line":549},[240,109979,109980],{"class":443},"\u003Cmujoco model=\"viewer_demo\">\n",[240,109982,109983],{"class":242,"line":569},[240,109984,103240],{"class":443},[240,109986,109987],{"class":242,"line":589},[240,109988,4353],{"emptyLinePlaceholder":2051},[240,109990,109991],{"class":242,"line":715},[240,109992,103249],{"class":443},[240,109994,109995],{"class":242,"line":727},[240,109996,109997],{"class":443},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[240,109999,110000],{"class":242,"line":1730},[240,110001,110002],{"class":443},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[240,110004,110005],{"class":242,"line":3582},[240,110006,4353],{"emptyLinePlaceholder":2051},[240,110008,110009],{"class":242,"line":3596},[240,110010,103263],{"class":443},[240,110012,110013],{"class":242,"line":3601},[240,110014,103268],{"class":443},[240,110016,110017],{"class":242,"line":3607},[240,110018,110019],{"class":443},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[240,110021,110022],{"class":242,"line":3628},[240,110023,103278],{"class":443},[240,110025,110026],{"class":242,"line":3633},[240,110027,103283],{"class":443},[240,110029,110030],{"class":242,"line":3647},[240,110031,103288],{"class":443},[240,110033,110034],{"class":242,"line":3652},[240,110035,97611],{"class":443},[240,110037,110038],{"class":242,"line":3681},[240,110039,4353],{"emptyLinePlaceholder":2051},[240,110041,110042],{"class":242,"line":3686},[240,110043,4353],{"emptyLinePlaceholder":2051},[240,110045,110046,110048,110050,110052,110054],{"class":242,"line":3703},[240,110047,33893],{"class":288},[240,110049,3926],{"class":436},[240,110051,103309],{"class":257},[240,110053,97599],{"class":264},[240,110055,5691],{"class":257},[240,110057,110058,110060,110062,110064,110066],{"class":242,"line":3708},[240,110059,103318],{"class":257},[240,110061,440],{"class":288},[240,110063,103323],{"class":257},[240,110065,103225],{"class":264},[240,110067,2129],{"class":257},[240,110069,110070,110072,110074],{"class":242,"line":3713},[240,110071,103332],{"class":257},[240,110073,440],{"class":288},[240,110075,103337],{"class":257},[240,110077,110078],{"class":242,"line":3718},[240,110079,4353],{"emptyLinePlaceholder":2051},[240,110081,110082,110084,110086,110088],{"class":242,"line":3732},[240,110083,36124],{"class":288},[240,110085,109746],{"class":257},[240,110087,33329],{"class":288},[240,110089,109751],{"class":257},[240,110091,110092,110095,110098,110100,110103,110105,110108],{"class":242,"line":3737},[240,110093,110094],{"class":288},"        while",[240,110096,110097],{"class":257}," viewer.is_running() ",[240,110099,32408],{"class":288},[240,110101,110102],{"class":257}," data.time ",[240,110104,431],{"class":288},[240,110106,110107],{"class":264}," 5.0",[240,110109,5691],{"class":257},[240,110111,110112,110115,110117],{"class":242,"line":4530},[240,110113,110114],{"class":257},"            step_start ",[240,110116,440],{"class":288},[240,110118,110119],{"class":257}," time.time()\n",[240,110121,110122],{"class":242,"line":4544},[240,110123,110124],{"class":257},"            mujoco.mj_step(model, data)\n",[240,110126,110127],{"class":242,"line":4552},[240,110128,110129],{"class":257},"            viewer.sync()\n",[240,110131,110132],{"class":242,"line":4557},[240,110133,4353],{"emptyLinePlaceholder":2051},[240,110135,110136,110139,110141,110143,110145,110147,110149],{"class":242,"line":4563},[240,110137,110138],{"class":257},"            sleep_time ",[240,110140,440],{"class":288},[240,110142,109870],{"class":257},[240,110144,2631],{"class":288},[240,110146,109875],{"class":257},[240,110148,2631],{"class":288},[240,110150,109880],{"class":257},[240,110152,110153,110155,110158,110160,110162],{"class":242,"line":4569},[240,110154,6594],{"class":288},[240,110156,110157],{"class":257}," sleep_time ",[240,110159,3053],{"class":288},[240,110161,6045],{"class":264},[240,110163,5691],{"class":257},[240,110165,110166],{"class":242,"line":4574},[240,110167,110168],{"class":257},"                time.sleep(sleep_time)\n",[240,110170,110171],{"class":242,"line":9899},[240,110172,4353],{"emptyLinePlaceholder":2051},[240,110174,110175],{"class":242,"line":9923},[240,110176,4353],{"emptyLinePlaceholder":2051},[240,110178,110179,110181,110183,110185,110187],{"class":242,"line":9928},[240,110180,3489],{"class":288},[240,110182,33166],{"class":264},[240,110184,103470],{"class":288},[240,110186,103473],{"class":443},[240,110188,5691],{"class":257},[240,110190,110191],{"class":242,"line":9934},[240,110192,103480],{"class":257},[19,110194,105480],{},[231,110196,110198],{"className":25768,"code":110197,"language":25770,"meta":236,"style":236},"touch ch5_viewer.py\n",[23,110199,110200],{"__ignoreMap":236},[240,110201,110202,110204],{"class":242,"line":243},[240,110203,103194],{"class":436},[240,110205,110206],{"class":443}," ch5_viewer.py\n",[19,110208,110209],{},"离屏 Renderer 保存图片:",[231,110211,110213],{"className":32324,"code":110212,"language":32326,"meta":236,"style":236},"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",[23,110214,110215,110227,110231,110237,110247,110251,110255,110263,110268,110272,110276,110280,110284,110289,110293,110297,110301,110305,110309,110313,110317,110321,110325,110329,110333,110345,110357,110365,110390,110394,110410,110414,110418,110433,110442,110446,110460,110465,110470,110474,110486,110498,110502,110506,110518],{"__ignoreMap":236},[240,110216,110217,110219,110222,110224],{"class":242,"line":243},[240,110218,32683],{"class":288},[240,110220,110221],{"class":257}," pathlib ",[240,110223,32338],{"class":288},[240,110225,110226],{"class":257}," Path\n",[240,110228,110229],{"class":242,"line":250},[240,110230,4353],{"emptyLinePlaceholder":2051},[240,110232,110233,110235],{"class":242,"line":261},[240,110234,32338],{"class":288},[240,110236,103212],{"class":257},[240,110238,110239,110241,110243,110245],{"class":242,"line":277},[240,110240,32683],{"class":288},[240,110242,49209],{"class":264},[240,110244,49212],{"class":288},[240,110246,49215],{"class":257},[240,110248,110249],{"class":242,"line":294},[240,110250,4353],{"emptyLinePlaceholder":2051},[240,110252,110253],{"class":242,"line":309},[240,110254,4353],{"emptyLinePlaceholder":2051},[240,110256,110257,110259,110261],{"class":242,"line":529},[240,110258,103225],{"class":264},[240,110260,15514],{"class":288},[240,110262,103230],{"class":443},[240,110264,110265],{"class":242,"line":549},[240,110266,110267],{"class":443},"\u003Cmujoco model=\"renderer_demo\">\n",[240,110269,110270],{"class":242,"line":569},[240,110271,103240],{"class":443},[240,110273,110274],{"class":242,"line":589},[240,110275,4353],{"emptyLinePlaceholder":2051},[240,110277,110278],{"class":242,"line":715},[240,110279,103249],{"class":443},[240,110281,110282],{"class":242,"line":727},[240,110283,109997],{"class":443},[240,110285,110286],{"class":242,"line":1730},[240,110287,110288],{"class":443},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[240,110290,110291],{"class":242,"line":3582},[240,110292,110002],{"class":443},[240,110294,110295],{"class":242,"line":3596},[240,110296,4353],{"emptyLinePlaceholder":2051},[240,110298,110299],{"class":242,"line":3601},[240,110300,103263],{"class":443},[240,110302,110303],{"class":242,"line":3607},[240,110304,103268],{"class":443},[240,110306,110307],{"class":242,"line":3628},[240,110308,110019],{"class":443},[240,110310,110311],{"class":242,"line":3633},[240,110312,103278],{"class":443},[240,110314,110315],{"class":242,"line":3647},[240,110316,103283],{"class":443},[240,110318,110319],{"class":242,"line":3652},[240,110320,103288],{"class":443},[240,110322,110323],{"class":242,"line":3681},[240,110324,97611],{"class":443},[240,110326,110327],{"class":242,"line":3686},[240,110328,4353],{"emptyLinePlaceholder":2051},[240,110330,110331],{"class":242,"line":3703},[240,110332,4353],{"emptyLinePlaceholder":2051},[240,110334,110335,110337,110339,110341,110343],{"class":242,"line":3708},[240,110336,33893],{"class":288},[240,110338,3926],{"class":436},[240,110340,103309],{"class":257},[240,110342,97599],{"class":264},[240,110344,5691],{"class":257},[240,110346,110347,110349,110351,110353,110355],{"class":242,"line":3713},[240,110348,103318],{"class":257},[240,110350,440],{"class":288},[240,110352,103323],{"class":257},[240,110354,103225],{"class":264},[240,110356,2129],{"class":257},[240,110358,110359,110361,110363],{"class":242,"line":3718},[240,110360,103332],{"class":257},[240,110362,440],{"class":288},[240,110364,103337],{"class":257},[240,110366,110367,110370,110372,110374,110376,110378,110380,110382,110384,110386,110388],{"class":242,"line":3732},[240,110368,110369],{"class":257},"    renderer ",[240,110371,440],{"class":288},[240,110373,109784],{"class":257},[240,110375,26928],{"class":792},[240,110377,440],{"class":288},[240,110379,44288],{"class":264},[240,110381,1277],{"class":257},[240,110383,26924],{"class":792},[240,110385,440],{"class":288},[240,110387,109799],{"class":264},[240,110389,2129],{"class":257},[240,110391,110392],{"class":242,"line":3737},[240,110393,4353],{"emptyLinePlaceholder":2051},[240,110395,110396,110398,110400,110402,110404,110406,110408],{"class":242,"line":4530},[240,110397,5153],{"class":288},[240,110399,103412],{"class":257},[240,110401,27989],{"class":288},[240,110403,34389],{"class":264},[240,110405,789],{"class":257},[240,110407,285],{"class":264},[240,110409,32732],{"class":257},[240,110411,110412],{"class":242,"line":4544},[240,110413,103427],{"class":257},[240,110415,110416],{"class":242,"line":4552},[240,110417,4353],{"emptyLinePlaceholder":2051},[240,110419,110420,110423,110426,110428,110431],{"class":242,"line":4557},[240,110421,110422],{"class":257},"    renderer.update_scene(data, ",[240,110424,110425],{"class":792},"camera",[240,110427,440],{"class":288},[240,110429,110430],{"class":443},"\"fixed_camera\"",[240,110432,2129],{"class":257},[240,110434,110435,110438,110440],{"class":242,"line":4563},[240,110436,110437],{"class":257},"    image ",[240,110439,440],{"class":288},[240,110441,109495],{"class":257},[240,110443,110444],{"class":242,"line":4569},[240,110445,4353],{"emptyLinePlaceholder":2051},[240,110447,110448,110451,110453,110456,110458],{"class":242,"line":4574},[240,110449,110450],{"class":257},"    output_path ",[240,110452,440],{"class":288},[240,110454,110455],{"class":257}," Path(",[240,110457,109925],{"class":443},[240,110459,2129],{"class":257},[240,110461,110462],{"class":242,"line":9899},[240,110463,110464],{"class":257},"    Image.fromarray(image).save(output_path)\n",[240,110466,110467],{"class":242,"line":9923},[240,110468,110469],{"class":257},"    renderer.close()\n",[240,110471,110472],{"class":242,"line":9928},[240,110473,4353],{"emptyLinePlaceholder":2051},[240,110475,110476,110478,110480,110483],{"class":242,"line":9934},[240,110477,33245],{"class":264},[240,110479,789],{"class":257},[240,110481,110482],{"class":443},"\"saved:\"",[240,110484,110485],{"class":257},", output_path.resolve())\n",[240,110487,110488,110490,110492,110495],{"class":242,"line":9961},[240,110489,33245],{"class":264},[240,110491,789],{"class":257},[240,110493,110494],{"class":443},"\"image shape:\"",[240,110496,110497],{"class":257},", image.shape)\n",[240,110499,110500],{"class":242,"line":9966},[240,110501,4353],{"emptyLinePlaceholder":2051},[240,110503,110504],{"class":242,"line":9972},[240,110505,4353],{"emptyLinePlaceholder":2051},[240,110507,110508,110510,110512,110514,110516],{"class":242,"line":9984},[240,110509,3489],{"class":288},[240,110511,33166],{"class":264},[240,110513,103470],{"class":288},[240,110515,103473],{"class":443},[240,110517,5691],{"class":257},[240,110519,110520],{"class":242,"line":9996},[240,110521,103480],{"class":257},[19,110523,105480],{},[231,110525,110527],{"className":25768,"code":110526,"language":25770,"meta":236,"style":236},"touch ch5_renderer.py\n",[23,110528,110529],{"__ignoreMap":236},[240,110530,110531,110533],{"class":242,"line":243},[240,110532,103194],{"class":436},[240,110534,110535],{"class":443}," ch5_renderer.py\n",[32,110537,103483],{"id":103483},[19,110539,110540],{},"viewer 上下文：",[231,110542,110544],{"className":32324,"code":110543,"language":32326,"meta":236,"style":236},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[23,110545,110546],{"__ignoreMap":236},[240,110547,110548,110550,110552,110554],{"class":242,"line":243},[240,110549,109743],{"class":288},[240,110551,109746],{"class":257},[240,110553,33329],{"class":288},[240,110555,109751],{"class":257},[19,110557,110558,110560],{},[23,110559,109743],{}," 语句会创建窗口，并在退出时自动清理资源。",[19,110562,110563],{},"窗口循环：",[231,110565,110567],{"className":32324,"code":110566,"language":32326,"meta":236,"style":236},"while viewer.is_running() and data.time \u003C 5.0:\n",[23,110568,110569],{"__ignoreMap":236},[240,110570,110571,110574,110576,110578,110580,110582,110584],{"class":242,"line":243},[240,110572,110573],{"class":288},"while",[240,110575,110097],{"class":257},[240,110577,32408],{"class":288},[240,110579,110102],{"class":257},[240,110581,431],{"class":288},[240,110583,110107],{"class":264},[240,110585,5691],{"class":257},[19,110587,110588],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[19,110590,110591],{},"固定相机：",[231,110593,110595],{"className":55003,"code":110594,"language":55005,"meta":236,"style":236},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[23,110596,110597],{"__ignoreMap":236},[240,110598,110599,110601,110603,110605,110607,110609,110611,110613,110616,110619,110621,110624],{"class":242,"line":243},[240,110600,431],{"class":257},[240,110602,110425],{"class":253},[240,110604,16869],{"class":436},[240,110606,440],{"class":257},[240,110608,110430],{"class":443},[240,110610,103017],{"class":436},[240,110612,440],{"class":257},[240,110614,110615],{"class":443},"\"1.5 -2.0 1.2\"",[240,110617,110618],{"class":436}," xyaxes",[240,110620,440],{"class":257},[240,110622,110623],{"class":443},"\"1 0.75 0 0 0 1\"",[240,110625,103055],{"class":257},[19,110627,110628],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[32,110630,110632],{"id":110631},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[231,110634,110636],{"className":32324,"code":110635,"language":32326,"meta":236,"style":236},"import time\n",[23,110637,110638],{"__ignoreMap":236},[240,110639,110640,110642],{"class":242,"line":243},[240,110641,32338],{"class":288},[240,110643,33775],{"class":257},[19,110645,110646],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[231,110648,110650],{"className":32324,"code":110649,"language":32326,"meta":236,"style":236},"import mujoco\nimport mujoco.viewer\n",[23,110651,110652,110658],{"__ignoreMap":236},[240,110653,110654,110656],{"class":242,"line":243},[240,110655,32338],{"class":288},[240,110657,103212],{"class":257},[240,110659,110660,110662],{"class":242,"line":250},[240,110661,32338],{"class":288},[240,110663,109462],{"class":257},[19,110665,110666],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[231,110668,110669],{"className":32324,"code":110543,"language":32326,"meta":236,"style":236},[23,110670,110671],{"__ignoreMap":236},[240,110672,110673,110675,110677,110679],{"class":242,"line":243},[240,110674,109743],{"class":288},[240,110676,109746],{"class":257},[240,110678,33329],{"class":288},[240,110680,109751],{"class":257},[19,110682,110683,110684,110687],{},"打开一个 viewer 窗口。",[23,110685,110686],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[231,110689,110690],{"className":32324,"code":110566,"language":32326,"meta":236,"style":236},[23,110691,110692],{"__ignoreMap":236},[240,110693,110694,110696,110698,110700,110702,110704,110706],{"class":242,"line":243},[240,110695,110573],{"class":288},[240,110697,110097],{"class":257},[240,110699,32408],{"class":288},[240,110701,110102],{"class":257},[240,110703,431],{"class":288},[240,110705,110107],{"class":264},[240,110707,5691],{"class":257},[19,110709,110710,110711,110714],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[23,110712,110713],{},"viewer.is_running()"," 会变成 false，循环结束。",[231,110716,110718],{"className":32324,"code":110717,"language":32326,"meta":236,"style":236},"step_start = time.time()\n",[23,110719,110720],{"__ignoreMap":236},[240,110721,110722,110725,110727],{"class":242,"line":243},[240,110723,110724],{"class":257},"step_start ",[240,110726,440],{"class":288},[240,110728,110119],{"class":257},[19,110730,110731],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[231,110733,110734],{"className":32324,"code":109828,"language":32326,"meta":236,"style":236},[23,110735,110736,110740],{"__ignoreMap":236},[240,110737,110738],{"class":242,"line":243},[240,110739,106415],{"class":257},[240,110741,110742],{"class":242,"line":250},[240,110743,109839],{"class":257},[19,110745,110746,110748,110749,110751,110752,110754,110755,110758],{},[23,110747,103126],{}," 推进物理仿真。",[23,110750,109847],{}," 把最新的 ",[23,110753,35347],{}," 同步到窗口里显示。没有 ",[23,110756,110757],{},"sync()","，窗口可能看不到最新状态。",[231,110760,110761],{"className":32324,"code":109858,"language":32326,"meta":236,"style":236},[23,110762,110763],{"__ignoreMap":236},[240,110764,110765,110767,110769,110771,110773,110775,110777],{"class":242,"line":243},[240,110766,109865],{"class":257},[240,110768,440],{"class":288},[240,110770,109870],{"class":257},[240,110772,2631],{"class":288},[240,110774,109875],{"class":257},[240,110776,2631],{"class":288},[240,110778,109880],{"class":257},[19,110780,110781],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[231,110783,110785],{"className":32324,"code":110784,"language":32326,"meta":236,"style":236},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[23,110786,110787,110799],{"__ignoreMap":236},[240,110788,110789,110791,110793,110795,110797],{"class":242,"line":243},[240,110790,3489],{"class":288},[240,110792,110157],{"class":257},[240,110794,3053],{"class":288},[240,110796,6045],{"class":264},[240,110798,5691],{"class":257},[240,110800,110801],{"class":242,"line":250},[240,110802,110803],{"class":257},"    time.sleep(sleep_time)\n",[19,110805,110806],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[32,110808,110810],{"id":110809},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[231,110812,110814],{"className":32324,"code":110813,"language":32326,"meta":236,"style":236},"from pathlib import Path\n",[23,110815,110816],{"__ignoreMap":236},[240,110817,110818,110820,110822,110824],{"class":242,"line":243},[240,110819,32683],{"class":288},[240,110821,110221],{"class":257},[240,110823,32338],{"class":288},[240,110825,110226],{"class":257},[19,110827,110828,110829,110832,110833,110836],{},"导入 ",[23,110830,110831],{},"Path","，用来处理文件路径。相比直接写字符串，",[23,110834,110835],{},"Path(\"render_output.png\")"," 更清晰。",[231,110838,110840],{"className":32324,"code":110839,"language":32326,"meta":236,"style":236},"from PIL import Image\n",[23,110841,110842],{"__ignoreMap":236},[240,110843,110844,110846,110848,110850],{"class":242,"line":243},[240,110845,32683],{"class":288},[240,110847,49209],{"class":264},[240,110849,49212],{"class":288},[240,110851,49215],{"class":257},[19,110853,110854],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[231,110856,110857],{"className":55003,"code":110594,"language":55005,"meta":236,"style":236},[23,110858,110859],{"__ignoreMap":236},[240,110860,110861,110863,110865,110867,110869,110871,110873,110875,110877,110879,110881,110883],{"class":242,"line":243},[240,110862,431],{"class":257},[240,110864,110425],{"class":253},[240,110866,16869],{"class":436},[240,110868,440],{"class":257},[240,110870,110430],{"class":443},[240,110872,103017],{"class":436},[240,110874,440],{"class":257},[240,110876,110615],{"class":443},[240,110878,110618],{"class":436},[240,110880,440],{"class":257},[240,110882,110623],{"class":443},[240,110884,103055],{"class":257},[19,110886,110887,110888,110890,110891,110893,110894,110897,110898,110900],{},"定义一个相机。",[23,110889,81724],{}," 是相机名字。",[23,110892,106056],{}," 是相机在世界里的位置。",[23,110895,110896],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[23,110899,106056],{}," 来调视角。",[231,110902,110904],{"className":32324,"code":110903,"language":32326,"meta":236,"style":236},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[23,110905,110906],{"__ignoreMap":236},[240,110907,110908,110910,110912,110914,110916,110918,110920,110922,110924,110926,110928],{"class":242,"line":243},[240,110909,109480],{"class":257},[240,110911,440],{"class":288},[240,110913,109784],{"class":257},[240,110915,26928],{"class":792},[240,110917,440],{"class":288},[240,110919,44288],{"class":264},[240,110921,1277],{"class":257},[240,110923,26924],{"class":792},[240,110925,440],{"class":288},[240,110927,109799],{"class":264},[240,110929,2129],{"class":257},[19,110931,110932,110933,102929,110935,110937],{},"创建离屏渲染器。",[23,110934,26928],{},[23,110936,26924],{}," 决定输出图片大小。",[231,110939,110940],{"className":32324,"code":103587,"language":32326,"meta":236,"style":236},[23,110941,110942,110958],{"__ignoreMap":236},[240,110943,110944,110946,110948,110950,110952,110954,110956],{"class":242,"line":243},[240,110945,4977],{"class":288},[240,110947,103412],{"class":257},[240,110949,27989],{"class":288},[240,110951,34389],{"class":264},[240,110953,789],{"class":257},[240,110955,285],{"class":264},[240,110957,32732],{"class":257},[240,110959,110960],{"class":242,"line":250},[240,110961,103610],{"class":257},[19,110963,110964],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[231,110966,110968],{"className":32324,"code":110967,"language":32326,"meta":236,"style":236},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[23,110969,110970],{"__ignoreMap":236},[240,110971,110972,110975,110977,110979,110981],{"class":242,"line":243},[240,110973,110974],{"class":257},"renderer.update_scene(data, ",[240,110976,110425],{"class":792},[240,110978,440],{"class":288},[240,110980,110430],{"class":443},[240,110982,2129],{"class":257},[19,110984,110985,110986,110988,110989,110992],{},"告诉 renderer：用当前 ",[23,110987,35347],{}," 的状态更新画面，并使用名为 ",[23,110990,110991],{},"fixed_camera"," 的相机视角。",[231,110994,110995],{"className":32324,"code":109890,"language":32326,"meta":236,"style":236},[23,110996,110997],{"__ignoreMap":236},[240,110998,110999,111001,111003],{"class":242,"line":243},[240,111000,109490],{"class":257},[240,111002,440],{"class":288},[240,111004,109495],{"class":257},[19,111006,111007,111008,111011],{},"真正渲染出图像。",[23,111009,111010],{},"image"," 是一个 NumPy 数组，不是文件。",[231,111013,111015],{"className":32324,"code":111014,"language":32326,"meta":236,"style":236},"Image.fromarray(image).save(output_path)\n",[23,111016,111017],{"__ignoreMap":236},[240,111018,111019],{"class":242,"line":243},[240,111020,111014],{"class":257},[19,111022,111023,111024,30331],{},"把数组转换成图片，并保存到 ",[23,111025,111026],{},"render_output.png",[231,111028,111030],{"className":32324,"code":111029,"language":32326,"meta":236,"style":236},"renderer.close()\n",[23,111031,111032],{"__ignoreMap":236},[240,111033,111034],{"class":242,"line":243},[240,111035,111029],{"class":257},[19,111037,111038],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[14,111040,104227],{"id":104226},[19,111042,111043,111044,111046,111047,30331],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[23,111045,111026],{},"，并输出图像数组形状，例如 ",[23,111048,111049],{},"(480, 640, 3)",[19,111051,111052],{},"如果图片里看不到方块，先检查：",[1826,111054,111055,111058,111061],{},[1829,111056,111057],{},"方块是否掉到相机视野外。",[1829,111059,111060],{},"camera 位置是否合理。",[1829,111062,111063,111064,111067],{},"是否在 ",[23,111065,111066],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[14,111069,104259],{"id":104258},[19,111071,111072],{},"运行 viewer:",[231,111074,111076],{"className":25768,"code":111075,"language":25770,"meta":236,"style":236},"python ch5_viewer.py\n",[23,111077,111078],{"__ignoreMap":236},[240,111079,111080,111082],{"class":242,"line":243},[240,111081,32326],{"class":436},[240,111083,110206],{"class":443},[19,111085,111086],{},"运行 renderer:",[231,111088,111090],{"className":25768,"code":111089,"language":25770,"meta":236,"style":236},"python ch5_renderer.py\n",[23,111091,111092],{"__ignoreMap":236},[240,111093,111094,111096],{"class":242,"line":243},[240,111095,32326],{"class":436},[240,111097,110535],{"class":443},[19,111099,111100],{},"如果在服务器上运行:",[231,111102,111104],{"className":25768,"code":111103,"language":25770,"meta":236,"style":236},"MUJOCO_GL=egl python ch5_renderer.py\n",[23,111105,111106],{"__ignoreMap":236},[240,111107,111108,111110,111112,111114,111117],{"class":242,"line":243},[240,111109,109724],{"class":257},[240,111111,440],{"class":288},[240,111113,109714],{"class":443},[240,111115,111116],{"class":436}," python",[240,111118,110535],{"class":443},[19,111120,109692],{},[231,111122,111124],{"className":25768,"code":111123,"language":25770,"meta":236,"style":236},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[23,111125,111126],{"__ignoreMap":236},[240,111127,111128,111130,111132,111134,111136],{"class":242,"line":243},[240,111129,109724],{"class":257},[240,111131,440],{"class":288},[240,111133,109718],{"class":443},[240,111135,111116],{"class":436},[240,111137,110535],{"class":443},[19,111139,111140],{},"再做几个练习：",[1826,111142,111143,111150,111153,111159],{},[1829,111144,111145,111146,111149],{},"把 renderer 分辨率改成 ",[23,111147,111148],{},"height=240, width=320","，观察输出 shape。",[1829,111151,111152],{},"把方块颜色改成蓝色，重新保存图片。",[1829,111154,111155,111156,111158],{},"把相机 ",[23,111157,106056],{}," 改远一点，观察画面中物体是否变小。",[1829,111160,111161,111162,104325,111165,111168],{},"把 viewer 示例中的 ",[23,111163,111164],{},"data.time \u003C 5.0",[23,111166,111167],{},"data.time \u003C 20.0","，观察更长时间。",[14,111170,104364],{"id":104363},[32,111172,111174],{"id":111173},"viewer-窗口打不开","viewer 窗口打不开",[19,111176,111177],{},"安装:",[231,111179,111181],{"className":25768,"code":111180,"language":25770,"meta":236,"style":236},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[23,111182,111183],{"__ignoreMap":236},[240,111184,111185,111187,111189,111191,111193,111195,111197,111199,111201,111203,111205],{"class":242,"line":243},[240,111186,26523],{"class":436},[240,111188,28261],{"class":443},[240,111190,25780],{"class":443},[240,111192,28346],{"class":264},[240,111194,104417],{"class":443},[240,111196,102745],{"class":443},[240,111198,104422],{"class":443},[240,111200,102758],{"class":443},[240,111202,102764],{"class":443},[240,111204,102755],{"class":443},[240,111206,111207],{"class":443}," libXinerama\n",[32,111209,111211],{"id":111210},"glfwerror",[23,111212,111213],{},"GLFWError",[19,111215,111216],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[32,111218,111220],{"id":111219},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[19,111222,111223,111224,84453,111226,111228],{},"尝试 ",[23,111225,102948],{},[23,111227,102951],{},"。可能存在版本差异。",[32,111230,111231],{"id":111231},"保存图片是黑的",[19,111233,104486],{},[1826,111235,111236,111239,111242,111252],{},[1829,111237,111238],{},"XML 里是否有 light。",[1829,111240,111241],{},"相机是否对着模型。",[1829,111243,111244,111245,111248,111249,30331],{},"是否先 ",[23,111246,111247],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[23,111250,111251],{},"renderer.render()",[1829,111253,111254],{},"物体是否已经掉出视野。",[32,111256,111257],{"id":111257},"远程服务器没有显示器",[19,111259,111260],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[231,111262,111263],{"className":25768,"code":111103,"language":25770,"meta":236,"style":236},[23,111264,111265],{"__ignoreMap":236},[240,111266,111267,111269,111271,111273,111275],{"class":242,"line":243},[240,111268,109724],{"class":257},[240,111270,440],{"class":288},[240,111272,109714],{"class":443},[240,111274,111116],{"class":436},[240,111276,110535],{"class":443},[19,111278,111279],{},"如果 EGL 不可用，再尝试：",[231,111281,111282],{"className":25768,"code":111123,"language":25770,"meta":236,"style":236},[23,111283,111284],{"__ignoreMap":236},[240,111285,111286,111288,111290,111292,111294],{"class":242,"line":243},[240,111287,109724],{"class":257},[240,111289,440],{"class":288},[240,111291,109718],{"class":443},[240,111293,111116],{"class":436},[240,111295,110535],{"class":443},[14,111297,104518],{"id":104517},[19,111299,111300],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[1826,111302,111303,111306,111309],{},[1829,111304,111305],{},"先用 viewer 看模型和控制是否正常。",[1829,111307,111308],{},"再用 renderer 保存图片或构造视觉观测。",[1829,111310,111311],{},"最后把状态、动作、图像、奖励组织成训练数据。",[2019,111313,111314],{},"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":236,"searchDepth":250,"depth":250,"links":111316},[111317,111318,111319,111324,111329,111330,111331,111338],{"id":102557,"depth":250,"text":102558},{"id":102680,"depth":250,"text":102681},{"id":102955,"depth":250,"text":102956,"children":111320},[111321,111322,111323],{"id":109821,"depth":261,"text":109822},{"id":109851,"depth":261,"text":109852},{"id":109886,"depth":261,"text":109887},{"id":103163,"depth":250,"text":103164,"children":111325},[111326,111327,111328],{"id":103483,"depth":261,"text":103483},{"id":110631,"depth":261,"text":110632},{"id":110809,"depth":261,"text":110810},{"id":104226,"depth":250,"text":104227},{"id":104258,"depth":250,"text":104259},{"id":104363,"depth":250,"text":104364,"children":111332},[111333,111334,111335,111336,111337],{"id":111173,"depth":261,"text":111174},{"id":111210,"depth":261,"text":111213},{"id":111219,"depth":261,"text":111220},{"id":111231,"depth":261,"text":111231},{"id":111257,"depth":261,"text":111257},{"id":104517,"depth":250,"text":104518},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":109429,"description":236},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":111345,"title":111346,"body":111347,"description":236,"extension":2049,"meta":113258,"navigation":2051,"path":113259,"seo":113260,"stem":113261,"__hash__":113262},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":111348,"toc":113234},[111349,111352,111354,111357,111359,111378,111381,111387,111390,111392,111394,111418,111420,111434,111436,111477,111479,111490,111492,111495,111501,111504,111538,111541,111573,111576,111608,111612,111615,111655,111658,111664,111667,111673,111677,111680,111686,111689,111693,111696,111736,111738,111751,111754,111756,112338,112340,112352,112355,112366,112368,112371,112390,112402,112405,112426,112429,112432,112475,112478,112481,112501,112508,112510,112528,112543,112546,112552,112555,112561,112578,112585,112616,112627,112661,112672,112689,112698,112706,112711,112725,112728,112749,112755,112769,112774,112804,112814,112839,112847,112870,112873,112889,112892,112900,112906,112928,112941,112962,112971,113010,113021,113023,113026,113032,113035,113038,113044,113047,113067,113070,113072,113111,113113,113116,113124,113127,113130,113157,113160,113170,113176,113179,113185,113187,113193,113197,113200,113202,113205,113229,113232],[10,111350,111346],{"id":111351},"_6控制任务cartpole",[14,111353,102558],{"id":102557},[19,111355,111356],{},"本章搭建一个最小 Cartpole 控制任务。",[19,111358,106241],{},[1826,111360,111361,111364,111366,111369,111372,111375],{},[1829,111362,111363],{},"slide joint",[1829,111365,108094],{},[1829,111367,111368],{},"cart force actuator",[1829,111370,111371],{},"状态观测",[1829,111373,111374],{},"简单控制循环",[1829,111376,111377],{},"reward 设计雏形",[19,111379,111380],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[231,111382,111385],{"className":111383,"code":111384,"language":7139,"meta":236},[7137],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[23,111386,111384],{"__ignoreMap":236},[19,111388,111389],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[14,111391,102681],{"id":102680},[19,111393,102684],{},[231,111395,111396],{"className":25768,"code":106298,"language":25770,"meta":236,"style":236},[23,111397,111398],{"__ignoreMap":236},[240,111399,111400,111402,111404,111406,111408,111410,111412,111414,111416],{"class":242,"line":243},[240,111401,26523],{"class":436},[240,111403,28261],{"class":443},[240,111405,25780],{"class":443},[240,111407,28346],{"class":264},[240,111409,106313],{"class":443},[240,111411,102709],{"class":443},[240,111413,104412],{"class":443},[240,111415,102725],{"class":443},[240,111417,106322],{"class":443},[19,111419,104729],{},[231,111421,111422],{"className":25768,"code":102830,"language":25770,"meta":236,"style":236},[23,111423,111424],{"__ignoreMap":236},[240,111425,111426,111428,111430,111432],{"class":242,"line":243},[240,111427,25777],{"class":436},[240,111429,25780],{"class":443},[240,111431,102841],{"class":443},[240,111433,102844],{"class":443},[19,111435,104746],{},[231,111437,111439],{"className":25768,"code":111438,"language":25770,"meta":236,"style":236},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[23,111440,111441,111458,111467],{"__ignoreMap":236},[240,111442,111443,111445,111447,111449,111452,111454,111456],{"class":242,"line":243},[240,111444,32276],{"class":436},[240,111446,31122],{"class":443},[240,111448,27062],{"class":264},[240,111450,111451],{"class":443}," mujoco-cartpole",[240,111453,102886],{"class":443},[240,111455,102889],{"class":264},[240,111457,102892],{"class":264},[240,111459,111460,111462,111464],{"class":242,"line":250},[240,111461,32276],{"class":436},[240,111463,102899],{"class":443},[240,111465,111466],{"class":443}," mujoco-cartpole\n",[240,111468,111469,111471,111473,111475],{"class":242,"line":261},[240,111470,25777],{"class":436},[240,111472,25780],{"class":443},[240,111474,102841],{"class":443},[240,111476,102844],{"class":443},[19,111478,102915],{},[1826,111480,111481,111484,111487],{},[1829,111482,111483],{},"本章不依赖 Gymnasium。",[1829,111485,111486],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[1829,111488,111489],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[14,111491,102956],{"id":102955},[19,111493,111494],{},"Cartpole 的模型结构:",[231,111496,111499],{"className":111497,"code":111498,"language":7139,"meta":236},[7137],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[23,111500,111498],{"__ignoreMap":236},[19,111502,111503],{},"小车通过 slide joint 左右移动:",[231,111505,111507],{"className":55003,"code":111506,"language":55005,"meta":236,"style":236},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[23,111508,111509],{"__ignoreMap":236},[240,111510,111511,111513,111515,111517,111519,111522,111524,111526,111529,111531,111533,111536],{"class":242,"line":243},[240,111512,431],{"class":257},[240,111514,104866],{"class":253},[240,111516,16869],{"class":436},[240,111518,440],{"class":257},[240,111520,111521],{"class":443},"\"cart_x\"",[240,111523,55759],{"class":436},[240,111525,440],{"class":257},[240,111527,111528],{"class":443},"\"slide\"",[240,111530,107938],{"class":436},[240,111532,440],{"class":257},[240,111534,111535],{"class":443},"\"1 0 0\"",[240,111537,103055],{"class":257},[19,111539,111540],{},"杆子通过 hinge joint 旋转:",[231,111542,111544],{"className":55003,"code":111543,"language":55005,"meta":236,"style":236},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[23,111545,111546],{"__ignoreMap":236},[240,111547,111548,111550,111552,111554,111556,111559,111561,111563,111565,111567,111569,111571],{"class":242,"line":243},[240,111549,431],{"class":257},[240,111551,104866],{"class":253},[240,111553,16869],{"class":436},[240,111555,440],{"class":257},[240,111557,111558],{"class":443},"\"pole_hinge\"",[240,111560,55759],{"class":436},[240,111562,440],{"class":257},[240,111564,107929],{"class":443},[240,111566,107938],{"class":436},[240,111568,440],{"class":257},[240,111570,107943],{"class":443},[240,111572,103055],{"class":257},[19,111574,111575],{},"控制力作用在小车 slide joint 上:",[231,111577,111579],{"className":55003,"code":111578,"language":55005,"meta":236,"style":236},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[23,111580,111581],{"__ignoreMap":236},[240,111582,111583,111585,111587,111589,111591,111594,111596,111598,111600,111602,111604,111606],{"class":242,"line":243},[240,111584,431],{"class":257},[240,111586,107984],{"class":253},[240,111588,16869],{"class":436},[240,111590,440],{"class":257},[240,111592,111593],{"class":443},"\"cart_motor\"",[240,111595,107994],{"class":436},[240,111597,440],{"class":257},[240,111599,111521],{"class":443},[240,111601,108001],{"class":436},[240,111603,440],{"class":257},[240,111605,56251],{"class":443},[240,111607,103055],{"class":257},[32,111609,111611],{"id":111610},"cartpole-的状态是什么","Cartpole 的状态是什么",[19,111613,111614],{},"这个简化模型有两个关节：",[802,111616,111617,111628],{},[805,111618,111619],{},[808,111620,111621,111623,111625],{},[811,111622,104669],{"align":813},[811,111624,25683],{"align":813},[811,111626,111627],{"align":813},"对应状态",[819,111629,111630,111643],{},[808,111631,111632,111637,111640],{},[824,111633,111634],{"align":813},[23,111635,111636],{},"cart_x",[824,111638,111639],{"align":813},"slide",[824,111641,111642],{"align":813},"小车 x 位置",[808,111644,111645,111650,111652],{},[824,111646,111647],{"align":813},[23,111648,111649],{},"pole_hinge",[824,111651,107750],{"align":813},[824,111653,111654],{"align":813},"杆子角度",[19,111656,111657],{},"所以：",[231,111659,111662],{"className":111660,"code":111661,"language":7139,"meta":236},[7137],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[23,111663,111661],{"__ignoreMap":236},[19,111665,111666],{},"把它们拼起来就是观测：",[231,111668,111671],{"className":111669,"code":111670,"language":7139,"meta":236},[7137],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[23,111672,111670],{"__ignoreMap":236},[32,111674,111676],{"id":111675},"action-是什么","action 是什么",[19,111678,111679],{},"本章只有一个 actuator：",[231,111681,111684],{"className":111682,"code":111683,"language":7139,"meta":236},[7137],"data.ctrl[0] = action\n",[23,111685,111683],{"__ignoreMap":236},[19,111687,111688],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[32,111690,111692],{"id":111691},"reward-是什么","reward 是什么",[19,111694,111695],{},"奖励函数：",[231,111697,111699],{"className":32324,"code":111698,"language":32326,"meta":236,"style":236},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[23,111700,111701],{"__ignoreMap":236},[240,111702,111703,111705,111708,111710,111712,111714,111717,111719,111722,111724,111726,111728,111731,111733],{"class":242,"line":243},[240,111704,18994],{"class":288},[240,111706,111707],{"class":264}," float",[240,111709,789],{"class":257},[240,111711,104314],{"class":264},[240,111713,54207],{"class":288},[240,111715,111716],{"class":264}," 0.1",[240,111718,8469],{"class":288},[240,111720,111721],{"class":257}," cart_x ",[240,111723,2554],{"class":288},[240,111725,111721],{"class":257},[240,111727,2631],{"class":288},[240,111729,111730],{"class":257}," pole_angle ",[240,111732,2554],{"class":288},[240,111734,111735],{"class":257}," pole_angle)\n",[19,111737,108136],{},[1826,111739,111740,111745,111748],{},[1829,111741,111742,111743,30331],{},"基础奖励是 ",[23,111744,104314],{},[1829,111746,111747],{},"小车离中心越远，扣分越多。",[1829,111749,111750],{},"杆子角度越大，扣分越多。",[19,111752,111753],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[14,111755,103164],{"id":103163},[231,111757,111759],{"className":32324,"code":111758,"language":32326,"meta":236,"style":236},"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",[23,111760,111761,111767,111777,111781,111785,111793,111798,111802,111806,111810,111815,111819,111824,111829,111834,111838,111843,111848,111853,111857,111861,111865,111869,111873,111878,111882,111886,111890,111894,111898,111908,111915,111919,111923,111937,111951,111964,111994,111998,112002,112014,112026,112034,112038,112051,112055,112059,112068,112072,112088,112098,112111,112124,112128,112151,112169,112173,112185,112189,112193,112203,112213,112217,112233,112274,112278,112298,112314,112318,112322,112334],{"__ignoreMap":236},[240,111762,111763,111765],{"class":242,"line":243},[240,111764,32338],{"class":288},[240,111766,103212],{"class":257},[240,111768,111769,111771,111773,111775],{"class":242,"line":250},[240,111770,32338],{"class":288},[240,111772,33326],{"class":257},[240,111774,33329],{"class":288},[240,111776,33332],{"class":257},[240,111778,111779],{"class":242,"line":261},[240,111780,4353],{"emptyLinePlaceholder":2051},[240,111782,111783],{"class":242,"line":277},[240,111784,4353],{"emptyLinePlaceholder":2051},[240,111786,111787,111789,111791],{"class":242,"line":294},[240,111788,103225],{"class":264},[240,111790,15514],{"class":288},[240,111792,103230],{"class":443},[240,111794,111795],{"class":242,"line":309},[240,111796,111797],{"class":443},"\u003Cmujoco model=\"cartpole\">\n",[240,111799,111800],{"class":242,"line":529},[240,111801,103240],{"class":443},[240,111803,111804],{"class":242,"line":549},[240,111805,4353],{"emptyLinePlaceholder":2051},[240,111807,111808],{"class":242,"line":569},[240,111809,103249],{"class":443},[240,111811,111812],{"class":242,"line":589},[240,111813,111814],{"class":443},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[240,111816,111817],{"class":242,"line":715},[240,111818,4353],{"emptyLinePlaceholder":2051},[240,111820,111821],{"class":242,"line":727},[240,111822,111823],{"class":443},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[240,111825,111826],{"class":242,"line":1730},[240,111827,111828],{"class":443},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[240,111830,111831],{"class":242,"line":3582},[240,111832,111833],{"class":443},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[240,111835,111836],{"class":242,"line":3596},[240,111837,4353],{"emptyLinePlaceholder":2051},[240,111839,111840],{"class":242,"line":3601},[240,111841,111842],{"class":443},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[240,111844,111845],{"class":242,"line":3607},[240,111846,111847],{"class":443},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[240,111849,111850],{"class":242,"line":3628},[240,111851,111852],{"class":443},"        \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",[240,111854,111855],{"class":242,"line":3633},[240,111856,108348],{"class":443},[240,111858,111859],{"class":242,"line":3647},[240,111860,103278],{"class":443},[240,111862,111863],{"class":242,"line":3652},[240,111864,103283],{"class":443},[240,111866,111867],{"class":242,"line":3681},[240,111868,4353],{"emptyLinePlaceholder":2051},[240,111870,111871],{"class":242,"line":3686},[240,111872,108365],{"class":443},[240,111874,111875],{"class":242,"line":3703},[240,111876,111877],{"class":443},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[240,111879,111880],{"class":242,"line":3708},[240,111881,108375],{"class":443},[240,111883,111884],{"class":242,"line":3713},[240,111885,103288],{"class":443},[240,111887,111888],{"class":242,"line":3718},[240,111889,97611],{"class":443},[240,111891,111892],{"class":242,"line":3732},[240,111893,4353],{"emptyLinePlaceholder":2051},[240,111895,111896],{"class":242,"line":3737},[240,111897,4353],{"emptyLinePlaceholder":2051},[240,111899,111900,111902,111905],{"class":242,"line":4530},[240,111901,33893],{"class":288},[240,111903,111904],{"class":436}," get_observation",[240,111906,111907],{"class":257},"(data: mujoco.MjData) -> np.ndarray:\n",[240,111909,111910,111912],{"class":242,"line":4544},[240,111911,6042],{"class":288},[240,111913,111914],{"class":257}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[240,111916,111917],{"class":242,"line":4552},[240,111918,4353],{"emptyLinePlaceholder":2051},[240,111920,111921],{"class":242,"line":4557},[240,111922,4353],{"emptyLinePlaceholder":2051},[240,111924,111925,111927,111930,111933,111935],{"class":242,"line":4563},[240,111926,33893],{"class":288},[240,111928,111929],{"class":436}," compute_reward",[240,111931,111932],{"class":257},"(obs: np.ndarray) -> ",[240,111934,2161],{"class":264},[240,111936,5691],{"class":257},[240,111938,111939,111942,111944,111947,111949],{"class":242,"line":4569},[240,111940,111941],{"class":257},"    cart_x ",[240,111943,440],{"class":288},[240,111945,111946],{"class":257}," obs[",[240,111948,1274],{"class":264},[240,111950,35192],{"class":257},[240,111952,111953,111956,111958,111960,111962],{"class":242,"line":4574},[240,111954,111955],{"class":257},"    pole_angle ",[240,111957,440],{"class":288},[240,111959,111946],{"class":257},[240,111961,1643],{"class":264},[240,111963,35192],{"class":257},[240,111965,111966,111968,111970,111972,111974,111976,111978,111980,111982,111984,111986,111988,111990,111992],{"class":242,"line":9899},[240,111967,6042],{"class":288},[240,111969,111707],{"class":264},[240,111971,789],{"class":257},[240,111973,104314],{"class":264},[240,111975,54207],{"class":288},[240,111977,111716],{"class":264},[240,111979,8469],{"class":288},[240,111981,111721],{"class":257},[240,111983,2554],{"class":288},[240,111985,111721],{"class":257},[240,111987,2631],{"class":288},[240,111989,111730],{"class":257},[240,111991,2554],{"class":288},[240,111993,111735],{"class":257},[240,111995,111996],{"class":242,"line":9923},[240,111997,4353],{"emptyLinePlaceholder":2051},[240,111999,112000],{"class":242,"line":9928},[240,112001,4353],{"emptyLinePlaceholder":2051},[240,112003,112004,112006,112008,112010,112012],{"class":242,"line":9934},[240,112005,33893],{"class":288},[240,112007,3926],{"class":436},[240,112009,103309],{"class":257},[240,112011,97599],{"class":264},[240,112013,5691],{"class":257},[240,112015,112016,112018,112020,112022,112024],{"class":242,"line":9961},[240,112017,103318],{"class":257},[240,112019,440],{"class":288},[240,112021,103323],{"class":257},[240,112023,103225],{"class":264},[240,112025,2129],{"class":257},[240,112027,112028,112030,112032],{"class":242,"line":9966},[240,112029,103332],{"class":257},[240,112031,440],{"class":288},[240,112033,103337],{"class":257},[240,112035,112036],{"class":242,"line":9972},[240,112037,4353],{"emptyLinePlaceholder":2051},[240,112039,112040,112042,112044,112046,112048],{"class":242,"line":9984},[240,112041,106979],{"class":257},[240,112043,1643],{"class":264},[240,112045,6395],{"class":257},[240,112047,440],{"class":288},[240,112049,112050],{"class":264}," 0.1\n",[240,112052,112053],{"class":242,"line":9996},[240,112054,106992],{"class":257},[240,112056,112057],{"class":242,"line":10008},[240,112058,4353],{"emptyLinePlaceholder":2051},[240,112060,112061,112064,112066],{"class":242,"line":11667},[240,112062,112063],{"class":257},"    total_reward ",[240,112065,440],{"class":288},[240,112067,106671],{"class":264},[240,112069,112070],{"class":242,"line":11692},[240,112071,4353],{"emptyLinePlaceholder":2051},[240,112073,112074,112076,112078,112080,112082,112084,112086],{"class":242,"line":11715},[240,112075,5153],{"class":288},[240,112077,33562],{"class":257},[240,112079,27989],{"class":288},[240,112081,34389],{"class":264},[240,112083,789],{"class":257},[240,112085,8361],{"class":264},[240,112087,32732],{"class":257},[240,112089,112090,112093,112095],{"class":242,"line":11739},[240,112091,112092],{"class":257},"        obs ",[240,112094,440],{"class":288},[240,112096,112097],{"class":257}," get_observation(data)\n",[240,112099,112100,112103,112105,112107,112109],{"class":242,"line":11744},[240,112101,112102],{"class":257},"        pole_angle ",[240,112104,440],{"class":288},[240,112106,111946],{"class":257},[240,112108,1643],{"class":264},[240,112110,35192],{"class":257},[240,112112,112113,112116,112118,112120,112122],{"class":242,"line":11749},[240,112114,112115],{"class":257},"        pole_angular_velocity ",[240,112117,440],{"class":288},[240,112119,111946],{"class":257},[240,112121,1692],{"class":264},[240,112123,35192],{"class":257},[240,112125,112126],{"class":242,"line":11754},[240,112127,4353],{"emptyLinePlaceholder":2051},[240,112129,112130,112133,112135,112138,112140,112142,112144,112146,112148],{"class":242,"line":11763},[240,112131,112132],{"class":257},"        action ",[240,112134,440],{"class":288},[240,112136,112137],{"class":264}," 2.0",[240,112139,8469],{"class":288},[240,112141,111730],{"class":257},[240,112143,2580],{"class":288},[240,112145,63791],{"class":264},[240,112147,8469],{"class":288},[240,112149,112150],{"class":257}," pole_angular_velocity\n",[240,112152,112153,112155,112157,112159,112161,112163,112165,112167],{"class":242,"line":11768},[240,112154,112132],{"class":257},[240,112156,440],{"class":288},[240,112158,109357],{"class":257},[240,112160,2631],{"class":288},[240,112162,104314],{"class":264},[240,112164,1277],{"class":257},[240,112166,104314],{"class":264},[240,112168,2129],{"class":257},[240,112170,112171],{"class":242,"line":11774},[240,112172,4353],{"emptyLinePlaceholder":2051},[240,112174,112175,112177,112179,112181,112183],{"class":242,"line":11795},[240,112176,108527],{"class":257},[240,112178,1274],{"class":264},[240,112180,6395],{"class":257},[240,112182,440],{"class":288},[240,112184,109380],{"class":257},[240,112186,112187],{"class":242,"line":11801},[240,112188,103427],{"class":257},[240,112190,112191],{"class":242,"line":11815},[240,112192,4353],{"emptyLinePlaceholder":2051},[240,112194,112195,112198,112200],{"class":242,"line":11821},[240,112196,112197],{"class":257},"        reward ",[240,112199,440],{"class":288},[240,112201,112202],{"class":257}," compute_reward(get_observation(data))\n",[240,112204,112205,112208,112210],{"class":242,"line":11848},[240,112206,112207],{"class":257},"        total_reward ",[240,112209,11428],{"class":288},[240,112211,112212],{"class":257}," reward\n",[240,112214,112215],{"class":242,"line":11857},[240,112216,4353],{"emptyLinePlaceholder":2051},[240,112218,112219,112221,112223,112225,112227,112229,112231],{"class":242,"line":11863},[240,112220,4450],{"class":288},[240,112222,33562],{"class":257},[240,112224,2429],{"class":288},[240,112226,7705],{"class":264},[240,112228,103470],{"class":288},[240,112230,6045],{"class":264},[240,112232,5691],{"class":257},[240,112234,112235,112237,112239,112242,112245,112248,112251,112253,112256,112259,112261,112263,112265,112267,112270,112272],{"class":242,"line":11871},[240,112236,36596],{"class":264},[240,112238,789],{"class":257},[240,112240,112241],{"class":443},"\"step:\"",[240,112243,112244],{"class":257},", step, ",[240,112246,112247],{"class":443},"\"obs:\"",[240,112249,112250],{"class":257},", np.round(obs, ",[240,112252,1692],{"class":264},[240,112254,112255],{"class":257},"), ",[240,112257,112258],{"class":443},"\"action:\"",[240,112260,1277],{"class":257},[240,112262,33964],{"class":264},[240,112264,789],{"class":257},[240,112266,2161],{"class":264},[240,112268,112269],{"class":257},"(action), ",[240,112271,1692],{"class":264},[240,112273,32443],{"class":257},[240,112275,112276],{"class":242,"line":11876},[240,112277,4353],{"emptyLinePlaceholder":2051},[240,112279,112280,112282,112284,112287,112289,112291,112294,112296],{"class":242,"line":18552},[240,112281,33245],{"class":264},[240,112283,789],{"class":257},[240,112285,112286],{"class":443},"\"total_reward:\"",[240,112288,1277],{"class":257},[240,112290,33964],{"class":264},[240,112292,112293],{"class":257},"(total_reward, ",[240,112295,1692],{"class":264},[240,112297,32443],{"class":257},[240,112299,112300,112302,112304,112307,112310,112312],{"class":242,"line":18558},[240,112301,33245],{"class":264},[240,112303,789],{"class":257},[240,112305,112306],{"class":443},"\"final obs:\"",[240,112308,112309],{"class":257},", np.round(get_observation(data), ",[240,112311,1692],{"class":264},[240,112313,32443],{"class":257},[240,112315,112316],{"class":242,"line":18581},[240,112317,4353],{"emptyLinePlaceholder":2051},[240,112319,112320],{"class":242,"line":18587},[240,112321,4353],{"emptyLinePlaceholder":2051},[240,112323,112324,112326,112328,112330,112332],{"class":242,"line":18610},[240,112325,3489],{"class":288},[240,112327,33166],{"class":264},[240,112329,103470],{"class":288},[240,112331,103473],{"class":443},[240,112333,5691],{"class":257},[240,112335,112336],{"class":242,"line":18624},[240,112337,103480],{"class":257},[19,112339,105480],{},[231,112341,112343],{"className":25768,"code":112342,"language":25770,"meta":236,"style":236},"touch ch6_cartpole.py\n",[23,112344,112345],{"__ignoreMap":236},[240,112346,112347,112349],{"class":242,"line":243},[240,112348,103194],{"class":436},[240,112350,112351],{"class":443}," ch6_cartpole.py\n",[19,112353,112354],{},"运行：",[231,112356,112358],{"className":25768,"code":112357,"language":25770,"meta":236,"style":236},"python ch6_cartpole.py\n",[23,112359,112360],{"__ignoreMap":236},[240,112361,112362,112364],{"class":242,"line":243},[240,112363,32326],{"class":436},[240,112365,112351],{"class":443},[32,112367,103483],{"id":103483},[19,112369,112370],{},"构造观测：",[231,112372,112374],{"className":32324,"code":112373,"language":32326,"meta":236,"style":236},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[23,112375,112376,112384],{"__ignoreMap":236},[240,112377,112378,112380,112382],{"class":242,"line":243},[240,112379,33893],{"class":288},[240,112381,111904],{"class":436},[240,112383,111907],{"class":257},[240,112385,112386,112388],{"class":242,"line":250},[240,112387,6042],{"class":288},[240,112389,111914],{"class":257},[19,112391,112392,112395,112396,112398,112399,112401],{},[23,112393,112394],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[23,112397,105940],{}," 2 维，",[23,112400,106270],{}," 2 维，所以 obs 是 4 维。",[19,112403,112404],{},"设置初始角度：",[231,112406,112408],{"className":32324,"code":112407,"language":32326,"meta":236,"style":236},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[23,112409,112410,112422],{"__ignoreMap":236},[240,112411,112412,112414,112416,112418,112420],{"class":242,"line":243},[240,112413,106609],{"class":257},[240,112415,1643],{"class":264},[240,112417,6395],{"class":257},[240,112419,440],{"class":288},[240,112421,112050],{"class":264},[240,112423,112424],{"class":242,"line":250},[240,112425,106453],{"class":257},[19,112427,112428],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[19,112430,112431],{},"简单反馈控制：",[231,112433,112435],{"className":32324,"code":112434,"language":32326,"meta":236,"style":236},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[23,112436,112437,112457],{"__ignoreMap":236},[240,112438,112439,112441,112443,112445,112447,112449,112451,112453,112455],{"class":242,"line":243},[240,112440,109352],{"class":257},[240,112442,440],{"class":288},[240,112444,112137],{"class":264},[240,112446,8469],{"class":288},[240,112448,111730],{"class":257},[240,112450,2580],{"class":288},[240,112452,63791],{"class":264},[240,112454,8469],{"class":288},[240,112456,112150],{"class":257},[240,112458,112459,112461,112463,112465,112467,112469,112471,112473],{"class":242,"line":250},[240,112460,109352],{"class":257},[240,112462,440],{"class":288},[240,112464,109357],{"class":257},[240,112466,2631],{"class":288},[240,112468,104314],{"class":264},[240,112470,1277],{"class":257},[240,112472,104314],{"class":264},[240,112474,2129],{"class":257},[19,112476,112477],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[19,112479,112480],{},"限制动作：",[231,112482,112484],{"className":32324,"code":112483,"language":32326,"meta":236,"style":236},"np.clip(action, -1.0, 1.0)\n",[23,112485,112486],{"__ignoreMap":236},[240,112487,112488,112491,112493,112495,112497,112499],{"class":242,"line":243},[240,112489,112490],{"class":257},"np.clip(action, ",[240,112492,2631],{"class":288},[240,112494,104314],{"class":264},[240,112496,1277],{"class":257},[240,112498,104314],{"class":264},[240,112500,2129],{"class":257},[19,112502,112503,112504,112507],{},"因为 XML 里 ",[23,112505,112506],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[32,112509,103619],{"id":103619},[231,112511,112512],{"className":32324,"code":112373,"language":32326,"meta":236,"style":236},[23,112513,112514,112522],{"__ignoreMap":236},[240,112515,112516,112518,112520],{"class":242,"line":243},[240,112517,33893],{"class":288},[240,112519,111904],{"class":436},[240,112521,111907],{"class":257},[240,112523,112524,112526],{"class":242,"line":250},[240,112525,6042],{"class":288},[240,112527,111914],{"class":257},[19,112529,112530,112531,112534,112535,112538,112539,112542],{},"这段定义了一个函数，用来获取当前观测。",[23,112532,112533],{},"data.qpos.copy()"," 是位置数组副本，",[23,112536,112537],{},"data.qvel.copy()"," 是速度数组副本。",[23,112540,112541],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[19,112544,112545],{},"在本章模型里：",[231,112547,112550],{"className":112548,"code":112549,"language":7139,"meta":236},[7137],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[23,112551,112549],{"__ignoreMap":236},[19,112553,112554],{},"所以返回的 obs 是：",[231,112556,112559],{"className":112557,"code":112558,"language":7139,"meta":236},[7137],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[23,112560,112558],{"__ignoreMap":236},[231,112562,112564],{"className":32324,"code":112563,"language":32326,"meta":236,"style":236},"def compute_reward(obs: np.ndarray) -> float:\n",[23,112565,112566],{"__ignoreMap":236},[240,112567,112568,112570,112572,112574,112576],{"class":242,"line":243},[240,112569,33893],{"class":288},[240,112571,111929],{"class":436},[240,112573,111932],{"class":257},[240,112575,2161],{"class":264},[240,112577,5691],{"class":257},[19,112579,112580,112581,112584],{},"这行定义奖励函数。输入是观测 ",[23,112582,112583],{},"obs","，输出是一个浮点数奖励。",[231,112586,112588],{"className":32324,"code":112587,"language":32326,"meta":236,"style":236},"cart_x = obs[0]\npole_angle = obs[1]\n",[23,112589,112590,112603],{"__ignoreMap":236},[240,112591,112592,112595,112597,112599,112601],{"class":242,"line":243},[240,112593,112594],{"class":257},"cart_x ",[240,112596,440],{"class":288},[240,112598,111946],{"class":257},[240,112600,1274],{"class":264},[240,112602,35192],{"class":257},[240,112604,112605,112608,112610,112612,112614],{"class":242,"line":250},[240,112606,112607],{"class":257},"pole_angle ",[240,112609,440],{"class":288},[240,112611,111946],{"class":257},[240,112613,1643],{"class":264},[240,112615,35192],{"class":257},[19,112617,112618,112619,112622,112623,112626],{},"数组索引从 0 开始。",[23,112620,112621],{},"obs[0]"," 是第一个元素，也就是小车位置。",[23,112624,112625],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[231,112628,112629],{"className":32324,"code":111698,"language":32326,"meta":236,"style":236},[23,112630,112631],{"__ignoreMap":236},[240,112632,112633,112635,112637,112639,112641,112643,112645,112647,112649,112651,112653,112655,112657,112659],{"class":242,"line":243},[240,112634,18994],{"class":288},[240,112636,111707],{"class":264},[240,112638,789],{"class":257},[240,112640,104314],{"class":264},[240,112642,54207],{"class":288},[240,112644,111716],{"class":264},[240,112646,8469],{"class":288},[240,112648,111721],{"class":257},[240,112650,2554],{"class":288},[240,112652,111721],{"class":257},[240,112654,2631],{"class":288},[240,112656,111730],{"class":257},[240,112658,2554],{"class":288},[240,112660,111735],{"class":257},[19,112662,112663,112664,112667,112668,112671],{},"这行计算奖励。",[23,112665,112666],{},"cart_x * cart_x"," 是小车位置的平方，",[23,112669,112670],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[231,112673,112675],{"className":32324,"code":112674,"language":32326,"meta":236,"style":236},"data.qpos[1] = 0.1\n",[23,112676,112677],{"__ignoreMap":236},[240,112678,112679,112681,112683,112685,112687],{"class":242,"line":243},[240,112680,106609],{"class":257},[240,112682,1643],{"class":264},[240,112684,6395],{"class":257},[240,112686,440],{"class":288},[240,112688,112050],{"class":264},[19,112690,112691,112692,112694,112695,112697],{},"手动设置杆子的初始角度。因为 ",[23,112693,107366],{}," 是小车位置，",[23,112696,107369],{}," 是杆子角度，所以这里改的是杆子。",[231,112699,112700],{"className":32324,"code":106453,"language":32326,"meta":236,"style":236},[23,112701,112702],{"__ignoreMap":236},[240,112703,112704],{"class":242,"line":243},[240,112705,106453],{"class":257},[19,112707,107412,112708,112710],{},[23,112709,105940],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[231,112712,112714],{"className":32324,"code":112713,"language":32326,"meta":236,"style":236},"total_reward = 0.0\n",[23,112715,112716],{"__ignoreMap":236},[240,112717,112718,112721,112723],{"class":242,"line":243},[240,112719,112720],{"class":257},"total_reward ",[240,112722,440],{"class":288},[240,112724,106671],{"class":264},[19,112726,112727],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[231,112729,112731],{"className":32324,"code":112730,"language":32326,"meta":236,"style":236},"for step in range(1000):\n",[23,112732,112733],{"__ignoreMap":236},[240,112734,112735,112737,112739,112741,112743,112745,112747],{"class":242,"line":243},[240,112736,4977],{"class":288},[240,112738,33562],{"class":257},[240,112740,27989],{"class":288},[240,112742,34389],{"class":264},[240,112744,789],{"class":257},[240,112746,8361],{"class":264},[240,112748,32732],{"class":257},[19,112750,112751,112752,112754],{},"循环 1000 步。",[23,112753,109044],{}," 是当前步数，从 0 到 999。",[231,112756,112758],{"className":32324,"code":112757,"language":32326,"meta":236,"style":236},"obs = get_observation(data)\n",[23,112759,112760],{"__ignoreMap":236},[240,112761,112762,112765,112767],{"class":242,"line":243},[240,112763,112764],{"class":257},"obs ",[240,112766,440],{"class":288},[240,112768,112097],{"class":257},[19,112770,112771,112772,30331],{},"读取当前状态，保存到 ",[23,112773,112583],{},[231,112775,112777],{"className":32324,"code":112776,"language":32326,"meta":236,"style":236},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[23,112778,112779,112791],{"__ignoreMap":236},[240,112780,112781,112783,112785,112787,112789],{"class":242,"line":243},[240,112782,112607],{"class":257},[240,112784,440],{"class":288},[240,112786,111946],{"class":257},[240,112788,1643],{"class":264},[240,112790,35192],{"class":257},[240,112792,112793,112796,112798,112800,112802],{"class":242,"line":250},[240,112794,112795],{"class":257},"pole_angular_velocity ",[240,112797,440],{"class":288},[240,112799,111946],{"class":257},[240,112801,1692],{"class":264},[240,112803,35192],{"class":257},[19,112805,112806,112807,112810,112811,30331],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[23,112808,112809],{},"obs[3]","？因为 obs 的顺序是 ",[23,112812,112813],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[231,112815,112817],{"className":32324,"code":112816,"language":32326,"meta":236,"style":236},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[23,112818,112819],{"__ignoreMap":236},[240,112820,112821,112823,112825,112827,112829,112831,112833,112835,112837],{"class":242,"line":243},[240,112822,109352],{"class":257},[240,112824,440],{"class":288},[240,112826,112137],{"class":264},[240,112828,8469],{"class":288},[240,112830,111730],{"class":257},[240,112832,2580],{"class":288},[240,112834,63791],{"class":264},[240,112836,8469],{"class":288},[240,112838,112150],{"class":257},[19,112840,112841,112842,102929,112844,112846],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[23,112843,107170],{},[23,112845,37275],{}," 是人为设置的系数，不是固定公式。",[231,112848,112850],{"className":32324,"code":112849,"language":32326,"meta":236,"style":236},"action = np.clip(action, -1.0, 1.0)\n",[23,112851,112852],{"__ignoreMap":236},[240,112853,112854,112856,112858,112860,112862,112864,112866,112868],{"class":242,"line":243},[240,112855,109352],{"class":257},[240,112857,440],{"class":288},[240,112859,109357],{"class":257},[240,112861,2631],{"class":288},[240,112863,104314],{"class":264},[240,112865,1277],{"class":257},[240,112867,104314],{"class":264},[240,112869,2129],{"class":257},[19,112871,112872],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[231,112874,112875],{"className":32324,"code":111683,"language":32326,"meta":236,"style":236},[23,112876,112877],{"__ignoreMap":236},[240,112878,112879,112881,112883,112885,112887],{"class":242,"line":243},[240,112880,107781],{"class":257},[240,112882,1274],{"class":264},[240,112884,6395],{"class":257},[240,112886,440],{"class":288},[240,112888,109380],{"class":257},[19,112890,112891],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[231,112893,112894],{"className":32324,"code":106415,"language":32326,"meta":236,"style":236},[23,112895,112896],{"__ignoreMap":236},[240,112897,112898],{"class":242,"line":243},[240,112899,106415],{"class":257},[19,112901,112902,112903,112905],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[23,112904,108036],{}," 计算小车和杆子的下一刻状态。",[231,112907,112909],{"className":32324,"code":112908,"language":32326,"meta":236,"style":236},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[23,112910,112911,112920],{"__ignoreMap":236},[240,112912,112913,112916,112918],{"class":242,"line":243},[240,112914,112915],{"class":257},"reward ",[240,112917,440],{"class":288},[240,112919,112202],{"class":257},[240,112921,112922,112924,112926],{"class":242,"line":250},[240,112923,112720],{"class":257},[240,112925,11428],{"class":288},[240,112927,112212],{"class":257},[19,112929,112930,112931,112933,112934,112937,112938,30331],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[23,112932,11428],{}," 是简写，",[23,112935,112936],{},"total_reward += reward"," 等价于 ",[23,112939,112940],{},"total_reward = total_reward + reward",[231,112942,112944],{"className":32324,"code":112943,"language":32326,"meta":236,"style":236},"if step % 100 == 0:\n",[23,112945,112946],{"__ignoreMap":236},[240,112947,112948,112950,112952,112954,112956,112958,112960],{"class":242,"line":243},[240,112949,3489],{"class":288},[240,112951,33562],{"class":257},[240,112953,2429],{"class":288},[240,112955,7705],{"class":264},[240,112957,103470],{"class":288},[240,112959,6045],{"class":264},[240,112961,5691],{"class":257},[19,112963,112964,112966,112967,112970],{},[23,112965,2429],{}," 是取余数。",[23,112968,112969],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[231,112972,112974],{"className":32324,"code":112973,"language":32326,"meta":236,"style":236},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[23,112975,112976],{"__ignoreMap":236},[240,112977,112978,112980,112982,112984,112986,112988,112990,112992,112994,112996,112998,113000,113002,113004,113006,113008],{"class":242,"line":243},[240,112979,32361],{"class":264},[240,112981,789],{"class":257},[240,112983,112241],{"class":443},[240,112985,112244],{"class":257},[240,112987,112247],{"class":443},[240,112989,112250],{"class":257},[240,112991,1692],{"class":264},[240,112993,112255],{"class":257},[240,112995,112258],{"class":443},[240,112997,1277],{"class":257},[240,112999,33964],{"class":264},[240,113001,789],{"class":257},[240,113003,2161],{"class":264},[240,113005,112269],{"class":257},[240,113007,1692],{"class":264},[240,113009,32443],{"class":257},[19,113011,113012,113013,113016,113017,113020],{},"打印当前步数、观测和动作。",[23,113014,113015],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[23,113018,113019],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[14,113022,104227],{"id":104226},[19,113024,113025],{},"观测向量:",[231,113027,113030],{"className":113028,"code":113029,"language":7139,"meta":236},[7137],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[23,113031,113029],{"__ignoreMap":236},[19,113033,113034],{},"控制器是教学用的简单线性反馈，不保证最优。",[19,113036,113037],{},"每隔 100 步会打印一次：",[231,113039,113042],{"className":113040,"code":113041,"language":7139,"meta":236},[7137],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[23,113043,113041],{"__ignoreMap":236},[19,113045,113046],{},"重点观察：",[1826,113048,113049,113055,113060],{},[1829,113050,113051,113054],{},[23,113052,113053],{},"pole_angle"," 是否越来越大。",[1829,113056,113057,113059],{},[23,113058,111636],{}," 是否跑得太远。",[1829,113061,113062,113063,84453,113065,30331],{},"action 是否经常被 clip 到 ",[23,113064,105825],{},[23,113066,1643],{},[19,113068,113069],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[14,113071,104259],{"id":104258},[1826,113073,113074,113080,113083,113089,113099,113105,113108],{},[1829,113075,113076,113077,30331],{},"把初始角度改为 ",[23,113078,113079],{},"data.qpos[1] = 0.3",[1829,113081,113082],{},"重新运行，观察控制是否变差。",[1829,113084,113085,113086,113088],{},"把 actuator ",[23,113087,108977],{}," 改小。",[1829,113090,113091,113092,113095,113096,30331],{},"打印 ",[23,113093,113094],{},"model.nq, model.nv, model.nu","，应为 ",[23,113097,113098],{},"2 2 1",[1829,113100,113101,113102,113104],{},"把 reward 里的 ",[23,113103,112670],{}," 系数改大，观察总奖励变化。",[1829,113106,113107],{},"把控制器改成反号，观察杆子是否更容易倒。",[1829,113109,113110],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[14,113112,104364],{"id":104363},[32,113114,113115],{"id":113115},"杆子方向和预期不一致",[19,113117,104307,113118,113120,113121,113123],{},[23,113119,108149],{}," 和 capsule 的 ",[23,113122,105086],{},"，必要时用 viewer 可视化确认。",[32,113125,113126],{"id":113126},"控制器越控越倒",[19,113128,113129],{},"说明反馈符号可能反了，尝试:",[231,113131,113133],{"className":32324,"code":113132,"language":32326,"meta":236,"style":236},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[23,113134,113135],{"__ignoreMap":236},[240,113136,113137,113139,113141,113143,113145,113147,113149,113151,113153,113155],{"class":242,"line":243},[240,113138,109352],{"class":257},[240,113140,440],{"class":288},[240,113142,54207],{"class":288},[240,113144,107170],{"class":264},[240,113146,8469],{"class":288},[240,113148,111730],{"class":257},[240,113150,2631],{"class":288},[240,113152,63791],{"class":264},[240,113154,8469],{"class":288},[240,113156,112150],{"class":257},[32,113158,113159],{"id":113159},"小车飞走",[19,113161,113162,113163,113165,113166,113169],{},"降低 ",[23,113164,108977],{}," 或缩小 ",[23,113167,113168],{},"action"," 的 clip 范围。",[32,113171,113173,113175],{"id":113172},"obs3-为什么是杆子角速度",[23,113174,112809],{}," 为什么是杆子角速度",[19,113177,113178],{},"因为这个模型里：",[231,113180,113183],{"className":113181,"code":113182,"language":7139,"meta":236},[7137],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[23,113184,113182],{"__ignoreMap":236},[19,113186,111657],{},[231,113188,113191],{"className":113189,"code":113190,"language":7139,"meta":236},[7137],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[23,113192,113190],{"__ignoreMap":236},[32,113194,113196],{"id":113195},"reward-变成负数是否错误","reward 变成负数是否错误",[19,113198,113199],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[14,113201,104518],{"id":104517},[19,113203,113204],{},"一个控制任务通常包含：",[1826,113206,113207,113210,113218,113223,113226],{},[1829,113208,113209],{},"模型：Cartpole 的 body、joint、actuator。",[1829,113211,113212,113213,46,113215,113217],{},"观测：从 ",[23,113214,105940],{},[23,113216,106270],{}," 里取状态。",[1829,113219,113220,113221,30331],{},"动作：写入 ",[23,113222,102987],{},[1829,113224,113225],{},"奖励：根据任务目标打分。",[1829,113227,113228],{},"循环：obs -> action -> step -> reward。",[19,113230,113231],{},"这就是后面 Gymnasium 环境的基本骨架。",[2019,113233,106196],{},{"title":236,"searchDepth":250,"depth":250,"links":113235},[113236,113237,113238,113243,113247,113248,113249,113257],{"id":102557,"depth":250,"text":102558},{"id":102680,"depth":250,"text":102681},{"id":102955,"depth":250,"text":102956,"children":113239},[113240,113241,113242],{"id":111610,"depth":261,"text":111611},{"id":111675,"depth":261,"text":111676},{"id":111691,"depth":261,"text":111692},{"id":103163,"depth":250,"text":103164,"children":113244},[113245,113246],{"id":103483,"depth":261,"text":103483},{"id":103619,"depth":261,"text":103619},{"id":104226,"depth":250,"text":104227},{"id":104258,"depth":250,"text":104259},{"id":104363,"depth":250,"text":104364,"children":113250},[113251,113252,113253,113254,113256],{"id":113115,"depth":261,"text":113115},{"id":113126,"depth":261,"text":113126},{"id":113159,"depth":261,"text":113159},{"id":113172,"depth":261,"text":113255},"obs[3] 为什么是杆子角速度",{"id":113195,"depth":261,"text":113196},{"id":104517,"depth":250,"text":104518},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":111346,"description":236},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":113264,"title":113265,"body":113266,"description":236,"extension":2049,"meta":115280,"navigation":2051,"path":115281,"seo":115282,"stem":115283,"__hash__":115284},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":113267,"toc":115256},[113268,113271,113273,113276,113278,113295,113298,113301,113307,113310,113312,113314,113338,113340,113354,113356,113397,113399,113417,113419,113422,113428,113431,113459,113463,113469,113494,113497,113528,113535,113538,113541,113547,113550,113556,113559,113565,113569,113572,113597,113600,113602,114362,114364,114376,114378,114389,114391,114394,114411,114414,114416,114427,114430,114432,114478,114481,114494,114497,114579,114582,114584,114600,114610,114623,114626,114665,114675,114686,114696,114709,114712,114741,114744,114754,114757,114763,114780,114791,114793,114799,114816,114827,114848,114851,114863,114866,114887,114890,114898,114906,114923,114926,114995,115002,115010,115013,115026,115033,115035,115038,115044,115047,115050,115056,115062,115064,115104,115106,115112,115121,115124,115126,115146,115149,115152,115158,115162,115164,115191,115194,115197,115224,115230,115233,115236,115238,115241,115244,115250,115253],[10,113269,113265],{"id":113270},"_7控制任务reacher-机械臂到达目标",[14,113272,102558],{"id":102557},[19,113274,113275],{},"本章搭建一个二维两关节 reacher 任务。",[19,113277,106241],{},[1826,113279,113280,113283,113286,113289,113292],{},[1829,113281,113282],{},"两个 hinge joint",[1829,113284,113285],{},"两个 motor actuator",[1829,113287,113288],{},"site 作为末端点和目标点",[1829,113290,113291],{},"根据末端和目标距离设计 reward",[1829,113293,113294],{},"构造机械臂任务的基本形式",[19,113296,113297],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[19,113299,113300],{},"Reacher 任务可以理解为：",[231,113302,113305],{"className":113303,"code":113304,"language":7139,"meta":236},[7137],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[23,113306,113304],{"__ignoreMap":236},[19,113308,113309],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[14,113311,102681],{"id":102680},[19,113313,102684],{},[231,113315,113316],{"className":25768,"code":106298,"language":25770,"meta":236,"style":236},[23,113317,113318],{"__ignoreMap":236},[240,113319,113320,113322,113324,113326,113328,113330,113332,113334,113336],{"class":242,"line":243},[240,113321,26523],{"class":436},[240,113323,28261],{"class":443},[240,113325,25780],{"class":443},[240,113327,28346],{"class":264},[240,113329,106313],{"class":443},[240,113331,102709],{"class":443},[240,113333,104412],{"class":443},[240,113335,102725],{"class":443},[240,113337,106322],{"class":443},[19,113339,104729],{},[231,113341,113342],{"className":25768,"code":102830,"language":25770,"meta":236,"style":236},[23,113343,113344],{"__ignoreMap":236},[240,113345,113346,113348,113350,113352],{"class":242,"line":243},[240,113347,25777],{"class":436},[240,113349,25780],{"class":443},[240,113351,102841],{"class":443},[240,113353,102844],{"class":443},[19,113355,104746],{},[231,113357,113359],{"className":25768,"code":113358,"language":25770,"meta":236,"style":236},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[23,113360,113361,113378,113387],{"__ignoreMap":236},[240,113362,113363,113365,113367,113369,113372,113374,113376],{"class":242,"line":243},[240,113364,32276],{"class":436},[240,113366,31122],{"class":443},[240,113368,27062],{"class":264},[240,113370,113371],{"class":443}," mujoco-reacher",[240,113373,102886],{"class":443},[240,113375,102889],{"class":264},[240,113377,102892],{"class":264},[240,113379,113380,113382,113384],{"class":242,"line":250},[240,113381,32276],{"class":436},[240,113383,102899],{"class":443},[240,113385,113386],{"class":443}," mujoco-reacher\n",[240,113388,113389,113391,113393,113395],{"class":242,"line":261},[240,113390,25777],{"class":436},[240,113392,25780],{"class":443},[240,113394,102841],{"class":443},[240,113396,102844],{"class":443},[19,113398,102915],{},[1826,113400,113401,113404,113407],{},[1829,113402,113403],{},"本章使用低维状态，不使用图像输入。",[1829,113405,113406],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[1829,113408,113409,113410,46,113412,46,113414,113416],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[23,113411,105940],{},[23,113413,106270],{},[23,113415,105590],{}," 的方法一致。",[14,113418,102956],{"id":102955},[19,113420,113421],{},"Reacher 任务核心:",[231,113423,113426],{"className":113424,"code":113425,"language":7139,"meta":236},[7137],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[23,113427,113425],{"__ignoreMap":236},[19,113429,113430],{},"读取 site 世界坐标:",[231,113432,113434],{"className":32324,"code":113433,"language":32326,"meta":236,"style":236},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[23,113435,113436,113449],{"__ignoreMap":236},[240,113437,113438,113440,113442,113444,113447],{"class":242,"line":243},[240,113439,105544],{"class":257},[240,113441,440],{"class":288},[240,113443,105315],{"class":257},[240,113445,113446],{"class":443},"\"tip\"",[240,113448,2129],{"class":257},[240,113450,113451,113454,113456],{"class":242,"line":250},[240,113452,113453],{"class":257},"tip_pos ",[240,113455,440],{"class":288},[240,113457,113458],{"class":257}," data.site_xpos[site_id]\n",[32,113460,113462],{"id":113461},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[19,113464,113465,113466,113468],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[23,113467,105940],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[231,113470,113472],{"className":32324,"code":113471,"language":32326,"meta":236,"style":236},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[23,113473,113474,113484],{"__ignoreMap":236},[240,113475,113476,113479,113481],{"class":242,"line":243},[240,113477,113478],{"class":257},"tip ",[240,113480,440],{"class":288},[240,113482,113483],{"class":257}," data.site_xpos[tip_site_id]\n",[240,113485,113486,113489,113491],{"class":242,"line":250},[240,113487,113488],{"class":257},"target ",[240,113490,440],{"class":288},[240,113492,113493],{"class":257}," data.site_xpos[target_site_id]\n",[19,113495,113496],{},"这样 reward 就很容易写：",[231,113498,113500],{"className":32324,"code":113499,"language":32326,"meta":236,"style":236},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[23,113501,113502,113517],{"__ignoreMap":236},[240,113503,113504,113507,113509,113512,113514],{"class":242,"line":243},[240,113505,113506],{"class":257},"dist ",[240,113508,440],{"class":288},[240,113510,113511],{"class":257}," np.linalg.norm(tip ",[240,113513,2631],{"class":288},[240,113515,113516],{"class":257}," target)\n",[240,113518,113519,113521,113523,113525],{"class":242,"line":250},[240,113520,112915],{"class":257},[240,113522,440],{"class":288},[240,113524,54207],{"class":288},[240,113526,113527],{"class":257},"dist\n",[19,113529,113530,113531,113534],{},"距离越小，",[23,113532,113533],{},"-dist"," 越接近 0，奖励越高。",[32,113536,113537],{"id":113537},"两关节机械臂的状态",[19,113539,113540],{},"这个模型有两个 hinge joint：",[231,113542,113545],{"className":113543,"code":113544,"language":7139,"meta":236},[7137],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[23,113546,113544],{"__ignoreMap":236},[19,113548,113549],{},"再加上末端和目标位置：",[231,113551,113554],{"className":113552,"code":113553,"language":7139,"meta":236},[7137],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[23,113555,113553],{"__ignoreMap":236},[19,113557,113558],{},"总维度：",[231,113560,113563],{"className":113561,"code":113562,"language":7139,"meta":236},[7137],"2 + 2 + 3 + 3 = 10\n",[23,113564,113562],{"__ignoreMap":236},[32,113566,113568],{"id":113567},"为什么-gravity-是-0","为什么 gravity 是 0",[19,113570,113571],{},"本章把重力设为：",[231,113573,113575],{"className":55003,"code":113574,"language":55005,"meta":236,"style":236},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[23,113576,113577],{"__ignoreMap":236},[240,113578,113579,113581,113583,113585,113587,113589,113591,113593,113595],{"class":242,"line":243},[240,113580,431],{"class":257},[240,113582,71089],{"class":253},[240,113584,103105],{"class":436},[240,113586,440],{"class":257},[240,113588,103110],{"class":443},[240,113590,103113],{"class":436},[240,113592,440],{"class":257},[240,113594,105681],{"class":443},[240,113596,103055],{"class":257},[19,113598,113599],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[14,113601,103164],{"id":103163},[231,113603,113605],{"className":32324,"code":113604,"language":32326,"meta":236,"style":236},"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",[23,113606,113607,113613,113623,113627,113631,113639,113644,113649,113653,113657,113662,113667,113671,113676,113681,113686,113690,113695,113700,113705,113710,113714,113718,113722,113726,113730,113735,113740,113744,113748,113752,113756,113760,113775,113784,113796,113819,113826,113830,113834,113844,113858,113872,113879,113883,113887,113901,113913,113925,113938,113953,113970,113974,113978,113990,114002,114010,114018,114022,114038,114043,114056,114069,114084,114088,114123,114155,114159,114163,114172,114176,114192,114202,114213,114229,114245,114261,114277,114281,114299,114319,114338,114342,114346,114358],{"__ignoreMap":236},[240,113608,113609,113611],{"class":242,"line":243},[240,113610,32338],{"class":288},[240,113612,103212],{"class":257},[240,113614,113615,113617,113619,113621],{"class":242,"line":250},[240,113616,32338],{"class":288},[240,113618,33326],{"class":257},[240,113620,33329],{"class":288},[240,113622,33332],{"class":257},[240,113624,113625],{"class":242,"line":261},[240,113626,4353],{"emptyLinePlaceholder":2051},[240,113628,113629],{"class":242,"line":277},[240,113630,4353],{"emptyLinePlaceholder":2051},[240,113632,113633,113635,113637],{"class":242,"line":294},[240,113634,103225],{"class":264},[240,113636,15514],{"class":288},[240,113638,103230],{"class":443},[240,113640,113641],{"class":242,"line":309},[240,113642,113643],{"class":443},"\u003Cmujoco model=\"two_link_reacher\">\n",[240,113645,113646],{"class":242,"line":529},[240,113647,113648],{"class":443},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[240,113650,113651],{"class":242,"line":549},[240,113652,4353],{"emptyLinePlaceholder":2051},[240,113654,113655],{"class":242,"line":569},[240,113656,103249],{"class":443},[240,113658,113659],{"class":242,"line":589},[240,113660,113661],{"class":443},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[240,113663,113664],{"class":242,"line":715},[240,113665,113666],{"class":443},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[240,113668,113669],{"class":242,"line":727},[240,113670,4353],{"emptyLinePlaceholder":2051},[240,113672,113673],{"class":242,"line":1730},[240,113674,113675],{"class":443},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[240,113677,113678],{"class":242,"line":3582},[240,113679,113680],{"class":443},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[240,113682,113683],{"class":242,"line":3596},[240,113684,113685],{"class":443},"      \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",[240,113687,113688],{"class":242,"line":3601},[240,113689,4353],{"emptyLinePlaceholder":2051},[240,113691,113692],{"class":242,"line":3607},[240,113693,113694],{"class":443},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[240,113696,113697],{"class":242,"line":3628},[240,113698,113699],{"class":443},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[240,113701,113702],{"class":242,"line":3633},[240,113703,113704],{"class":443},"        \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",[240,113706,113707],{"class":242,"line":3647},[240,113708,113709],{"class":443},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[240,113711,113712],{"class":242,"line":3652},[240,113713,108348],{"class":443},[240,113715,113716],{"class":242,"line":3681},[240,113717,103278],{"class":443},[240,113719,113720],{"class":242,"line":3686},[240,113721,103283],{"class":443},[240,113723,113724],{"class":242,"line":3703},[240,113725,4353],{"emptyLinePlaceholder":2051},[240,113727,113728],{"class":242,"line":3708},[240,113729,108365],{"class":443},[240,113731,113732],{"class":242,"line":3713},[240,113733,113734],{"class":443},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[240,113736,113737],{"class":242,"line":3718},[240,113738,113739],{"class":443},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[240,113741,113742],{"class":242,"line":3732},[240,113743,108375],{"class":443},[240,113745,113746],{"class":242,"line":3737},[240,113747,103288],{"class":443},[240,113749,113750],{"class":242,"line":4530},[240,113751,97611],{"class":443},[240,113753,113754],{"class":242,"line":4544},[240,113755,4353],{"emptyLinePlaceholder":2051},[240,113757,113758],{"class":242,"line":4552},[240,113759,4353],{"emptyLinePlaceholder":2051},[240,113761,113762,113764,113767,113770,113772],{"class":242,"line":4557},[240,113763,33893],{"class":288},[240,113765,113766],{"class":436}," site_position",[240,113768,113769],{"class":257},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[240,113771,3262],{"class":264},[240,113773,113774],{"class":257},") -> np.ndarray:\n",[240,113776,113777,113779,113781],{"class":242,"line":4563},[240,113778,105310],{"class":257},[240,113780,440],{"class":288},[240,113782,113783],{"class":257}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[240,113785,113786,113788,113790,113792,113794],{"class":242,"line":4569},[240,113787,5053],{"class":288},[240,113789,105359],{"class":257},[240,113791,431],{"class":288},[240,113793,6045],{"class":264},[240,113795,5691],{"class":257},[240,113797,113798,113800,113802,113804,113806,113809,113811,113813,113815,113817],{"class":242,"line":4574},[240,113799,105342],{"class":288},[240,113801,105345],{"class":264},[240,113803,789],{"class":257},[240,113805,2172],{"class":288},[240,113807,113808],{"class":443},"\"site not found: ",[240,113810,2991],{"class":264},[240,113812,81724],{"class":257},[240,113814,3040],{"class":264},[240,113816,2355],{"class":443},[240,113818,2129],{"class":257},[240,113820,113821,113823],{"class":242,"line":9899},[240,113822,6042],{"class":288},[240,113824,113825],{"class":257}," data.site_xpos[site_id].copy()\n",[240,113827,113828],{"class":242,"line":9923},[240,113829,4353],{"emptyLinePlaceholder":2051},[240,113831,113832],{"class":242,"line":9928},[240,113833,4353],{"emptyLinePlaceholder":2051},[240,113835,113836,113838,113841],{"class":242,"line":9934},[240,113837,33893],{"class":288},[240,113839,113840],{"class":436}," get_obs",[240,113842,113843],{"class":257},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[240,113845,113846,113849,113851,113854,113856],{"class":242,"line":9961},[240,113847,113848],{"class":257},"    tip ",[240,113850,440],{"class":288},[240,113852,113853],{"class":257}," site_position(model, data, ",[240,113855,113446],{"class":443},[240,113857,2129],{"class":257},[240,113859,113860,113863,113865,113867,113870],{"class":242,"line":9966},[240,113861,113862],{"class":257},"    target ",[240,113864,440],{"class":288},[240,113866,113853],{"class":257},[240,113868,113869],{"class":443},"\"target\"",[240,113871,2129],{"class":257},[240,113873,113874,113876],{"class":242,"line":9972},[240,113875,6042],{"class":288},[240,113877,113878],{"class":257}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[240,113880,113881],{"class":242,"line":9984},[240,113882,4353],{"emptyLinePlaceholder":2051},[240,113884,113885],{"class":242,"line":9996},[240,113886,4353],{"emptyLinePlaceholder":2051},[240,113888,113889,113891,113894,113897,113899],{"class":242,"line":10008},[240,113890,33893],{"class":288},[240,113892,113893],{"class":436}," reward",[240,113895,113896],{"class":257},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[240,113898,2161],{"class":264},[240,113900,5691],{"class":257},[240,113902,113903,113905,113907,113909,113911],{"class":242,"line":11667},[240,113904,113848],{"class":257},[240,113906,440],{"class":288},[240,113908,113853],{"class":257},[240,113910,113446],{"class":443},[240,113912,2129],{"class":257},[240,113914,113915,113917,113919,113921,113923],{"class":242,"line":11692},[240,113916,113862],{"class":257},[240,113918,440],{"class":288},[240,113920,113853],{"class":257},[240,113922,113869],{"class":443},[240,113924,2129],{"class":257},[240,113926,113927,113930,113932,113934,113936],{"class":242,"line":11715},[240,113928,113929],{"class":257},"    dist ",[240,113931,440],{"class":288},[240,113933,113511],{"class":257},[240,113935,2631],{"class":288},[240,113937,113516],{"class":257},[240,113939,113940,113943,113945,113948,113950],{"class":242,"line":11739},[240,113941,113942],{"class":257},"    control_cost ",[240,113944,440],{"class":288},[240,113946,113947],{"class":264}," 0.01",[240,113949,8469],{"class":288},[240,113951,113952],{"class":257}," np.sum(np.square(data.ctrl))\n",[240,113954,113955,113957,113959,113961,113963,113965,113967],{"class":242,"line":11744},[240,113956,6042],{"class":288},[240,113958,111707],{"class":264},[240,113960,789],{"class":257},[240,113962,2631],{"class":288},[240,113964,113506],{"class":257},[240,113966,2631],{"class":288},[240,113968,113969],{"class":257}," control_cost)\n",[240,113971,113972],{"class":242,"line":11749},[240,113973,4353],{"emptyLinePlaceholder":2051},[240,113975,113976],{"class":242,"line":11754},[240,113977,4353],{"emptyLinePlaceholder":2051},[240,113979,113980,113982,113984,113986,113988],{"class":242,"line":11763},[240,113981,33893],{"class":288},[240,113983,3926],{"class":436},[240,113985,103309],{"class":257},[240,113987,97599],{"class":264},[240,113989,5691],{"class":257},[240,113991,113992,113994,113996,113998,114000],{"class":242,"line":11768},[240,113993,103318],{"class":257},[240,113995,440],{"class":288},[240,113997,103323],{"class":257},[240,113999,103225],{"class":264},[240,114001,2129],{"class":257},[240,114003,114004,114006,114008],{"class":242,"line":11774},[240,114005,103332],{"class":257},[240,114007,440],{"class":288},[240,114009,103337],{"class":257},[240,114011,114012,114014,114016],{"class":242,"line":11795},[240,114013,112063],{"class":257},[240,114015,440],{"class":288},[240,114017,106671],{"class":264},[240,114019,114020],{"class":242,"line":11801},[240,114021,4353],{"emptyLinePlaceholder":2051},[240,114023,114024,114026,114028,114030,114032,114034,114036],{"class":242,"line":11815},[240,114025,5153],{"class":288},[240,114027,33562],{"class":257},[240,114029,27989],{"class":288},[240,114031,34389],{"class":264},[240,114033,789],{"class":257},[240,114035,66997],{"class":264},[240,114037,32732],{"class":257},[240,114039,114040],{"class":242,"line":11821},[240,114041,114042],{"class":257},"        mujoco.mj_forward(model, data)\n",[240,114044,114045,114048,114050,114052,114054],{"class":242,"line":11848},[240,114046,114047],{"class":257},"        tip ",[240,114049,440],{"class":288},[240,114051,113853],{"class":257},[240,114053,113446],{"class":443},[240,114055,2129],{"class":257},[240,114057,114058,114061,114063,114065,114067],{"class":242,"line":11857},[240,114059,114060],{"class":257},"        target ",[240,114062,440],{"class":288},[240,114064,113853],{"class":257},[240,114066,113869],{"class":443},[240,114068,2129],{"class":257},[240,114070,114071,114074,114076,114079,114081],{"class":242,"line":11863},[240,114072,114073],{"class":257},"        error ",[240,114075,440],{"class":288},[240,114077,114078],{"class":257}," target ",[240,114080,2631],{"class":288},[240,114082,114083],{"class":257}," tip\n",[240,114085,114086],{"class":242,"line":11871},[240,114087,4353],{"emptyLinePlaceholder":2051},[240,114089,114090,114092,114094,114096,114098,114101,114103,114105,114108,114110,114113,114115,114117,114119,114121],{"class":242,"line":11876},[240,114091,108527],{"class":257},[240,114093,1274],{"class":264},[240,114095,6395],{"class":257},[240,114097,440],{"class":288},[240,114099,114100],{"class":257}," np.clip(",[240,114102,107170],{"class":264},[240,114104,8469],{"class":288},[240,114106,114107],{"class":257}," error[",[240,114109,1668],{"class":264},[240,114111,114112],{"class":257},"], ",[240,114114,2631],{"class":288},[240,114116,104314],{"class":264},[240,114118,1277],{"class":257},[240,114120,104314],{"class":264},[240,114122,2129],{"class":257},[240,114124,114125,114127,114129,114131,114133,114135,114137,114139,114141,114143,114145,114147,114149,114151,114153],{"class":242,"line":18552},[240,114126,108527],{"class":257},[240,114128,1643],{"class":264},[240,114130,6395],{"class":257},[240,114132,440],{"class":288},[240,114134,114100],{"class":257},[240,114136,107170],{"class":264},[240,114138,8469],{"class":288},[240,114140,114107],{"class":257},[240,114142,1274],{"class":264},[240,114144,114112],{"class":257},[240,114146,2631],{"class":288},[240,114148,104314],{"class":264},[240,114150,1277],{"class":257},[240,114152,104314],{"class":264},[240,114154,2129],{"class":257},[240,114156,114157],{"class":242,"line":18558},[240,114158,4353],{"emptyLinePlaceholder":2051},[240,114160,114161],{"class":242,"line":18581},[240,114162,103427],{"class":257},[240,114164,114165,114167,114169],{"class":242,"line":18587},[240,114166,112207],{"class":257},[240,114168,11428],{"class":288},[240,114170,114171],{"class":257}," reward(model, data)\n",[240,114173,114174],{"class":242,"line":18610},[240,114175,4353],{"emptyLinePlaceholder":2051},[240,114177,114178,114180,114182,114184,114186,114188,114190],{"class":242,"line":18624},[240,114179,4450],{"class":288},[240,114181,33562],{"class":257},[240,114183,2429],{"class":288},[240,114185,7705],{"class":264},[240,114187,103470],{"class":288},[240,114189,6045],{"class":264},[240,114191,5691],{"class":257},[240,114193,114194,114197,114199],{"class":242,"line":18644},[240,114195,114196],{"class":257},"            obs ",[240,114198,440],{"class":288},[240,114200,114201],{"class":257}," get_obs(model, data)\n",[240,114203,114204,114206,114208,114210],{"class":242,"line":18650},[240,114205,36596],{"class":264},[240,114207,789],{"class":257},[240,114209,112241],{"class":443},[240,114211,114212],{"class":257},", step)\n",[240,114214,114215,114217,114219,114222,114225,114227],{"class":242,"line":18661},[240,114216,36596],{"class":264},[240,114218,789],{"class":257},[240,114220,114221],{"class":443},"\"  tip:\"",[240,114223,114224],{"class":257},", np.round(tip, ",[240,114226,1692],{"class":264},[240,114228,32443],{"class":257},[240,114230,114231,114233,114235,114238,114241,114243],{"class":242,"line":18684},[240,114232,36596],{"class":264},[240,114234,789],{"class":257},[240,114236,114237],{"class":443},"\"  target:\"",[240,114239,114240],{"class":257},", np.round(target, ",[240,114242,1692],{"class":264},[240,114244,32443],{"class":257},[240,114246,114247,114249,114251,114254,114257,114259],{"class":242,"line":18706},[240,114248,36596],{"class":264},[240,114250,789],{"class":257},[240,114252,114253],{"class":443},"\"  ctrl:\"",[240,114255,114256],{"class":257},", np.round(data.ctrl.copy(), ",[240,114258,1692],{"class":264},[240,114260,32443],{"class":257},[240,114262,114263,114265,114267,114270,114273,114275],{"class":242,"line":18711},[240,114264,36596],{"class":264},[240,114266,789],{"class":257},[240,114268,114269],{"class":443},"\"  obs_dim:\"",[240,114271,114272],{"class":257},", obs.shape[",[240,114274,1274],{"class":264},[240,114276,6609],{"class":257},[240,114278,114279],{"class":242,"line":18717},[240,114280,4353],{"emptyLinePlaceholder":2051},[240,114282,114283,114285,114287,114289,114291,114293,114295,114297],{"class":242,"line":18731},[240,114284,33245],{"class":264},[240,114286,789],{"class":257},[240,114288,112286],{"class":443},[240,114290,1277],{"class":257},[240,114292,33964],{"class":264},[240,114294,112293],{"class":257},[240,114296,1692],{"class":264},[240,114298,32443],{"class":257},[240,114300,114301,114303,114305,114308,114311,114313,114315,114317],{"class":242,"line":18744},[240,114302,33245],{"class":264},[240,114304,789],{"class":257},[240,114306,114307],{"class":443},"\"final tip:\"",[240,114309,114310],{"class":257},", np.round(site_position(model, data, ",[240,114312,113446],{"class":443},[240,114314,112255],{"class":257},[240,114316,1692],{"class":264},[240,114318,32443],{"class":257},[240,114320,114321,114323,114325,114328,114330,114332,114334,114336],{"class":242,"line":18749},[240,114322,33245],{"class":264},[240,114324,789],{"class":257},[240,114326,114327],{"class":443},"\"target:\"",[240,114329,114310],{"class":257},[240,114331,113869],{"class":443},[240,114333,112255],{"class":257},[240,114335,1692],{"class":264},[240,114337,32443],{"class":257},[240,114339,114340],{"class":242,"line":18763},[240,114341,4353],{"emptyLinePlaceholder":2051},[240,114343,114344],{"class":242,"line":18768},[240,114345,4353],{"emptyLinePlaceholder":2051},[240,114347,114348,114350,114352,114354,114356],{"class":242,"line":18774},[240,114349,3489],{"class":288},[240,114351,33166],{"class":264},[240,114353,103470],{"class":288},[240,114355,103473],{"class":443},[240,114357,5691],{"class":257},[240,114359,114360],{"class":242,"line":18779},[240,114361,103480],{"class":257},[19,114363,105480],{},[231,114365,114367],{"className":25768,"code":114366,"language":25770,"meta":236,"style":236},"touch ch7_reacher.py\n",[23,114368,114369],{"__ignoreMap":236},[240,114370,114371,114373],{"class":242,"line":243},[240,114372,103194],{"class":436},[240,114374,114375],{"class":443}," ch7_reacher.py\n",[19,114377,112354],{},[231,114379,114381],{"className":25768,"code":114380,"language":25770,"meta":236,"style":236},"python ch7_reacher.py\n",[23,114382,114383],{"__ignoreMap":236},[240,114384,114385,114387],{"class":242,"line":243},[240,114386,32326],{"class":436},[240,114388,114375],{"class":443},[32,114390,103483],{"id":103483},[19,114392,114393],{},"读取 site 坐标：",[231,114395,114397],{"className":32324,"code":114396,"language":32326,"meta":236,"style":236},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[23,114398,114399],{"__ignoreMap":236},[240,114400,114401,114403,114405,114407,114409],{"class":242,"line":243},[240,114402,33893],{"class":288},[240,114404,113766],{"class":436},[240,114406,113769],{"class":257},[240,114408,3262],{"class":264},[240,114410,113774],{"class":257},[19,114412,114413],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[19,114415,112370],{},[231,114417,114419],{"className":32324,"code":114418,"language":32326,"meta":236,"style":236},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[23,114420,114421],{"__ignoreMap":236},[240,114422,114423,114425],{"class":242,"line":243},[240,114424,18994],{"class":288},[240,114426,113878],{"class":257},[19,114428,114429],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[19,114431,111695],{},[231,114433,114435],{"className":32324,"code":114434,"language":32326,"meta":236,"style":236},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[23,114436,114437,114449,114462],{"__ignoreMap":236},[240,114438,114439,114441,114443,114445,114447],{"class":242,"line":243},[240,114440,113506],{"class":257},[240,114442,440],{"class":288},[240,114444,113511],{"class":257},[240,114446,2631],{"class":288},[240,114448,113516],{"class":257},[240,114450,114451,114454,114456,114458,114460],{"class":242,"line":250},[240,114452,114453],{"class":257},"control_cost ",[240,114455,440],{"class":288},[240,114457,113947],{"class":264},[240,114459,8469],{"class":288},[240,114461,113952],{"class":257},[240,114463,114464,114466,114468,114470,114472,114474,114476],{"class":242,"line":261},[240,114465,18994],{"class":288},[240,114467,111707],{"class":264},[240,114469,789],{"class":257},[240,114471,2631],{"class":288},[240,114473,113506],{"class":257},[240,114475,2631],{"class":288},[240,114477,113969],{"class":257},[19,114479,114480],{},"奖励由两部分组成：",[1826,114482,114483,114488],{},[1829,114484,114485,114487],{},[23,114486,113533],{},"：末端离目标越远，奖励越低。",[1829,114489,114490,114493],{},[23,114491,114492],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[19,114495,114496],{},"简单控制器：",[231,114498,114500],{"className":32324,"code":114499,"language":32326,"meta":236,"style":236},"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",[23,114501,114502,114515,114547],{"__ignoreMap":236},[240,114503,114504,114507,114509,114511,114513],{"class":242,"line":243},[240,114505,114506],{"class":257},"error ",[240,114508,440],{"class":288},[240,114510,114078],{"class":257},[240,114512,2631],{"class":288},[240,114514,114083],{"class":257},[240,114516,114517,114519,114521,114523,114525,114527,114529,114531,114533,114535,114537,114539,114541,114543,114545],{"class":242,"line":250},[240,114518,107781],{"class":257},[240,114520,1274],{"class":264},[240,114522,6395],{"class":257},[240,114524,440],{"class":288},[240,114526,114100],{"class":257},[240,114528,107170],{"class":264},[240,114530,8469],{"class":288},[240,114532,114107],{"class":257},[240,114534,1668],{"class":264},[240,114536,114112],{"class":257},[240,114538,2631],{"class":288},[240,114540,104314],{"class":264},[240,114542,1277],{"class":257},[240,114544,104314],{"class":264},[240,114546,2129],{"class":257},[240,114548,114549,114551,114553,114555,114557,114559,114561,114563,114565,114567,114569,114571,114573,114575,114577],{"class":242,"line":261},[240,114550,107781],{"class":257},[240,114552,1643],{"class":264},[240,114554,6395],{"class":257},[240,114556,440],{"class":288},[240,114558,114100],{"class":257},[240,114560,107170],{"class":264},[240,114562,8469],{"class":288},[240,114564,114107],{"class":257},[240,114566,1274],{"class":264},[240,114568,114112],{"class":257},[240,114570,2631],{"class":288},[240,114572,104314],{"class":264},[240,114574,1277],{"class":257},[240,114576,104314],{"class":264},[240,114578,2129],{"class":257},[19,114580,114581],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[32,114583,103619],{"id":103619},[231,114585,114586],{"className":32324,"code":114396,"language":32326,"meta":236,"style":236},[23,114587,114588],{"__ignoreMap":236},[240,114589,114590,114592,114594,114596,114598],{"class":242,"line":243},[240,114591,33893],{"class":288},[240,114593,113766],{"class":436},[240,114595,113769],{"class":257},[240,114597,3262],{"class":264},[240,114599,113774],{"class":257},[19,114601,114602,114603,114605,114606,84453,114608,30331],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[23,114604,81724],{}," 是 site 的名字，比如 ",[23,114607,113446],{},[23,114609,113869],{},[231,114611,114613],{"className":32324,"code":114612,"language":32326,"meta":236,"style":236},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[23,114614,114615],{"__ignoreMap":236},[240,114616,114617,114619,114621],{"class":242,"line":243},[240,114618,105544],{"class":257},[240,114620,440],{"class":288},[240,114622,113783],{"class":257},[19,114624,114625],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[231,114627,114629],{"className":32324,"code":114628,"language":32326,"meta":236,"style":236},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[23,114630,114631,114643],{"__ignoreMap":236},[240,114632,114633,114635,114637,114639,114641],{"class":242,"line":243},[240,114634,3489],{"class":288},[240,114636,105359],{"class":257},[240,114638,431],{"class":288},[240,114640,6045],{"class":264},[240,114642,5691],{"class":257},[240,114644,114645,114647,114649,114651,114653,114655,114657,114659,114661,114663],{"class":242,"line":250},[240,114646,105805],{"class":288},[240,114648,105345],{"class":264},[240,114650,789],{"class":257},[240,114652,2172],{"class":288},[240,114654,113808],{"class":443},[240,114656,2991],{"class":264},[240,114658,81724],{"class":257},[240,114660,3040],{"class":264},[240,114662,2355],{"class":443},[240,114664,2129],{"class":257},[19,114666,114667,114668,114671,114672,114674],{},"如果 site 没找到，就主动报错。",[23,114669,114670],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[23,114673,81724],{}," 的值放进字符串里。",[231,114676,114678],{"className":32324,"code":114677,"language":32326,"meta":236,"style":236},"return data.site_xpos[site_id].copy()\n",[23,114679,114680],{"__ignoreMap":236},[240,114681,114682,114684],{"class":242,"line":243},[240,114683,18994],{"class":288},[240,114685,113825],{"class":257},[19,114687,114688,114689,114691,114692,114695],{},"返回这个 site 的世界坐标。",[23,114690,105590],{}," 里的每一行都是一个 site 的 ",[23,114693,114694],{},"(x, y, z)"," 坐标。",[231,114697,114699],{"className":32324,"code":114698,"language":32326,"meta":236,"style":236},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[23,114700,114701],{"__ignoreMap":236},[240,114702,114703,114705,114707],{"class":242,"line":243},[240,114704,33893],{"class":288},[240,114706,113840],{"class":436},[240,114708,113843],{"class":257},[19,114710,114711],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[231,114713,114715],{"className":32324,"code":114714,"language":32326,"meta":236,"style":236},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[23,114716,114717,114729],{"__ignoreMap":236},[240,114718,114719,114721,114723,114725,114727],{"class":242,"line":243},[240,114720,113478],{"class":257},[240,114722,440],{"class":288},[240,114724,113853],{"class":257},[240,114726,113446],{"class":443},[240,114728,2129],{"class":257},[240,114730,114731,114733,114735,114737,114739],{"class":242,"line":250},[240,114732,113488],{"class":257},[240,114734,440],{"class":288},[240,114736,113853],{"class":257},[240,114738,113869],{"class":443},[240,114740,2129],{"class":257},[19,114742,114743],{},"分别读取末端点和目标点的世界坐标。",[231,114745,114746],{"className":32324,"code":114418,"language":32326,"meta":236,"style":236},[23,114747,114748],{"__ignoreMap":236},[240,114749,114750,114752],{"class":242,"line":243},[240,114751,18994],{"class":288},[240,114753,113878],{"class":257},[19,114755,114756],{},"把四部分拼成一个观测数组：",[231,114758,114761],{"className":114759,"code":114760,"language":7139,"meta":236},[7137],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[23,114762,114760],{"__ignoreMap":236},[231,114764,114766],{"className":32324,"code":114765,"language":32326,"meta":236,"style":236},"dist = np.linalg.norm(tip - target)\n",[23,114767,114768],{"__ignoreMap":236},[240,114769,114770,114772,114774,114776,114778],{"class":242,"line":243},[240,114771,113506],{"class":257},[240,114773,440],{"class":288},[240,114775,113511],{"class":257},[240,114777,2631],{"class":288},[240,114779,113516],{"class":257},[19,114781,114782,114783,114786,114787,114790],{},"计算 tip 到 target 的距离。",[23,114784,114785],{},"tip - target"," 得到一个三维向量，",[23,114788,114789],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[19,114792,16582],{},[231,114794,114797],{"className":114795,"code":114796,"language":7139,"meta":236},[7137],"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",[23,114798,114796],{"__ignoreMap":236},[231,114800,114802],{"className":32324,"code":114801,"language":32326,"meta":236,"style":236},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[23,114803,114804],{"__ignoreMap":236},[240,114805,114806,114808,114810,114812,114814],{"class":242,"line":243},[240,114807,114453],{"class":257},[240,114809,440],{"class":288},[240,114811,113947],{"class":264},[240,114813,8469],{"class":288},[240,114815,113952],{"class":257},[19,114817,114818,114819,114822,114823,114826],{},"计算动作惩罚。",[23,114820,114821],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[23,114824,114825],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[231,114828,114830],{"className":32324,"code":114829,"language":32326,"meta":236,"style":236},"return float(-dist - control_cost)\n",[23,114831,114832],{"__ignoreMap":236},[240,114833,114834,114836,114838,114840,114842,114844,114846],{"class":242,"line":243},[240,114835,18994],{"class":288},[240,114837,111707],{"class":264},[240,114839,789],{"class":257},[240,114841,2631],{"class":288},[240,114843,113506],{"class":257},[240,114845,2631],{"class":288},[240,114847,113969],{"class":257},[19,114849,114850],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[231,114852,114853],{"className":32324,"code":112713,"language":32326,"meta":236,"style":236},[23,114854,114855],{"__ignoreMap":236},[240,114856,114857,114859,114861],{"class":242,"line":243},[240,114858,112720],{"class":257},[240,114860,440],{"class":288},[240,114862,106671],{"class":264},[19,114864,114865],{},"累计奖励变量，记录整个运行过程的总分。",[231,114867,114869],{"className":32324,"code":114868,"language":32326,"meta":236,"style":236},"for step in range(500):\n",[23,114870,114871],{"__ignoreMap":236},[240,114872,114873,114875,114877,114879,114881,114883,114885],{"class":242,"line":243},[240,114874,4977],{"class":288},[240,114876,33562],{"class":257},[240,114878,27989],{"class":288},[240,114880,34389],{"class":264},[240,114882,789],{"class":257},[240,114884,66997],{"class":264},[240,114886,32732],{"class":257},[19,114888,114889],{},"运行 500 个控制步。",[231,114891,114892],{"className":32324,"code":106453,"language":32326,"meta":236,"style":236},[23,114893,114894],{"__ignoreMap":236},[240,114895,114896],{"class":242,"line":243},[240,114897,106453],{"class":257},[19,114899,114900,114901,102929,114903,114905],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[23,114902,105141],{},[23,114904,105144],{}," 是当前状态下的坐标。",[231,114907,114909],{"className":32324,"code":114908,"language":32326,"meta":236,"style":236},"error = target - tip\n",[23,114910,114911],{"__ignoreMap":236},[240,114912,114913,114915,114917,114919,114921],{"class":242,"line":243},[240,114914,114506],{"class":257},[240,114916,440],{"class":288},[240,114918,114078],{"class":257},[240,114920,2631],{"class":288},[240,114922,114083],{"class":257},[19,114924,114925],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[231,114927,114929],{"className":32324,"code":114928,"language":32326,"meta":236,"style":236},"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",[23,114930,114931,114963],{"__ignoreMap":236},[240,114932,114933,114935,114937,114939,114941,114943,114945,114947,114949,114951,114953,114955,114957,114959,114961],{"class":242,"line":243},[240,114934,107781],{"class":257},[240,114936,1274],{"class":264},[240,114938,6395],{"class":257},[240,114940,440],{"class":288},[240,114942,114100],{"class":257},[240,114944,107170],{"class":264},[240,114946,8469],{"class":288},[240,114948,114107],{"class":257},[240,114950,1668],{"class":264},[240,114952,114112],{"class":257},[240,114954,2631],{"class":288},[240,114956,104314],{"class":264},[240,114958,1277],{"class":257},[240,114960,104314],{"class":264},[240,114962,2129],{"class":257},[240,114964,114965,114967,114969,114971,114973,114975,114977,114979,114981,114983,114985,114987,114989,114991,114993],{"class":242,"line":250},[240,114966,107781],{"class":257},[240,114968,1643],{"class":264},[240,114970,6395],{"class":257},[240,114972,440],{"class":288},[240,114974,114100],{"class":257},[240,114976,107170],{"class":264},[240,114978,8469],{"class":288},[240,114980,114107],{"class":257},[240,114982,1274],{"class":264},[240,114984,114112],{"class":257},[240,114986,2631],{"class":288},[240,114988,104314],{"class":264},[240,114990,1277],{"class":257},[240,114992,104314],{"class":264},[240,114994,2129],{"class":257},[19,114996,114997,114998,115001],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[23,114999,115000],{},"error -> ctrl -> step"," 的流程。",[231,115003,115004],{"className":32324,"code":106415,"language":32326,"meta":236,"style":236},[23,115005,115006],{"__ignoreMap":236},[240,115007,115008],{"class":242,"line":243},[240,115009,106415],{"class":257},[19,115011,115012],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[231,115014,115016],{"className":32324,"code":115015,"language":32326,"meta":236,"style":236},"obs = get_obs(model, data)\n",[23,115017,115018],{"__ignoreMap":236},[240,115019,115020,115022,115024],{"class":242,"line":243},[240,115021,112764],{"class":257},[240,115023,440],{"class":288},[240,115025,114201],{"class":257},[19,115027,115028,115029,115032],{},"读取最新观测。后面打印 ",[23,115030,115031],{},"obs.shape[0]","，用来确认观测维度是 10。",[14,115034,104227],{"id":104226},[19,115036,115037],{},"观测维度为:",[231,115039,115042],{"className":115040,"code":115041,"language":7139,"meta":236},[7137],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[23,115043,115041],{"__ignoreMap":236},[19,115045,115046],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[19,115048,115049],{},"程序每 100 步打印：",[231,115051,115054],{"className":115052,"code":115053,"language":7139,"meta":236},[7137],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[23,115055,115053],{"__ignoreMap":236},[19,115057,115058,115059,115061],{},"如果控制有效，你应该看到最终 ",[23,115060,105141],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[14,115063,104259],{"id":104258},[1826,115065,115066,115069,115072,115078,115084,115091,115101],{},[1829,115067,115068],{},"修改目标点位置。",[1829,115070,115071],{},"重新运行，观察最终 tip 是否变化。",[1829,115073,115074,115075,115077],{},"把 gravity 改成 ",[23,115076,104500],{},"，观察控制是否变差。",[1829,115079,113091,115080,113095,115082,30331],{},[23,115081,104069],{},[23,115083,1668],{},[1829,115085,104322,115086,104325,115088,115090],{},[23,115087,112506],{},[23,115089,109217],{},"，观察机械臂是否更难移动。",[1829,115092,104322,115093,84444,115095,104325,115097,115100],{},[23,115094,105144],{},[23,115096,106056],{},[23,115098,115099],{},"0.2 0 0.6","，观察 reward 和 final tip。",[1829,115102,115103],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[14,115105,104364],{"id":104363},[32,115107,115109],{"id":115108},"site-not-found",[23,115110,115111],{},"site not found",[19,115113,115114,115115,102929,115118,30331],{},"检查 XML 中是否有 ",[23,115116,115117],{},"site name=\"tip\"",[23,115119,115120],{},"site name=\"target\"",[32,115122,115123],{"id":115123},"机械臂完全不动",[19,115125,104434],{},[1826,115127,115128,115133,115136,115141],{},[1829,115129,115130,115132],{},[23,115131,104069],{}," 是否为 2",[1829,115134,115135],{},"actuator 是否引用正确 joint",[1829,115137,115138,115140],{},[23,115139,102987],{}," 是否被赋值",[1829,115142,115143,115144],{},"是否执行了 ",[23,115145,102596],{},[32,115147,115148],{"id":115148},"控制效果不好",[19,115150,115151],{},"正常。本章重点不是控制器最优，而是任务结构:",[231,115153,115156],{"className":115154,"code":115155,"language":7139,"meta":236},[7137],"obs → action → mj_step → reward → next_obs\n",[23,115157,115155],{"__ignoreMap":236},[32,115159,115161],{"id":115160},"tip-坐标不变化","tip 坐标不变化",[19,115163,104486],{},[1826,115165,115166,115171,115179,115188],{},[1829,115167,115168,115169,30331],{},"是否每步调用了 ",[23,115170,102596],{},[1829,115172,115173,115174,102929,115176,30331],{},"是否写入了 ",[23,115175,108036],{},[23,115177,115178],{},"data.ctrl[1]",[1829,115180,115181,115182,46,115185,30331],{},"actuator 是否正确引用 ",[23,115183,115184],{},"joint1",[23,115186,115187],{},"joint2",[1829,115189,115190],{},"控制输入是否太小。",[32,115192,115193],{"id":115193},"目标点不会动",[19,115195,115196],{},"本章的 target 是固定 site：",[231,115198,115200],{"className":55003,"code":115199,"language":55005,"meta":236,"style":236},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[23,115201,115202],{"__ignoreMap":236},[240,115203,115204,115206,115208,115210,115212,115214,115216,115218,115221],{"class":242,"line":243},[240,115205,431],{"class":257},[240,115207,105120],{"class":253},[240,115209,16869],{"class":436},[240,115211,440],{"class":257},[240,115213,113869],{"class":443},[240,115215,103017],{"class":436},[240,115217,440],{"class":257},[240,115219,115220],{"class":443},"\"0.5 0 0.4\"",[240,115222,115223],{"class":257}," ...\u002F>\n",[19,115225,115226,115227,115229],{},"它直接挂在 ",[23,115228,103752],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[32,115231,115232],{"id":115232},"机械臂不像真实机械臂",[19,115234,115235],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[14,115237,104518],{"id":104517},[19,115239,115240],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[19,115242,115243],{},"核心公式：",[231,115245,115248],{"className":115246,"code":115247,"language":7139,"meta":236},[7137],"distance = ||tip - target||\nreward = -distance - action_cost\n",[23,115249,115247],{"__ignoreMap":236},[19,115251,115252],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[2019,115254,115255],{},"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":236,"searchDepth":250,"depth":250,"links":115257},[115258,115259,115260,115265,115269,115270,115271,115279],{"id":102557,"depth":250,"text":102558},{"id":102680,"depth":250,"text":102681},{"id":102955,"depth":250,"text":102956,"children":115261},[115262,115263,115264],{"id":113461,"depth":261,"text":113462},{"id":113537,"depth":261,"text":113537},{"id":113567,"depth":261,"text":113568},{"id":103163,"depth":250,"text":103164,"children":115266},[115267,115268],{"id":103483,"depth":261,"text":103483},{"id":103619,"depth":261,"text":103619},{"id":104226,"depth":250,"text":104227},{"id":104258,"depth":250,"text":104259},{"id":104363,"depth":250,"text":104364,"children":115272},[115273,115274,115275,115276,115277,115278],{"id":115108,"depth":261,"text":115111},{"id":115123,"depth":261,"text":115123},{"id":115148,"depth":261,"text":115148},{"id":115160,"depth":261,"text":115161},{"id":115193,"depth":261,"text":115193},{"id":115232,"depth":261,"text":115232},{"id":104517,"depth":250,"text":104518},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":113265,"description":236},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":115286,"title":115287,"body":115288,"description":236,"extension":2049,"meta":118750,"navigation":2051,"path":118751,"seo":118752,"stem":118753,"__hash__":118754},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":115289,"toc":118721},[115290,115293,115295,115298,115301,115326,115329,115335,115338,115344,115346,115348,115372,115374,115392,115394,115437,115439,115466,115468,115471,115523,115526,115532,115541,115544,115582,115585,115624,115627,115635,115642,115645,115651,115653,115707,115714,115759,115762,115766,115782,115792,115794,117055,117057,117069,117071,117082,117084,117087,117108,117111,117114,117147,117153,117156,117189,117192,117195,117236,117241,117255,117258,117271,117276,117299,117301,117316,117326,117341,117348,117368,117383,117401,117404,117421,117429,117445,117451,117483,117496,117528,117538,117573,117587,117633,117647,117689,117700,117713,117719,117752,117755,117782,117792,117832,117842,117859,117866,117884,117887,117928,117941,117956,117959,117982,117985,117997,118000,118019,118024,118045,118048,118063,118066,118100,118112,118127,118130,118155,118158,118177,118180,118212,118215,118239,118245,118275,118282,118295,118298,118300,118302,118308,118311,118314,118326,118329,118331,118385,118387,118391,118397,118406,118409,118416,118418,118441,118444,118448,118450,118468,118474,118476,118509,118512,118518,118522,118525,118545,118550,118554,118561,118581,118586,118590,118593,118613,118616,118702,118706,118709,118715,118718],[10,115291,115287],{"id":115292},"_8gymnasium-风格强化学习接口基础",[14,115294,102558],{"id":102557},[19,115296,115297],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[19,115299,115300],{},"你将实现:",[231,115302,115304],{"className":32324,"code":115303,"language":32326,"meta":236,"style":236},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[23,115305,115306,115316],{"__ignoreMap":236},[240,115307,115308,115311,115313],{"class":242,"line":243},[240,115309,115310],{"class":257},"obs, info ",[240,115312,440],{"class":288},[240,115314,115315],{"class":257}," env.reset()\n",[240,115317,115318,115321,115323],{"class":242,"line":250},[240,115319,115320],{"class":257},"obs, reward, terminated, truncated, info ",[240,115322,440],{"class":288},[240,115324,115325],{"class":257}," env.step(action)\n",[19,115327,115328],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[19,115330,115331,115332,115334],{},"前面章节的代码都是“脚本式”的：在 ",[23,115333,104206],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[19,115336,115337],{},"可以先记住 Gymnasium 环境的核心交互：",[231,115339,115342],{"className":115340,"code":115341,"language":7139,"meta":236},[7137],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[23,115343,115341],{"__ignoreMap":236},[14,115345,102681],{"id":102680},[19,115347,102684],{},[231,115349,115350],{"className":25768,"code":106298,"language":25770,"meta":236,"style":236},[23,115351,115352],{"__ignoreMap":236},[240,115353,115354,115356,115358,115360,115362,115364,115366,115368,115370],{"class":242,"line":243},[240,115355,26523],{"class":436},[240,115357,28261],{"class":443},[240,115359,25780],{"class":443},[240,115361,28346],{"class":264},[240,115363,106313],{"class":443},[240,115365,102709],{"class":443},[240,115367,104412],{"class":443},[240,115369,102725],{"class":443},[240,115371,106322],{"class":443},[19,115373,104729],{},[231,115375,115377],{"className":25768,"code":115376,"language":25770,"meta":236,"style":236},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[23,115378,115379],{"__ignoreMap":236},[240,115380,115381,115383,115385,115387,115389],{"class":242,"line":243},[240,115382,25777],{"class":436},[240,115384,25780],{"class":443},[240,115386,102841],{"class":443},[240,115388,109621],{"class":443},[240,115390,115391],{"class":443}," gymnasium\n",[19,115393,104746],{},[231,115395,115397],{"className":25768,"code":115396,"language":25770,"meta":236,"style":236},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[23,115398,115399,115416,115425],{"__ignoreMap":236},[240,115400,115401,115403,115405,115407,115410,115412,115414],{"class":242,"line":243},[240,115402,32276],{"class":436},[240,115404,31122],{"class":443},[240,115406,27062],{"class":264},[240,115408,115409],{"class":443}," mujoco-gym-api",[240,115411,102886],{"class":443},[240,115413,102889],{"class":264},[240,115415,102892],{"class":264},[240,115417,115418,115420,115422],{"class":242,"line":250},[240,115419,32276],{"class":436},[240,115421,102899],{"class":443},[240,115423,115424],{"class":443}," mujoco-gym-api\n",[240,115426,115427,115429,115431,115433,115435],{"class":242,"line":261},[240,115428,25777],{"class":436},[240,115430,25780],{"class":443},[240,115432,102841],{"class":443},[240,115434,109621],{"class":443},[240,115436,115391],{"class":443},[19,115438,102915],{},[1826,115440,115441,115451,115454,115460],{},[1829,115442,115443,115444,115447,115448,30331],{},"本章使用 ",[23,115445,115446],{},"gymnasium","，不是旧版 ",[23,115449,115450],{},"gym",[1829,115452,115453],{},"Gymnasium API 与旧 Gym API 有差异。",[1829,115455,115456,115457,30331],{},"旧 Gym 常见返回值是 4 个: ",[23,115458,115459],{},"obs, reward, done, info",[1829,115461,115462,115463,30331],{},"Gymnasium 返回值是 5 个: ",[23,115464,115465],{},"obs, reward, terminated, truncated, info",[14,115467,102956],{"id":102955},[19,115469,115470],{},"强化学习环境接口包含:",[802,115472,115473,115482],{},[805,115474,115475],{},[808,115476,115477,115480],{},[811,115478,115479],{"align":813},"方法",[811,115481,817],{"align":813},[819,115483,115484,115494,115504,115514],{},[808,115485,115486,115491],{},[824,115487,115488],{"align":813},[23,115489,115490],{},"reset()",[824,115492,115493],{"align":813},"重置环境",[808,115495,115496,115501],{},[824,115497,115498],{"align":813},[23,115499,115500],{},"step(action)",[824,115502,115503],{"align":813},"执行动作",[808,115505,115506,115511],{},[824,115507,115508],{"align":813},[23,115509,115510],{},"observation_space",[824,115512,115513],{"align":813},"观测空间",[808,115515,115516,115521],{},[824,115517,115518],{"align":813},[23,115519,115520],{},"action_space",[824,115522,25601],{"align":813},[19,115524,115525],{},"一个最小环境需要完成:",[231,115527,115530],{"className":115528,"code":115529,"language":7139,"meta":236},[7137],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[23,115531,115529],{"__ignoreMap":236},[32,115533,115535,102929,115538,106548],{"id":115534},"terminated-和-truncated-的区别",[23,115536,115537],{},"terminated",[23,115539,115540],{},"truncated",[19,115542,115543],{},"Gymnasium 把“结束”拆成两个概念：",[802,115545,115546,115556],{},[805,115547,115548],{},[808,115549,115550,115552,115554],{},[811,115551,106484],{"align":813},[811,115553,102611],{"align":813},[811,115555,23134],{"align":813},[819,115557,115558,115570],{},[808,115559,115560,115564,115567],{},[824,115561,115562],{"align":813},[23,115563,115537],{},[824,115565,115566],{"align":813},"任务自然结束",[824,115568,115569],{"align":813},"机械臂到达目标、机器人摔倒",[808,115571,115572,115576,115579],{},[824,115573,115574],{"align":813},[23,115575,115540],{},[824,115577,115578],{"align":813},"因外部限制截断",[824,115580,115581],{"align":813},"达到最大步数、时间限制",[19,115583,115584],{},"本章中：",[231,115586,115588],{"className":32324,"code":115587,"language":32326,"meta":236,"style":236},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[23,115589,115590,115605],{"__ignoreMap":236},[240,115591,115592,115595,115597,115600,115602],{"class":242,"line":243},[240,115593,115594],{"class":257},"terminated ",[240,115596,440],{"class":288},[240,115598,115599],{"class":257}," dist ",[240,115601,431],{"class":288},[240,115603,115604],{"class":264}," 0.05\n",[240,115606,115607,115610,115612,115614,115617,115619,115621],{"class":242,"line":250},[240,115608,115609],{"class":257},"truncated ",[240,115611,440],{"class":288},[240,115613,40819],{"class":264},[240,115615,115616],{"class":257},".steps ",[240,115618,3664],{"class":288},[240,115620,40819],{"class":264},[240,115622,115623],{"class":257},".max_steps\n",[19,115625,115626],{},"也就是：",[1826,115628,115629,115632],{},[1829,115630,115631],{},"末端距离目标小于 0.05，任务成功结束。",[1829,115633,115634],{},"步数超过上限，episode 被截断。",[32,115636,115638,102929,115640],{"id":115637},"observation_space-和-action_space",[23,115639,115510],{},[23,115641,115520],{},[19,115643,115644],{},"这两个对象告诉算法：",[231,115646,115649],{"className":115647,"code":115648,"language":7139,"meta":236},[7137],"观测长什么样\n动作允许多大\n",[23,115650,115648],{"__ignoreMap":236},[19,115652,16582],{},[231,115654,115656],{"className":32324,"code":115655,"language":32326,"meta":236,"style":236},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[23,115657,115658],{"__ignoreMap":236},[240,115659,115660,115662,115665,115667,115670,115673,115676,115678,115680,115683,115685,115687,115689,115691,115693,115695,115697,115700,115702,115704],{"class":242,"line":243},[240,115661,32769],{"class":264},[240,115663,115664],{"class":257},".action_space ",[240,115666,440],{"class":288},[240,115668,115669],{"class":257}," spaces.Box(",[240,115671,115672],{"class":792},"low",[240,115674,115675],{"class":288},"=-",[240,115677,104314],{"class":264},[240,115679,1277],{"class":257},[240,115681,115682],{"class":792},"high",[240,115684,440],{"class":288},[240,115686,104314],{"class":264},[240,115688,1277],{"class":257},[240,115690,97876],{"class":792},[240,115692,440],{"class":288},[240,115694,789],{"class":257},[240,115696,1668],{"class":264},[240,115698,115699],{"class":257},",), ",[240,115701,95413],{"class":792},[240,115703,440],{"class":288},[240,115705,115706],{"class":257},"np.float32)\n",[19,115708,115709,115710,115713],{},"表示动作是 2 维数组，每个值都在 ",[23,115711,115712],{},"[-1, 1]"," 范围内。",[231,115715,115717],{"className":32324,"code":115716,"language":32326,"meta":236,"style":236},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[23,115718,115719],{"__ignoreMap":236},[240,115720,115721,115723,115726,115728,115730,115732,115734,115737,115739,115741,115743,115745,115747,115749,115751,115753,115755,115757],{"class":242,"line":243},[240,115722,32769],{"class":264},[240,115724,115725],{"class":257},".observation_space ",[240,115727,440],{"class":288},[240,115729,115669],{"class":257},[240,115731,115672],{"class":792},[240,115733,115675],{"class":288},[240,115735,115736],{"class":257},"np.inf, ",[240,115738,115682],{"class":792},[240,115740,440],{"class":288},[240,115742,115736],{"class":257},[240,115744,97876],{"class":792},[240,115746,440],{"class":288},[240,115748,789],{"class":257},[240,115750,2546],{"class":264},[240,115752,115699],{"class":257},[240,115754,95413],{"class":792},[240,115756,440],{"class":288},[240,115758,115706],{"class":257},[19,115760,115761],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[32,115763,115765],{"id":115764},"frame_skip-是什么","frame_skip 是什么",[231,115767,115769],{"className":32324,"code":115768,"language":32326,"meta":236,"style":236},"self.frame_skip = 5\n",[23,115770,115771],{"__ignoreMap":236},[240,115772,115773,115775,115778,115780],{"class":242,"line":243},[240,115774,32769],{"class":264},[240,115776,115777],{"class":257},".frame_skip ",[240,115779,440],{"class":288},[240,115781,56362],{"class":264},[19,115783,115784,115785,115788,115789,115791],{},"表示外部调用一次 ",[23,115786,115787],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[23,115790,103126],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[14,115793,103164],{"id":103163},[231,115795,115797],{"className":32324,"code":115796,"language":32326,"meta":236,"style":236},"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",[23,115798,115799,115811,115817,115827,115838,115842,115846,115854,115859,115863,115867,115871,115875,115879,115883,115887,115892,115896,115900,115904,115909,115913,115917,115921,115925,115929,115933,115937,115941,115945,115949,115953,115957,115961,115979,115994,115998,116011,116021,116036,116053,116057,116078,116097,116122,116136,116140,116150,116162,116172,116176,116218,116256,116260,116270,116286,116301,116320,116327,116331,116344,116359,116374,116387,116406,116422,116426,116467,116482,116497,116501,116540,116551,116564,116568,116578,116587,116591,116601,116616,116634,116638,116649,116666,116679,116683,116693,116697,116708,116719,116723,116737,116751,116767,116771,116784,116801,116816,116823,116827,116831,116843,116853,116871,116883,116895,116899,116907,116923,116932,116941,116949,116991,117004,117009,117013,117031,117035,117039,117051],{"__ignoreMap":236},[240,115800,115801,115803,115806,115808],{"class":242,"line":243},[240,115802,32338],{"class":288},[240,115804,115805],{"class":257}," gymnasium ",[240,115807,33329],{"class":288},[240,115809,115810],{"class":257}," gym\n",[240,115812,115813,115815],{"class":242,"line":250},[240,115814,32338],{"class":288},[240,115816,103212],{"class":257},[240,115818,115819,115821,115823,115825],{"class":242,"line":261},[240,115820,32338],{"class":288},[240,115822,33326],{"class":257},[240,115824,33329],{"class":288},[240,115826,33332],{"class":257},[240,115828,115829,115831,115833,115835],{"class":242,"line":277},[240,115830,32683],{"class":288},[240,115832,115805],{"class":257},[240,115834,32338],{"class":288},[240,115836,115837],{"class":257}," spaces\n",[240,115839,115840],{"class":242,"line":294},[240,115841,4353],{"emptyLinePlaceholder":2051},[240,115843,115844],{"class":242,"line":309},[240,115845,4353],{"emptyLinePlaceholder":2051},[240,115847,115848,115850,115852],{"class":242,"line":529},[240,115849,103225],{"class":264},[240,115851,15514],{"class":288},[240,115853,103230],{"class":443},[240,115855,115856],{"class":242,"line":549},[240,115857,115858],{"class":443},"\u003Cmujoco model=\"gym_reacher\">\n",[240,115860,115861],{"class":242,"line":569},[240,115862,113648],{"class":443},[240,115864,115865],{"class":242,"line":589},[240,115866,4353],{"emptyLinePlaceholder":2051},[240,115868,115869],{"class":242,"line":715},[240,115870,103249],{"class":443},[240,115872,115873],{"class":242,"line":727},[240,115874,113666],{"class":443},[240,115876,115877],{"class":242,"line":1730},[240,115878,4353],{"emptyLinePlaceholder":2051},[240,115880,115881],{"class":242,"line":3582},[240,115882,113675],{"class":443},[240,115884,115885],{"class":242,"line":3596},[240,115886,113680],{"class":443},[240,115888,115889],{"class":242,"line":3601},[240,115890,115891],{"class":443},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[240,115893,115894],{"class":242,"line":3607},[240,115895,4353],{"emptyLinePlaceholder":2051},[240,115897,115898],{"class":242,"line":3628},[240,115899,113694],{"class":443},[240,115901,115902],{"class":242,"line":3633},[240,115903,113699],{"class":443},[240,115905,115906],{"class":242,"line":3647},[240,115907,115908],{"class":443},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[240,115910,115911],{"class":242,"line":3652},[240,115912,113709],{"class":443},[240,115914,115915],{"class":242,"line":3681},[240,115916,108348],{"class":443},[240,115918,115919],{"class":242,"line":3686},[240,115920,103278],{"class":443},[240,115922,115923],{"class":242,"line":3703},[240,115924,103283],{"class":443},[240,115926,115927],{"class":242,"line":3708},[240,115928,4353],{"emptyLinePlaceholder":2051},[240,115930,115931],{"class":242,"line":3713},[240,115932,108365],{"class":443},[240,115934,115935],{"class":242,"line":3718},[240,115936,113734],{"class":443},[240,115938,115939],{"class":242,"line":3732},[240,115940,113739],{"class":443},[240,115942,115943],{"class":242,"line":3737},[240,115944,108375],{"class":443},[240,115946,115947],{"class":242,"line":4530},[240,115948,103288],{"class":443},[240,115950,115951],{"class":242,"line":4544},[240,115952,97611],{"class":443},[240,115954,115955],{"class":242,"line":4552},[240,115956,4353],{"emptyLinePlaceholder":2051},[240,115958,115959],{"class":242,"line":4557},[240,115960,4353],{"emptyLinePlaceholder":2051},[240,115962,115963,115965,115968,115970,115972,115974,115977],{"class":242,"line":4563},[240,115964,16643],{"class":288},[240,115966,115967],{"class":436}," ReacherEnv",[240,115969,789],{"class":257},[240,115971,115450],{"class":436},[240,115973,2657],{"class":257},[240,115975,115976],{"class":436},"Env",[240,115978,32732],{"class":257},[240,115980,115981,115984,115986,115988,115991],{"class":242,"line":4569},[240,115982,115983],{"class":257},"    metadata ",[240,115985,440],{"class":288},[240,115987,6400],{"class":257},[240,115989,115990],{"class":443},"\"render_modes\"",[240,115992,115993],{"class":257},": []}\n",[240,115995,115996],{"class":242,"line":4574},[240,115997,4353],{"emptyLinePlaceholder":2051},[240,115999,116000,116002,116004,116007,116009],{"class":242,"line":9899},[240,116001,32747],{"class":288},[240,116003,32750],{"class":264},[240,116005,116006],{"class":257},"(self) -> ",[240,116008,97599],{"class":264},[240,116010,5691],{"class":257},[240,116012,116013,116015,116017,116019],{"class":242,"line":9923},[240,116014,32763],{"class":264},[240,116016,19208],{"class":257},[240,116018,32775],{"class":264},[240,116020,3929],{"class":257},[240,116022,116023,116025,116028,116030,116032,116034],{"class":242,"line":9928},[240,116024,32791],{"class":264},[240,116026,116027],{"class":257},".model ",[240,116029,440],{"class":288},[240,116031,103323],{"class":257},[240,116033,103225],{"class":264},[240,116035,2129],{"class":257},[240,116037,116038,116040,116043,116045,116048,116050],{"class":242,"line":9934},[240,116039,32791],{"class":264},[240,116041,116042],{"class":257},".data ",[240,116044,440],{"class":288},[240,116046,116047],{"class":257}," mujoco.MjData(",[240,116049,32769],{"class":264},[240,116051,116052],{"class":257},".model)\n",[240,116054,116055],{"class":242,"line":9961},[240,116056,4353],{"emptyLinePlaceholder":2051},[240,116058,116059,116061,116064,116066,116069,116071,116074,116076],{"class":242,"line":9966},[240,116060,32791],{"class":264},[240,116062,116063],{"class":257},".tip_site_id ",[240,116065,440],{"class":288},[240,116067,116068],{"class":257}," mujoco.mj_name2id(",[240,116070,32769],{"class":264},[240,116072,116073],{"class":257},".model, mujoco.mjtObj.mjOBJ_SITE, ",[240,116075,113446],{"class":443},[240,116077,2129],{"class":257},[240,116079,116080,116082,116085,116087,116089,116091,116093,116095],{"class":242,"line":9972},[240,116081,32791],{"class":264},[240,116083,116084],{"class":257},".target_site_id ",[240,116086,440],{"class":288},[240,116088,116068],{"class":257},[240,116090,32769],{"class":264},[240,116092,116073],{"class":257},[240,116094,113869],{"class":443},[240,116096,2129],{"class":257},[240,116098,116099,116101,116103,116105,116107,116109,116112,116114,116116,116118,116120],{"class":242,"line":9984},[240,116100,4450],{"class":288},[240,116102,40819],{"class":264},[240,116104,116063],{"class":257},[240,116106,431],{"class":288},[240,116108,6045],{"class":264},[240,116110,116111],{"class":288}," or",[240,116113,40819],{"class":264},[240,116115,116084],{"class":257},[240,116117,431],{"class":288},[240,116119,6045],{"class":264},[240,116121,5691],{"class":257},[240,116123,116124,116127,116129,116131,116134],{"class":242,"line":9996},[240,116125,116126],{"class":288},"            raise",[240,116128,105345],{"class":264},[240,116130,789],{"class":257},[240,116132,116133],{"class":443},"\"required sites not found\"",[240,116135,2129],{"class":257},[240,116137,116138],{"class":242,"line":10008},[240,116139,4353],{"emptyLinePlaceholder":2051},[240,116141,116142,116144,116146,116148],{"class":242,"line":11667},[240,116143,32791],{"class":264},[240,116145,115777],{"class":257},[240,116147,440],{"class":288},[240,116149,56362],{"class":264},[240,116151,116152,116154,116157,116159],{"class":242,"line":11692},[240,116153,32791],{"class":264},[240,116155,116156],{"class":257},".max_steps ",[240,116158,440],{"class":288},[240,116160,116161],{"class":264}," 200\n",[240,116163,116164,116166,116168,116170],{"class":242,"line":11715},[240,116165,32791],{"class":264},[240,116167,115616],{"class":257},[240,116169,440],{"class":288},[240,116171,49279],{"class":264},[240,116173,116174],{"class":242,"line":11739},[240,116175,4353],{"emptyLinePlaceholder":2051},[240,116177,116178,116180,116182,116184,116186,116188,116190,116192,116194,116196,116198,116200,116202,116204,116206,116208,116210,116212,116214,116216],{"class":242,"line":11744},[240,116179,32791],{"class":264},[240,116181,115664],{"class":257},[240,116183,440],{"class":288},[240,116185,115669],{"class":257},[240,116187,115672],{"class":792},[240,116189,115675],{"class":288},[240,116191,104314],{"class":264},[240,116193,1277],{"class":257},[240,116195,115682],{"class":792},[240,116197,440],{"class":288},[240,116199,104314],{"class":264},[240,116201,1277],{"class":257},[240,116203,97876],{"class":792},[240,116205,440],{"class":288},[240,116207,789],{"class":257},[240,116209,1668],{"class":264},[240,116211,115699],{"class":257},[240,116213,95413],{"class":792},[240,116215,440],{"class":288},[240,116217,115706],{"class":257},[240,116219,116220,116222,116224,116226,116228,116230,116232,116234,116236,116238,116240,116242,116244,116246,116248,116250,116252,116254],{"class":242,"line":11749},[240,116221,32791],{"class":264},[240,116223,115725],{"class":257},[240,116225,440],{"class":288},[240,116227,115669],{"class":257},[240,116229,115672],{"class":792},[240,116231,115675],{"class":288},[240,116233,115736],{"class":257},[240,116235,115682],{"class":792},[240,116237,440],{"class":288},[240,116239,115736],{"class":257},[240,116241,97876],{"class":792},[240,116243,440],{"class":288},[240,116245,789],{"class":257},[240,116247,2546],{"class":264},[240,116249,115699],{"class":257},[240,116251,95413],{"class":792},[240,116253,440],{"class":288},[240,116255,115706],{"class":257},[240,116257,116258],{"class":242,"line":11754},[240,116259,4353],{"emptyLinePlaceholder":2051},[240,116261,116262,116264,116267],{"class":242,"line":11763},[240,116263,32747],{"class":288},[240,116265,116266],{"class":436}," _get_obs",[240,116268,116269],{"class":257},"(self) -> np.ndarray:\n",[240,116271,116272,116274,116276,116278,116281,116283],{"class":242,"line":11768},[240,116273,114047],{"class":257},[240,116275,440],{"class":288},[240,116277,40819],{"class":264},[240,116279,116280],{"class":257},".data.site_xpos[",[240,116282,32769],{"class":264},[240,116284,116285],{"class":257},".tip_site_id].copy()\n",[240,116287,116288,116290,116292,116294,116296,116298],{"class":242,"line":11774},[240,116289,114060],{"class":257},[240,116291,440],{"class":288},[240,116293,40819],{"class":264},[240,116295,116280],{"class":257},[240,116297,32769],{"class":264},[240,116299,116300],{"class":257},".target_site_id].copy()\n",[240,116302,116303,116305,116307,116310,116312,116315,116317],{"class":242,"line":11795},[240,116304,112092],{"class":257},[240,116306,440],{"class":288},[240,116308,116309],{"class":257}," np.concatenate([",[240,116311,32769],{"class":264},[240,116313,116314],{"class":257},".data.qpos.copy(), ",[240,116316,32769],{"class":264},[240,116318,116319],{"class":257},".data.qvel.copy(), tip, target])\n",[240,116321,116322,116324],{"class":242,"line":11801},[240,116323,16701],{"class":288},[240,116325,116326],{"class":257}," obs.astype(np.float32)\n",[240,116328,116329],{"class":242,"line":11815},[240,116330,4353],{"emptyLinePlaceholder":2051},[240,116332,116333,116335,116338,116340,116342],{"class":242,"line":11821},[240,116334,32747],{"class":288},[240,116336,116337],{"class":436}," _get_reward",[240,116339,116006],{"class":257},[240,116341,2161],{"class":264},[240,116343,5691],{"class":257},[240,116345,116346,116348,116350,116352,116354,116356],{"class":242,"line":11848},[240,116347,114047],{"class":257},[240,116349,440],{"class":288},[240,116351,40819],{"class":264},[240,116353,116280],{"class":257},[240,116355,32769],{"class":264},[240,116357,116358],{"class":257},".tip_site_id]\n",[240,116360,116361,116363,116365,116367,116369,116371],{"class":242,"line":11857},[240,116362,114060],{"class":257},[240,116364,440],{"class":288},[240,116366,40819],{"class":264},[240,116368,116280],{"class":257},[240,116370,32769],{"class":264},[240,116372,116373],{"class":257},".target_site_id]\n",[240,116375,116376,116379,116381,116383,116385],{"class":242,"line":11863},[240,116377,116378],{"class":257},"        dist ",[240,116380,440],{"class":288},[240,116382,113511],{"class":257},[240,116384,2631],{"class":288},[240,116386,113516],{"class":257},[240,116388,116389,116392,116394,116396,116398,116401,116403],{"class":242,"line":11871},[240,116390,116391],{"class":257},"        control_cost ",[240,116393,440],{"class":288},[240,116395,113947],{"class":264},[240,116397,8469],{"class":288},[240,116399,116400],{"class":257}," np.sum(np.square(",[240,116402,32769],{"class":264},[240,116404,116405],{"class":257},".data.ctrl))\n",[240,116407,116408,116410,116412,116414,116416,116418,116420],{"class":242,"line":11876},[240,116409,16701],{"class":288},[240,116411,111707],{"class":264},[240,116413,789],{"class":257},[240,116415,2631],{"class":288},[240,116417,113506],{"class":257},[240,116419,2631],{"class":288},[240,116421,113969],{"class":257},[240,116423,116424],{"class":242,"line":18552},[240,116425,4353],{"emptyLinePlaceholder":2051},[240,116427,116428,116430,116433,116436,116438,116441,116443,116445,116447,116449,116451,116454,116457,116459,116461,116463,116465],{"class":242,"line":18558},[240,116429,32747],{"class":288},[240,116431,116432],{"class":436}," reset",[240,116434,116435],{"class":257},"(self, ",[240,116437,2554],{"class":288},[240,116439,116440],{"class":257},", seed: ",[240,116442,2126],{"class":264},[240,116444,27056],{"class":288},[240,116446,40879],{"class":264},[240,116448,15514],{"class":288},[240,116450,40879],{"class":264},[240,116452,116453],{"class":257},", options: ",[240,116455,116456],{"class":264},"dict",[240,116458,27056],{"class":288},[240,116460,40879],{"class":264},[240,116462,15514],{"class":288},[240,116464,40879],{"class":264},[240,116466,32732],{"class":257},[240,116468,116469,116471,116474,116477,116479],{"class":242,"line":18581},[240,116470,32763],{"class":264},[240,116472,116473],{"class":257},"().reset(",[240,116475,116476],{"class":792},"seed",[240,116478,440],{"class":288},[240,116480,116481],{"class":257},"seed)\n",[240,116483,116484,116487,116489,116492,116494],{"class":242,"line":18587},[240,116485,116486],{"class":257},"        mujoco.mj_resetData(",[240,116488,32769],{"class":264},[240,116490,116491],{"class":257},".model, ",[240,116493,32769],{"class":264},[240,116495,116496],{"class":257},".data)\n",[240,116498,116499],{"class":242,"line":18610},[240,116500,4353],{"emptyLinePlaceholder":2051},[240,116502,116503,116505,116508,116510,116512,116515,116517,116519,116521,116523,116525,116527,116529,116531,116533,116535,116537],{"class":242,"line":18624},[240,116504,32791],{"class":264},[240,116506,116507],{"class":257},".data.qpos[:] ",[240,116509,440],{"class":288},[240,116511,40819],{"class":264},[240,116513,116514],{"class":257},".np_random.uniform(",[240,116516,115672],{"class":792},[240,116518,115675],{"class":288},[240,116520,88124],{"class":264},[240,116522,1277],{"class":257},[240,116524,115682],{"class":792},[240,116526,440],{"class":288},[240,116528,88124],{"class":264},[240,116530,1277],{"class":257},[240,116532,33442],{"class":792},[240,116534,440],{"class":288},[240,116536,32769],{"class":264},[240,116538,116539],{"class":257},".model.nq)\n",[240,116541,116542,116544,116547,116549],{"class":242,"line":18644},[240,116543,32791],{"class":264},[240,116545,116546],{"class":257},".data.qvel[:] ",[240,116548,440],{"class":288},[240,116550,106671],{"class":264},[240,116552,116553,116556,116558,116560,116562],{"class":242,"line":18650},[240,116554,116555],{"class":257},"        mujoco.mj_forward(",[240,116557,32769],{"class":264},[240,116559,116491],{"class":257},[240,116561,32769],{"class":264},[240,116563,116496],{"class":257},[240,116565,116566],{"class":242,"line":18661},[240,116567,4353],{"emptyLinePlaceholder":2051},[240,116569,116570,116572,116574,116576],{"class":242,"line":18684},[240,116571,32791],{"class":264},[240,116573,115616],{"class":257},[240,116575,440],{"class":288},[240,116577,49279],{"class":264},[240,116579,116580,116582,116584],{"class":242,"line":18706},[240,116581,16701],{"class":288},[240,116583,40819],{"class":264},[240,116585,116586],{"class":257},"._get_obs(), {}\n",[240,116588,116589],{"class":242,"line":18711},[240,116590,4353],{"emptyLinePlaceholder":2051},[240,116592,116593,116595,116598],{"class":242,"line":18717},[240,116594,32747],{"class":288},[240,116596,116597],{"class":436}," step",[240,116599,116600],{"class":257},"(self, action):\n",[240,116602,116603,116605,116607,116610,116612,116614],{"class":242,"line":18731},[240,116604,112132],{"class":257},[240,116606,440],{"class":288},[240,116608,116609],{"class":257}," np.asarray(action, ",[240,116611,95413],{"class":792},[240,116613,440],{"class":288},[240,116615,115706],{"class":257},[240,116617,116618,116620,116622,116624,116626,116629,116631],{"class":242,"line":18744},[240,116619,112132],{"class":257},[240,116621,440],{"class":288},[240,116623,109357],{"class":257},[240,116625,32769],{"class":264},[240,116627,116628],{"class":257},".action_space.low, ",[240,116630,32769],{"class":264},[240,116632,116633],{"class":257},".action_space.high)\n",[240,116635,116636],{"class":242,"line":18749},[240,116637,4353],{"emptyLinePlaceholder":2051},[240,116639,116640,116642,116645,116647],{"class":242,"line":18763},[240,116641,32791],{"class":264},[240,116643,116644],{"class":257},".data.ctrl[:] ",[240,116646,440],{"class":288},[240,116648,109380],{"class":257},[240,116650,116651,116653,116655,116657,116659,116661,116663],{"class":242,"line":18768},[240,116652,5355],{"class":288},[240,116654,103412],{"class":257},[240,116656,27989],{"class":288},[240,116658,34389],{"class":264},[240,116660,789],{"class":257},[240,116662,32769],{"class":264},[240,116664,116665],{"class":257},".frame_skip):\n",[240,116667,116668,116671,116673,116675,116677],{"class":242,"line":18774},[240,116669,116670],{"class":257},"            mujoco.mj_step(",[240,116672,32769],{"class":264},[240,116674,116491],{"class":257},[240,116676,32769],{"class":264},[240,116678,116496],{"class":257},[240,116680,116681],{"class":242,"line":18779},[240,116682,4353],{"emptyLinePlaceholder":2051},[240,116684,116685,116687,116689,116691],{"class":242,"line":18793},[240,116686,32791],{"class":264},[240,116688,115616],{"class":257},[240,116690,11428],{"class":288},[240,116692,57632],{"class":264},[240,116694,116695],{"class":242,"line":18798},[240,116696,4353],{"emptyLinePlaceholder":2051},[240,116698,116699,116701,116703,116705],{"class":242,"line":18803},[240,116700,112092],{"class":257},[240,116702,440],{"class":288},[240,116704,40819],{"class":264},[240,116706,116707],{"class":257},"._get_obs()\n",[240,116709,116710,116712,116714,116716],{"class":242,"line":18817},[240,116711,112197],{"class":257},[240,116713,440],{"class":288},[240,116715,40819],{"class":264},[240,116717,116718],{"class":257},"._get_reward()\n",[240,116720,116721],{"class":242,"line":18829},[240,116722,4353],{"emptyLinePlaceholder":2051},[240,116724,116725,116727,116729,116731,116733,116735],{"class":242,"line":18834},[240,116726,114047],{"class":257},[240,116728,440],{"class":288},[240,116730,40819],{"class":264},[240,116732,116280],{"class":257},[240,116734,32769],{"class":264},[240,116736,116358],{"class":257},[240,116738,116739,116741,116743,116745,116747,116749],{"class":242,"line":18847},[240,116740,114060],{"class":257},[240,116742,440],{"class":288},[240,116744,40819],{"class":264},[240,116746,116280],{"class":257},[240,116748,32769],{"class":264},[240,116750,116373],{"class":257},[240,116752,116753,116755,116757,116759,116762,116764],{"class":242,"line":18852},[240,116754,116378],{"class":257},[240,116756,440],{"class":288},[240,116758,111707],{"class":264},[240,116760,116761],{"class":257},"(np.linalg.norm(tip ",[240,116763,2631],{"class":288},[240,116765,116766],{"class":257}," target))\n",[240,116768,116769],{"class":242,"line":18857},[240,116770,4353],{"emptyLinePlaceholder":2051},[240,116772,116773,116776,116778,116780,116782],{"class":242,"line":18862},[240,116774,116775],{"class":257},"        terminated ",[240,116777,440],{"class":288},[240,116779,115599],{"class":257},[240,116781,431],{"class":288},[240,116783,115604],{"class":264},[240,116785,116786,116789,116791,116793,116795,116797,116799],{"class":242,"line":18875},[240,116787,116788],{"class":257},"        truncated ",[240,116790,440],{"class":288},[240,116792,40819],{"class":264},[240,116794,115616],{"class":257},[240,116796,3664],{"class":288},[240,116798,40819],{"class":264},[240,116800,115623],{"class":257},[240,116802,116803,116806,116808,116810,116813],{"class":242,"line":18880},[240,116804,116805],{"class":257},"        info ",[240,116807,440],{"class":288},[240,116809,6400],{"class":257},[240,116811,116812],{"class":443},"\"distance\"",[240,116814,116815],{"class":257},": dist}\n",[240,116817,116818,116820],{"class":242,"line":34579},[240,116819,16701],{"class":288},[240,116821,116822],{"class":257}," obs, reward, terminated, truncated, info\n",[240,116824,116825],{"class":242,"line":34585},[240,116826,4353],{"emptyLinePlaceholder":2051},[240,116828,116829],{"class":242,"line":34591},[240,116830,4353],{"emptyLinePlaceholder":2051},[240,116832,116833,116835,116837,116839,116841],{"class":242,"line":34597},[240,116834,33893],{"class":288},[240,116836,3926],{"class":436},[240,116838,103309],{"class":257},[240,116840,97599],{"class":264},[240,116842,5691],{"class":257},[240,116844,116845,116848,116850],{"class":242,"line":34603},[240,116846,116847],{"class":257},"    env ",[240,116849,440],{"class":288},[240,116851,116852],{"class":257}," ReacherEnv()\n",[240,116854,116855,116858,116860,116863,116865,116867,116869],{"class":242,"line":34614},[240,116856,116857],{"class":257},"    obs, info ",[240,116859,440],{"class":288},[240,116861,116862],{"class":257}," env.reset(",[240,116864,116476],{"class":792},[240,116866,440],{"class":288},[240,116868,1274],{"class":264},[240,116870,2129],{"class":257},[240,116872,116873,116875,116877,116880],{"class":242,"line":34620},[240,116874,33245],{"class":264},[240,116876,789],{"class":257},[240,116878,116879],{"class":443},"\"initial obs shape:\"",[240,116881,116882],{"class":257},", obs.shape)\n",[240,116884,116885,116887,116889,116892],{"class":242,"line":34640},[240,116886,33245],{"class":264},[240,116888,789],{"class":257},[240,116890,116891],{"class":443},"\"initial info:\"",[240,116893,116894],{"class":257},", info)\n",[240,116896,116897],{"class":242,"line":34646},[240,116898,4353],{"emptyLinePlaceholder":2051},[240,116900,116901,116903,116905],{"class":242,"line":34657},[240,116902,112063],{"class":257},[240,116904,440],{"class":288},[240,116906,106671],{"class":264},[240,116908,116909,116911,116913,116915,116917,116919,116921],{"class":242,"line":34663},[240,116910,5153],{"class":288},[240,116912,33562],{"class":257},[240,116914,27989],{"class":288},[240,116916,34389],{"class":264},[240,116918,789],{"class":257},[240,116920,1000],{"class":264},[240,116922,32732],{"class":257},[240,116924,116925,116927,116929],{"class":242,"line":34669},[240,116926,112132],{"class":257},[240,116928,440],{"class":288},[240,116930,116931],{"class":257}," env.action_space.sample()\n",[240,116933,116934,116937,116939],{"class":242,"line":34675},[240,116935,116936],{"class":257},"        obs, reward, terminated, truncated, info ",[240,116938,440],{"class":288},[240,116940,115325],{"class":257},[240,116942,116943,116945,116947],{"class":242,"line":34681},[240,116944,112207],{"class":257},[240,116946,11428],{"class":288},[240,116948,112212],{"class":257},[240,116950,116951,116953,116955,116957,116959,116962,116964,116966,116969,116971,116973,116976,116978,116980,116983,116985,116987,116989],{"class":242,"line":34687},[240,116952,34397],{"class":264},[240,116954,789],{"class":257},[240,116956,112241],{"class":443},[240,116958,112244],{"class":257},[240,116960,116961],{"class":443},"\"reward:\"",[240,116963,1277],{"class":257},[240,116965,33964],{"class":264},[240,116967,116968],{"class":257},"(reward, ",[240,116970,1692],{"class":264},[240,116972,112255],{"class":257},[240,116974,116975],{"class":443},"\"distance:\"",[240,116977,1277],{"class":257},[240,116979,33964],{"class":264},[240,116981,116982],{"class":257},"(info[",[240,116984,116812],{"class":443},[240,116986,114112],{"class":257},[240,116988,1692],{"class":264},[240,116990,32443],{"class":257},[240,116992,116993,116995,116998,117001],{"class":242,"line":34693},[240,116994,4450],{"class":288},[240,116996,116997],{"class":257}," terminated ",[240,116999,117000],{"class":288},"or",[240,117002,117003],{"class":257}," truncated:\n",[240,117005,117006],{"class":242,"line":34699},[240,117007,117008],{"class":288},"            break\n",[240,117010,117011],{"class":242,"line":34719},[240,117012,4353],{"emptyLinePlaceholder":2051},[240,117014,117015,117017,117019,117021,117023,117025,117027,117029],{"class":242,"line":34725},[240,117016,33245],{"class":264},[240,117018,789],{"class":257},[240,117020,112286],{"class":443},[240,117022,1277],{"class":257},[240,117024,33964],{"class":264},[240,117026,112293],{"class":257},[240,117028,1692],{"class":264},[240,117030,32443],{"class":257},[240,117032,117033],{"class":242,"line":34741},[240,117034,4353],{"emptyLinePlaceholder":2051},[240,117036,117037],{"class":242,"line":34747},[240,117038,4353],{"emptyLinePlaceholder":2051},[240,117040,117041,117043,117045,117047,117049],{"class":242,"line":34761},[240,117042,3489],{"class":288},[240,117044,33166],{"class":264},[240,117046,103470],{"class":288},[240,117048,103473],{"class":443},[240,117050,5691],{"class":257},[240,117052,117053],{"class":242,"line":34767},[240,117054,103480],{"class":257},[19,117056,105480],{},[231,117058,117060],{"className":25768,"code":117059,"language":25770,"meta":236,"style":236},"touch ch8_gym_env.py\n",[23,117061,117062],{"__ignoreMap":236},[240,117063,117064,117066],{"class":242,"line":243},[240,117065,103194],{"class":436},[240,117067,117068],{"class":443}," ch8_gym_env.py\n",[19,117070,112354],{},[231,117072,117074],{"className":25768,"code":117073,"language":25770,"meta":236,"style":236},"python ch8_gym_env.py\n",[23,117075,117076],{"__ignoreMap":236},[240,117077,117078,117080],{"class":242,"line":243},[240,117079,32326],{"class":436},[240,117081,117068],{"class":443},[32,117083,103483],{"id":103483},[19,117085,117086],{},"继承 Gymnasium 环境：",[231,117088,117090],{"className":32324,"code":117089,"language":32326,"meta":236,"style":236},"class ReacherEnv(gym.Env):\n",[23,117091,117092],{"__ignoreMap":236},[240,117093,117094,117096,117098,117100,117102,117104,117106],{"class":242,"line":243},[240,117095,16643],{"class":288},[240,117097,115967],{"class":436},[240,117099,789],{"class":257},[240,117101,115450],{"class":436},[240,117103,2657],{"class":257},[240,117105,115976],{"class":436},[240,117107,32732],{"class":257},[19,117109,117110],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[19,117112,117113],{},"初始化模型：",[231,117115,117117],{"className":32324,"code":117116,"language":32326,"meta":236,"style":236},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[23,117118,117119,117133],{"__ignoreMap":236},[240,117120,117121,117123,117125,117127,117129,117131],{"class":242,"line":243},[240,117122,32769],{"class":264},[240,117124,116027],{"class":257},[240,117126,440],{"class":288},[240,117128,103323],{"class":257},[240,117130,103225],{"class":264},[240,117132,2129],{"class":257},[240,117134,117135,117137,117139,117141,117143,117145],{"class":242,"line":250},[240,117136,32769],{"class":264},[240,117138,116042],{"class":257},[240,117140,440],{"class":288},[240,117142,116047],{"class":257},[240,117144,32769],{"class":264},[240,117146,116052],{"class":257},[19,117148,117149,117150,117152],{},"这和前面章节一样，只是现在放到了类的 ",[23,117151,32775],{}," 里。",[19,117154,117155],{},"缓存 site ID：",[231,117157,117159],{"className":32324,"code":117158,"language":32326,"meta":236,"style":236},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[23,117160,117161,117175],{"__ignoreMap":236},[240,117162,117163,117165,117167,117169,117171,117173],{"class":242,"line":243},[240,117164,32769],{"class":264},[240,117166,116063],{"class":257},[240,117168,440],{"class":288},[240,117170,116068],{"class":257},[240,117172,91467],{"class":264},[240,117174,2129],{"class":257},[240,117176,117177,117179,117181,117183,117185,117187],{"class":242,"line":250},[240,117178,32769],{"class":264},[240,117180,116084],{"class":257},[240,117182,440],{"class":288},[240,117184,116068],{"class":257},[240,117186,91467],{"class":264},[240,117188,2129],{"class":257},[19,117190,117191],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[19,117193,117194],{},"reset：",[231,117196,117198],{"className":32324,"code":117197,"language":32326,"meta":236,"style":236},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[23,117199,117200],{"__ignoreMap":236},[240,117201,117202,117204,117206,117208,117210,117212,117214,117216,117218,117220,117222,117224,117226,117228,117230,117232,117234],{"class":242,"line":243},[240,117203,33893],{"class":288},[240,117205,116432],{"class":436},[240,117207,116435],{"class":257},[240,117209,2554],{"class":288},[240,117211,116440],{"class":257},[240,117213,2126],{"class":264},[240,117215,27056],{"class":288},[240,117217,40879],{"class":264},[240,117219,15514],{"class":288},[240,117221,40879],{"class":264},[240,117223,116453],{"class":257},[240,117225,116456],{"class":264},[240,117227,27056],{"class":288},[240,117229,40879],{"class":264},[240,117231,15514],{"class":288},[240,117233,40879],{"class":264},[240,117235,32732],{"class":257},[19,117237,117238,117240],{},[23,117239,71979],{}," 做四件事：",[1826,117242,117243,117246,117249,117252],{},[1829,117244,117245],{},"设置随机种子。",[1829,117247,117248],{},"重置 MuJoCo data。",[1829,117250,117251],{},"随机初始化关节角。",[1829,117253,117254],{},"返回初始观测和 info。",[19,117256,117257],{},"step：",[231,117259,117261],{"className":32324,"code":117260,"language":32326,"meta":236,"style":236},"def step(self, action):\n",[23,117262,117263],{"__ignoreMap":236},[240,117264,117265,117267,117269],{"class":242,"line":243},[240,117266,33893],{"class":288},[240,117268,116597],{"class":436},[240,117270,116600],{"class":257},[19,117272,117273,117275],{},[23,117274,109044],{}," 做六件事：",[1826,117277,117278,117281,117287,117290,117293,117296],{},[1829,117279,117280],{},"检查并裁剪 action。",[1829,117282,117283,117284,30331],{},"写入 ",[23,117285,117286],{},"self.data.ctrl",[1829,117288,117289],{},"连续推进若干个 MuJoCo 物理步。",[1829,117291,117292],{},"计算新观测。",[1829,117294,117295],{},"计算奖励和结束条件。",[1829,117297,117298],{},"返回 Gymnasium 标准五元组。",[32,117300,103619],{"id":103619},[231,117302,117304],{"className":32324,"code":117303,"language":32326,"meta":236,"style":236},"import gymnasium as gym\n",[23,117305,117306],{"__ignoreMap":236},[240,117307,117308,117310,117312,117314],{"class":242,"line":243},[240,117309,32338],{"class":288},[240,117311,115805],{"class":257},[240,117313,33329],{"class":288},[240,117315,115810],{"class":257},[19,117317,117318,117319,117321,117322,117325],{},"导入 Gymnasium，并起别名 ",[23,117320,115450],{},"。后面写 ",[23,117323,117324],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[231,117327,117329],{"className":32324,"code":117328,"language":32326,"meta":236,"style":236},"from gymnasium import spaces\n",[23,117330,117331],{"__ignoreMap":236},[240,117332,117333,117335,117337,117339],{"class":242,"line":243},[240,117334,32683],{"class":288},[240,117336,115805],{"class":257},[240,117338,32338],{"class":288},[240,117340,115837],{"class":257},[19,117342,117343,117344,117347],{},"导入空间定义工具。",[23,117345,117346],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[231,117349,117350],{"className":32324,"code":117089,"language":32326,"meta":236,"style":236},[23,117351,117352],{"__ignoreMap":236},[240,117353,117354,117356,117358,117360,117362,117364,117366],{"class":242,"line":243},[240,117355,16643],{"class":288},[240,117357,115967],{"class":436},[240,117359,789],{"class":257},[240,117361,115450],{"class":436},[240,117363,2657],{"class":257},[240,117365,115976],{"class":436},[240,117367,32732],{"class":257},[19,117369,117370,117371,117374,117375,117377,117378,102929,117380,117382],{},"定义一个类，名字叫 ",[23,117372,117373],{},"ReacherEnv","。括号里的 ",[23,117376,117324],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[23,117379,71979],{},[23,117381,109044],{}," 这两个核心方法。",[231,117384,117386],{"className":32324,"code":117385,"language":32326,"meta":236,"style":236},"metadata = {\"render_modes\": []}\n",[23,117387,117388],{"__ignoreMap":236},[240,117389,117390,117393,117395,117397,117399],{"class":242,"line":243},[240,117391,117392],{"class":257},"metadata ",[240,117394,440],{"class":288},[240,117396,6400],{"class":257},[240,117398,115990],{"class":443},[240,117400,115993],{"class":257},[19,117402,117403],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[231,117405,117407],{"className":32324,"code":117406,"language":32326,"meta":236,"style":236},"def __init__(self) -> None:\n",[23,117408,117409],{"__ignoreMap":236},[240,117410,117411,117413,117415,117417,117419],{"class":242,"line":243},[240,117412,33893],{"class":288},[240,117414,32750],{"class":264},[240,117416,116006],{"class":257},[240,117418,97599],{"class":264},[240,117420,5691],{"class":257},[19,117422,117423,117425,117426,30331],{},[23,117424,32775],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[23,117427,117428],{},"env = ReacherEnv()",[231,117430,117432],{"className":32324,"code":117431,"language":32326,"meta":236,"style":236},"super().__init__()\n",[23,117433,117434],{"__ignoreMap":236},[240,117435,117436,117439,117441,117443],{"class":242,"line":243},[240,117437,117438],{"class":264},"super",[240,117440,19208],{"class":257},[240,117442,32775],{"class":264},[240,117444,3929],{"class":257},[19,117446,117447,117448,117450],{},"调用父类 ",[23,117449,117324],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[231,117452,117453],{"className":32324,"code":117116,"language":32326,"meta":236,"style":236},[23,117454,117455,117469],{"__ignoreMap":236},[240,117456,117457,117459,117461,117463,117465,117467],{"class":242,"line":243},[240,117458,32769],{"class":264},[240,117460,116027],{"class":257},[240,117462,440],{"class":288},[240,117464,103323],{"class":257},[240,117466,103225],{"class":264},[240,117468,2129],{"class":257},[240,117470,117471,117473,117475,117477,117479,117481],{"class":242,"line":250},[240,117472,32769],{"class":264},[240,117474,116042],{"class":257},[240,117476,440],{"class":288},[240,117478,116047],{"class":257},[240,117480,32769],{"class":264},[240,117482,116052],{"class":257},[19,117484,117485,117486,117488,117489,102929,117492,117495],{},"把 MuJoCo 模型和状态保存到 ",[23,117487,32769],{}," 上。",[23,117490,117491],{},"self.model",[23,117493,117494],{},"self.data"," 表示这个环境对象自己的模型和状态。",[231,117497,117498],{"className":32324,"code":117158,"language":32326,"meta":236,"style":236},[23,117499,117500,117514],{"__ignoreMap":236},[240,117501,117502,117504,117506,117508,117510,117512],{"class":242,"line":243},[240,117503,32769],{"class":264},[240,117505,116063],{"class":257},[240,117507,440],{"class":288},[240,117509,116068],{"class":257},[240,117511,91467],{"class":264},[240,117513,2129],{"class":257},[240,117515,117516,117518,117520,117522,117524,117526],{"class":242,"line":250},[240,117517,32769],{"class":264},[240,117519,116084],{"class":257},[240,117521,440],{"class":288},[240,117523,116068],{"class":257},[240,117525,91467],{"class":264},[240,117527,2129],{"class":257},[19,117529,117530,117531,102929,117534,117537],{},"提前查好 tip 和 target 的 site ID。这样 ",[23,117532,117533],{},"_get_obs",[23,117535,117536],{},"_get_reward"," 里就不用每次按名字查找。",[231,117539,117541],{"className":32324,"code":117540,"language":32326,"meta":236,"style":236},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[23,117542,117543,117553,117563],{"__ignoreMap":236},[240,117544,117545,117547,117549,117551],{"class":242,"line":243},[240,117546,32769],{"class":264},[240,117548,115777],{"class":257},[240,117550,440],{"class":288},[240,117552,56362],{"class":264},[240,117554,117555,117557,117559,117561],{"class":242,"line":250},[240,117556,32769],{"class":264},[240,117558,116156],{"class":257},[240,117560,440],{"class":288},[240,117562,116161],{"class":264},[240,117564,117565,117567,117569,117571],{"class":242,"line":261},[240,117566,32769],{"class":264},[240,117568,115616],{"class":257},[240,117570,440],{"class":288},[240,117572,49279],{"class":264},[19,117574,117575,117578,117579,117582,117583,117586],{},[23,117576,117577],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[23,117580,117581],{},"max_steps"," 是一个 episode 最多运行多少步。",[23,117584,117585],{},"steps"," 记录当前 episode 已经走了多少步。",[231,117588,117589],{"className":32324,"code":115655,"language":32326,"meta":236,"style":236},[23,117590,117591],{"__ignoreMap":236},[240,117592,117593,117595,117597,117599,117601,117603,117605,117607,117609,117611,117613,117615,117617,117619,117621,117623,117625,117627,117629,117631],{"class":242,"line":243},[240,117594,32769],{"class":264},[240,117596,115664],{"class":257},[240,117598,440],{"class":288},[240,117600,115669],{"class":257},[240,117602,115672],{"class":792},[240,117604,115675],{"class":288},[240,117606,104314],{"class":264},[240,117608,1277],{"class":257},[240,117610,115682],{"class":792},[240,117612,440],{"class":288},[240,117614,104314],{"class":264},[240,117616,1277],{"class":257},[240,117618,97876],{"class":792},[240,117620,440],{"class":288},[240,117622,789],{"class":257},[240,117624,1668],{"class":264},[240,117626,115699],{"class":257},[240,117628,95413],{"class":792},[240,117630,440],{"class":288},[240,117632,115706],{"class":257},[19,117634,117635,117636,117639,117640,102929,117643,117646],{},"定义动作空间。",[23,117637,117638],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[23,117641,117642],{},"low=-1.0",[23,117644,117645],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[231,117648,117649],{"className":32324,"code":115716,"language":32326,"meta":236,"style":236},[23,117650,117651],{"__ignoreMap":236},[240,117652,117653,117655,117657,117659,117661,117663,117665,117667,117669,117671,117673,117675,117677,117679,117681,117683,117685,117687],{"class":242,"line":243},[240,117654,32769],{"class":264},[240,117656,115725],{"class":257},[240,117658,440],{"class":288},[240,117660,115669],{"class":257},[240,117662,115672],{"class":792},[240,117664,115675],{"class":288},[240,117666,115736],{"class":257},[240,117668,115682],{"class":792},[240,117670,440],{"class":288},[240,117672,115736],{"class":257},[240,117674,97876],{"class":792},[240,117676,440],{"class":288},[240,117678,789],{"class":257},[240,117680,2546],{"class":264},[240,117682,115699],{"class":257},[240,117684,95413],{"class":792},[240,117686,440],{"class":288},[240,117688,115706],{"class":257},[19,117690,117691,117692,117695,117696,117699],{},"定义观测空间。",[23,117693,117694],{},"shape=(10,)"," 表示观测是 10 个数。",[23,117697,117698],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[231,117701,117703],{"className":32324,"code":117702,"language":32326,"meta":236,"style":236},"def _get_obs(self) -> np.ndarray:\n",[23,117704,117705],{"__ignoreMap":236},[240,117706,117707,117709,117711],{"class":242,"line":243},[240,117708,33893],{"class":288},[240,117710,116266],{"class":436},[240,117712,116269],{"class":257},[19,117714,117715,117716,117718],{},"定义内部函数，用来生成观测。函数名前面的 ",[23,117717,3085],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[231,117720,117722],{"className":32324,"code":117721,"language":32326,"meta":236,"style":236},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[23,117723,117724,117738],{"__ignoreMap":236},[240,117725,117726,117728,117730,117732,117734,117736],{"class":242,"line":243},[240,117727,113478],{"class":257},[240,117729,440],{"class":288},[240,117731,40819],{"class":264},[240,117733,116280],{"class":257},[240,117735,32769],{"class":264},[240,117737,116285],{"class":257},[240,117739,117740,117742,117744,117746,117748,117750],{"class":242,"line":250},[240,117741,113488],{"class":257},[240,117743,440],{"class":288},[240,117745,40819],{"class":264},[240,117747,116280],{"class":257},[240,117749,32769],{"class":264},[240,117751,116300],{"class":257},[19,117753,117754],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[231,117756,117758],{"className":32324,"code":117757,"language":32326,"meta":236,"style":236},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[23,117759,117760,117776],{"__ignoreMap":236},[240,117761,117762,117764,117766,117768,117770,117772,117774],{"class":242,"line":243},[240,117763,112764],{"class":257},[240,117765,440],{"class":288},[240,117767,116309],{"class":257},[240,117769,32769],{"class":264},[240,117771,116314],{"class":257},[240,117773,32769],{"class":264},[240,117775,116319],{"class":257},[240,117777,117778,117780],{"class":242,"line":250},[240,117779,18994],{"class":288},[240,117781,116326],{"class":257},[19,117783,117784,117785,117788,117789,117791],{},"拼接观测，并转换成 ",[23,117786,117787],{},"float32","。很多强化学习库默认使用 ",[23,117790,117787],{},"，所以这里主动转换。",[231,117793,117794],{"className":32324,"code":117197,"language":32326,"meta":236,"style":236},[23,117795,117796],{"__ignoreMap":236},[240,117797,117798,117800,117802,117804,117806,117808,117810,117812,117814,117816,117818,117820,117822,117824,117826,117828,117830],{"class":242,"line":243},[240,117799,33893],{"class":288},[240,117801,116432],{"class":436},[240,117803,116435],{"class":257},[240,117805,2554],{"class":288},[240,117807,116440],{"class":257},[240,117809,2126],{"class":264},[240,117811,27056],{"class":288},[240,117813,40879],{"class":264},[240,117815,15514],{"class":288},[240,117817,40879],{"class":264},[240,117819,116453],{"class":257},[240,117821,116456],{"class":264},[240,117823,27056],{"class":288},[240,117825,40879],{"class":264},[240,117827,15514],{"class":288},[240,117829,40879],{"class":264},[240,117831,32732],{"class":257},[19,117833,117834,117835,117837,117838,117841],{},"定义 reset。",[23,117836,116476],{}," 用来控制随机数，保证实验可以复现。",[23,117839,117840],{},"options"," 用来接收额外配置，本章暂时不用。",[231,117843,117845],{"className":32324,"code":117844,"language":32326,"meta":236,"style":236},"super().reset(seed=seed)\n",[23,117846,117847],{"__ignoreMap":236},[240,117848,117849,117851,117853,117855,117857],{"class":242,"line":243},[240,117850,117438],{"class":264},[240,117852,116473],{"class":257},[240,117854,116476],{"class":792},[240,117856,440],{"class":288},[240,117858,116481],{"class":257},[19,117860,117861,117862,117865],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[23,117863,117864],{},"self.np_random"," 生成可复现的随机数。",[231,117867,117869],{"className":32324,"code":117868,"language":32326,"meta":236,"style":236},"mujoco.mj_resetData(self.model, self.data)\n",[23,117870,117871],{"__ignoreMap":236},[240,117872,117873,117876,117878,117880,117882],{"class":242,"line":243},[240,117874,117875],{"class":257},"mujoco.mj_resetData(",[240,117877,32769],{"class":264},[240,117879,116491],{"class":257},[240,117881,32769],{"class":264},[240,117883,116496],{"class":257},[19,117885,117886],{},"把 MuJoCo 状态重置到默认状态。",[231,117888,117890],{"className":32324,"code":117889,"language":32326,"meta":236,"style":236},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[23,117891,117892],{"__ignoreMap":236},[240,117893,117894,117896,117898,117900,117902,117904,117906,117908,117910,117912,117914,117916,117918,117920,117922,117924,117926],{"class":242,"line":243},[240,117895,32769],{"class":264},[240,117897,116507],{"class":257},[240,117899,440],{"class":288},[240,117901,40819],{"class":264},[240,117903,116514],{"class":257},[240,117905,115672],{"class":792},[240,117907,115675],{"class":288},[240,117909,88124],{"class":264},[240,117911,1277],{"class":257},[240,117913,115682],{"class":792},[240,117915,440],{"class":288},[240,117917,88124],{"class":264},[240,117919,1277],{"class":257},[240,117921,33442],{"class":792},[240,117923,440],{"class":288},[240,117925,32769],{"class":264},[240,117927,116539],{"class":257},[19,117929,117251,117930,117933,117934,117937,117938,117940],{},[23,117931,117932],{},"[:]"," 表示修改整个数组。",[23,117935,117936],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[23,117939,104061],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[231,117942,117944],{"className":32324,"code":117943,"language":32326,"meta":236,"style":236},"self.data.qvel[:] = 0.0\n",[23,117945,117946],{"__ignoreMap":236},[240,117947,117948,117950,117952,117954],{"class":242,"line":243},[240,117949,32769],{"class":264},[240,117951,116546],{"class":257},[240,117953,440],{"class":288},[240,117955,106671],{"class":264},[19,117957,117958],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[231,117960,117962],{"className":32324,"code":117961,"language":32326,"meta":236,"style":236},"self.steps = 0\nreturn self._get_obs(), {}\n",[23,117963,117964,117974],{"__ignoreMap":236},[240,117965,117966,117968,117970,117972],{"class":242,"line":243},[240,117967,32769],{"class":264},[240,117969,115616],{"class":257},[240,117971,440],{"class":288},[240,117973,49279],{"class":264},[240,117975,117976,117978,117980],{"class":242,"line":250},[240,117977,18994],{"class":288},[240,117979,40819],{"class":264},[240,117981,116586],{"class":257},[19,117983,117984],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[231,117986,117987],{"className":32324,"code":117260,"language":32326,"meta":236,"style":236},[23,117988,117989],{"__ignoreMap":236},[240,117990,117991,117993,117995],{"class":242,"line":243},[240,117992,33893],{"class":288},[240,117994,116597],{"class":436},[240,117996,116600],{"class":257},[19,117998,117999],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[231,118001,118003],{"className":32324,"code":118002,"language":32326,"meta":236,"style":236},"action = np.asarray(action, dtype=np.float32)\n",[23,118004,118005],{"__ignoreMap":236},[240,118006,118007,118009,118011,118013,118015,118017],{"class":242,"line":243},[240,118008,109352],{"class":257},[240,118010,440],{"class":288},[240,118012,116609],{"class":257},[240,118014,95413],{"class":792},[240,118016,440],{"class":288},[240,118018,115706],{"class":257},[19,118020,118021,118022,30331],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[23,118023,117787],{},[231,118025,118027],{"className":32324,"code":118026,"language":32326,"meta":236,"style":236},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[23,118028,118029],{"__ignoreMap":236},[240,118030,118031,118033,118035,118037,118039,118041,118043],{"class":242,"line":243},[240,118032,109352],{"class":257},[240,118034,440],{"class":288},[240,118036,109357],{"class":257},[240,118038,32769],{"class":264},[240,118040,116628],{"class":257},[240,118042,32769],{"class":264},[240,118044,116633],{"class":257},[19,118046,118047],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[231,118049,118051],{"className":32324,"code":118050,"language":32326,"meta":236,"style":236},"self.data.ctrl[:] = action\n",[23,118052,118053],{"__ignoreMap":236},[240,118054,118055,118057,118059,118061],{"class":242,"line":243},[240,118056,32769],{"class":264},[240,118058,116644],{"class":257},[240,118060,440],{"class":288},[240,118062,109380],{"class":257},[19,118064,118065],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[231,118067,118069],{"className":32324,"code":118068,"language":32326,"meta":236,"style":236},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[23,118070,118071,118087],{"__ignoreMap":236},[240,118072,118073,118075,118077,118079,118081,118083,118085],{"class":242,"line":243},[240,118074,4977],{"class":288},[240,118076,103412],{"class":257},[240,118078,27989],{"class":288},[240,118080,34389],{"class":264},[240,118082,789],{"class":257},[240,118084,32769],{"class":264},[240,118086,116665],{"class":257},[240,118088,118089,118092,118094,118096,118098],{"class":242,"line":250},[240,118090,118091],{"class":257},"    mujoco.mj_step(",[240,118093,32769],{"class":264},[240,118095,116491],{"class":257},[240,118097,32769],{"class":264},[240,118099,116496],{"class":257},[19,118101,118102,118103,118106,118107,118109,118110,30331],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[23,118104,118105],{},"frame_skip=5","，所以外部调用一次 ",[23,118108,115787],{},"，内部实际执行 5 次 ",[23,118111,103126],{},[231,118113,118115],{"className":32324,"code":118114,"language":32326,"meta":236,"style":236},"self.steps += 1\n",[23,118116,118117],{"__ignoreMap":236},[240,118118,118119,118121,118123,118125],{"class":242,"line":243},[240,118120,32769],{"class":264},[240,118122,115616],{"class":257},[240,118124,11428],{"class":288},[240,118126,57632],{"class":264},[19,118128,118129],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[231,118131,118133],{"className":32324,"code":118132,"language":32326,"meta":236,"style":236},"obs = self._get_obs()\nreward = self._get_reward()\n",[23,118134,118135,118145],{"__ignoreMap":236},[240,118136,118137,118139,118141,118143],{"class":242,"line":243},[240,118138,112764],{"class":257},[240,118140,440],{"class":288},[240,118142,40819],{"class":264},[240,118144,116707],{"class":257},[240,118146,118147,118149,118151,118153],{"class":242,"line":250},[240,118148,112915],{"class":257},[240,118150,440],{"class":288},[240,118152,40819],{"class":264},[240,118154,116718],{"class":257},[19,118156,118157],{},"计算新的观测和奖励。",[231,118159,118161],{"className":32324,"code":118160,"language":32326,"meta":236,"style":236},"dist = float(np.linalg.norm(tip - target))\n",[23,118162,118163],{"__ignoreMap":236},[240,118164,118165,118167,118169,118171,118173,118175],{"class":242,"line":243},[240,118166,113506],{"class":257},[240,118168,440],{"class":288},[240,118170,111707],{"class":264},[240,118172,116761],{"class":257},[240,118174,2631],{"class":288},[240,118176,116766],{"class":257},[19,118178,118179],{},"计算末端到目标的距离，并转换成 Python float。",[231,118181,118182],{"className":32324,"code":115587,"language":32326,"meta":236,"style":236},[23,118183,118184,118196],{"__ignoreMap":236},[240,118185,118186,118188,118190,118192,118194],{"class":242,"line":243},[240,118187,115594],{"class":257},[240,118189,440],{"class":288},[240,118191,115599],{"class":257},[240,118193,431],{"class":288},[240,118195,115604],{"class":264},[240,118197,118198,118200,118202,118204,118206,118208,118210],{"class":242,"line":250},[240,118199,115609],{"class":257},[240,118201,440],{"class":288},[240,118203,40819],{"class":264},[240,118205,115616],{"class":257},[240,118207,3664],{"class":288},[240,118209,40819],{"class":264},[240,118211,115623],{"class":257},[19,118213,118214],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[231,118216,118218],{"className":32324,"code":118217,"language":32326,"meta":236,"style":236},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[23,118219,118220,118233],{"__ignoreMap":236},[240,118221,118222,118225,118227,118229,118231],{"class":242,"line":243},[240,118223,118224],{"class":257},"info ",[240,118226,440],{"class":288},[240,118228,6400],{"class":257},[240,118230,116812],{"class":443},[240,118232,116815],{"class":257},[240,118234,118235,118237],{"class":242,"line":250},[240,118236,18994],{"class":288},[240,118238,116822],{"class":257},[19,118240,118241,118244],{},[23,118242,118243],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[231,118246,118248],{"className":32324,"code":118247,"language":32326,"meta":236,"style":236},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[23,118249,118250,118259],{"__ignoreMap":236},[240,118251,118252,118255,118257],{"class":242,"line":243},[240,118253,118254],{"class":257},"env ",[240,118256,440],{"class":288},[240,118258,116852],{"class":257},[240,118260,118261,118263,118265,118267,118269,118271,118273],{"class":242,"line":250},[240,118262,115310],{"class":257},[240,118264,440],{"class":288},[240,118266,116862],{"class":257},[240,118268,116476],{"class":792},[240,118270,440],{"class":288},[240,118272,1274],{"class":264},[240,118274,2129],{"class":257},[19,118276,118277,118278,118281],{},"创建环境并重置。",[23,118279,118280],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[231,118283,118285],{"className":32324,"code":118284,"language":32326,"meta":236,"style":236},"action = env.action_space.sample()\n",[23,118286,118287],{"__ignoreMap":236},[240,118288,118289,118291,118293],{"class":242,"line":243},[240,118290,109352],{"class":257},[240,118292,440],{"class":288},[240,118294,116931],{"class":257},[19,118296,118297],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[14,118299,104227],{"id":104226},[19,118301,107394],{},[231,118303,118306],{"className":118304,"code":118305,"language":7139,"meta":236},[7137],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[23,118307,118305],{"__ignoreMap":236},[19,118309,118310],{},"这个环境已经具备强化学习环境的基本结构。",[19,118312,118313],{},"主函数里使用随机动作：",[231,118315,118316],{"className":32324,"code":118284,"language":32326,"meta":236,"style":236},[23,118317,118318],{"__ignoreMap":236},[240,118319,118320,118322,118324],{"class":242,"line":243},[240,118321,109352],{"class":257},[240,118323,440],{"class":288},[240,118325,116931],{"class":257},[19,118327,118328],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[14,118330,104259],{"id":104258},[1826,118332,118333,118336,118342,118351,118360,118369,118375],{},[1829,118334,118335],{},"运行程序。",[1829,118337,118338,118339,30331],{},"确认 ",[23,118340,118341],{},"obs.shape == (10,)",[1829,118343,113091,118344,118347,118348,30331],{},[23,118345,118346],{},"env.action_space","，应类似 ",[23,118349,118350],{},"Box(-1.0, 1.0, (2,), float32)",[1829,118352,107495,118353,118356,118357,30331],{},[23,118354,118355],{},"self.max_steps = 10","，确认环境会更快 ",[23,118358,118359],{},"truncated=True",[1829,118361,104322,118362,104325,118365,118368],{},[23,118363,118364],{},"terminated = dist \u003C 0.05",[23,118366,118367],{},"dist \u003C 0.2","，观察是否更容易结束。",[1829,118370,104322,118371,118374],{},[23,118372,118373],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[1829,118376,118377,118378,118380,118381,118384],{},"在 ",[23,118379,118243],{}," 里加入 ",[23,118382,118383],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[14,118386,104364],{"id":104363},[32,118388,118390],{"id":118389},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[19,118392,118393,118394,118396],{},"Gymnasium 的 ",[23,118395,109044],{}," 返回 5 个值:",[231,118398,118400],{"className":32324,"code":118399,"language":32326,"meta":236,"style":236},"obs, reward, terminated, truncated, info\n",[23,118401,118402],{"__ignoreMap":236},[240,118403,118404],{"class":242,"line":243},[240,118405,118399],{"class":257},[19,118407,118408],{},"不是旧 Gym 的 4 个值。",[32,118410,118412,118415],{"id":118411},"datactrl-action-维度错误",[23,118413,118414],{},"data.ctrl[:] = action"," 维度错误",[19,118417,104434],{},[231,118419,118421],{"className":32324,"code":118420,"language":32326,"meta":236,"style":236},"print(self.model.nu)\nprint(action.shape)\n",[23,118422,118423,118434],{"__ignoreMap":236},[240,118424,118425,118427,118429,118431],{"class":242,"line":243},[240,118426,32361],{"class":264},[240,118428,789],{"class":257},[240,118430,32769],{"class":264},[240,118432,118433],{"class":257},".model.nu)\n",[240,118435,118436,118438],{"class":242,"line":250},[240,118437,32361],{"class":264},[240,118439,118440],{"class":257},"(action.shape)\n",[19,118442,118443],{},"两者必须匹配。",[32,118445,118447],{"id":118446},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[19,118449,104373],{},[231,118451,118453],{"className":32324,"code":118452,"language":32326,"meta":236,"style":236},"mujoco.mj_forward(self.model, self.data)\n",[23,118454,118455],{"__ignoreMap":236},[240,118456,118457,118460,118462,118464,118466],{"class":242,"line":243},[240,118458,118459],{"class":257},"mujoco.mj_forward(",[240,118461,32769],{"class":264},[240,118463,116491],{"class":257},[240,118465,32769],{"class":264},[240,118467,116496],{"class":257},[32,118469,118471,118473],{"id":118470},"observation_space-维度和-obs-不一致",[23,118472,115510],{}," 维度和 obs 不一致",[19,118475,104486],{},[231,118477,118479],{"className":32324,"code":118478,"language":32326,"meta":236,"style":236},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[23,118480,118481,118491,118498],{"__ignoreMap":236},[240,118482,118483,118485,118487,118489],{"class":242,"line":243},[240,118484,112764],{"class":257},[240,118486,440],{"class":288},[240,118488,40819],{"class":264},[240,118490,116707],{"class":257},[240,118492,118493,118495],{"class":242,"line":250},[240,118494,32361],{"class":264},[240,118496,118497],{"class":257},"(obs.shape)\n",[240,118499,118500,118502,118504,118506],{"class":242,"line":261},[240,118501,32361],{"class":264},[240,118503,789],{"class":257},[240,118505,32769],{"class":264},[240,118507,118508],{"class":257},".observation_space.shape)\n",[19,118510,118511],{},"两者必须一致。本章观测是：",[231,118513,118516],{"className":118514,"code":118515,"language":7139,"meta":236},[7137],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[23,118517,118515],{"__ignoreMap":236},[32,118519,118521],{"id":118520},"action-超过范围","action 超过范围",[19,118523,118524],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[231,118526,118527],{"className":32324,"code":118026,"language":32326,"meta":236,"style":236},[23,118528,118529],{"__ignoreMap":236},[240,118530,118531,118533,118535,118537,118539,118541,118543],{"class":242,"line":243},[240,118532,109352],{"class":257},[240,118534,440],{"class":288},[240,118536,109357],{"class":257},[240,118538,32769],{"class":264},[240,118540,116628],{"class":257},[240,118542,32769],{"class":264},[240,118544,116633],{"class":257},[19,118546,118547,118548,30331],{},"这能避免无效动作直接写入 ",[23,118549,102987],{},[32,118551,118553],{"id":118552},"忘记返回-info","忘记返回 info",[19,118555,118393,118556,102929,118558,118560],{},[23,118557,71979],{},[23,118559,109044],{}," 都会返回 info：",[231,118562,118563],{"className":32324,"code":115303,"language":32326,"meta":236,"style":236},[23,118564,118565,118573],{"__ignoreMap":236},[240,118566,118567,118569,118571],{"class":242,"line":243},[240,118568,115310],{"class":257},[240,118570,440],{"class":288},[240,118572,115315],{"class":257},[240,118574,118575,118577,118579],{"class":242,"line":250},[240,118576,115320],{"class":257},[240,118578,440],{"class":288},[240,118580,115325],{"class":257},[19,118582,118583,118584,30331],{},"即使暂时没有额外信息，也返回 ",[23,118585,34405],{},[14,118587,118589],{"id":118588},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[19,118591,118592],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[1826,118594,118595,118598,118601,118604,118607,118610],{},[1829,118596,118597],{},"更稳定的 reward。",[1829,118599,118600],{},"合理的 episode 长度。",[1829,118602,118603],{},"可重复的随机目标采样。",[1829,118605,118606],{},"render 接口。",[1829,118608,118609],{},"环境注册代码。",[1829,118611,118612],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[19,118614,118615],{},"如果只是自己写训练循环，最小形式是：",[231,118617,118619],{"className":32324,"code":118618,"language":32326,"meta":236,"style":236},"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",[23,118620,118621,118629,118645,118649,118665,118674,118683,118693],{"__ignoreMap":236},[240,118622,118623,118625,118627],{"class":242,"line":243},[240,118624,118254],{"class":257},[240,118626,440],{"class":288},[240,118628,116852],{"class":257},[240,118630,118631,118633,118635,118637,118639,118641,118643],{"class":242,"line":250},[240,118632,115310],{"class":257},[240,118634,440],{"class":288},[240,118636,116862],{"class":257},[240,118638,116476],{"class":792},[240,118640,440],{"class":288},[240,118642,1274],{"class":264},[240,118644,2129],{"class":257},[240,118646,118647],{"class":242,"line":261},[240,118648,4353],{"emptyLinePlaceholder":2051},[240,118650,118651,118653,118655,118657,118659,118661,118663],{"class":242,"line":277},[240,118652,4977],{"class":288},[240,118654,103412],{"class":257},[240,118656,27989],{"class":288},[240,118658,34389],{"class":264},[240,118660,789],{"class":257},[240,118662,8361],{"class":264},[240,118664,32732],{"class":257},[240,118666,118667,118670,118672],{"class":242,"line":294},[240,118668,118669],{"class":257},"    action ",[240,118671,440],{"class":288},[240,118673,116931],{"class":257},[240,118675,118676,118679,118681],{"class":242,"line":309},[240,118677,118678],{"class":257},"    obs, reward, terminated, truncated, info ",[240,118680,440],{"class":288},[240,118682,115325],{"class":257},[240,118684,118685,118687,118689,118691],{"class":242,"line":529},[240,118686,5053],{"class":288},[240,118688,116997],{"class":257},[240,118690,117000],{"class":288},[240,118692,117003],{"class":257},[240,118694,118695,118698,118700],{"class":242,"line":549},[240,118696,118697],{"class":257},"        obs, info ",[240,118699,440],{"class":288},[240,118701,115315],{"class":257},[14,118703,118705],{"id":118704},"_9本章小结","9.本章小结",[19,118707,118708],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[231,118710,118713],{"className":118711,"code":118712,"language":7139,"meta":236},[7137],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[23,118714,118712],{"__ignoreMap":236},[19,118716,118717],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[2019,118719,118720],{},"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":236,"searchDepth":250,"depth":250,"links":118722},[118723,118724,118725,118732,118736,118737,118738,118748,118749],{"id":102557,"depth":250,"text":102558},{"id":102680,"depth":250,"text":102681},{"id":102955,"depth":250,"text":102956,"children":118726},[118727,118729,118731],{"id":115534,"depth":261,"text":118728},"terminated 和 truncated 的区别",{"id":115637,"depth":261,"text":118730},"observation_space 和 action_space",{"id":115764,"depth":261,"text":115765},{"id":103163,"depth":250,"text":103164,"children":118733},[118734,118735],{"id":103483,"depth":261,"text":103483},{"id":103619,"depth":261,"text":103619},{"id":104226,"depth":250,"text":104227},{"id":104258,"depth":250,"text":104259},{"id":104363,"depth":250,"text":104364,"children":118739},[118740,118741,118743,118744,118746,118747],{"id":118389,"depth":261,"text":118390},{"id":118411,"depth":261,"text":118742},"data.ctrl[:] = action 维度错误",{"id":118446,"depth":261,"text":118447},{"id":118470,"depth":261,"text":118745},"observation_space 维度和 obs 不一致",{"id":118520,"depth":261,"text":118521},{"id":118552,"depth":261,"text":118553},{"id":118588,"depth":250,"text":118589},{"id":118704,"depth":250,"text":118705},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":115287,"description":236},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":118756,"title":118757,"body":118758,"description":119181,"extension":2049,"meta":119182,"navigation":2051,"path":119183,"seo":119184,"stem":119185,"__hash__":119186},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":118759,"toc":119171},[118760,118764,118767,118770,118790,118796,118802,118812,118815,118818,118838,118841,118845,118848,118854,118857,118871,118874,118877,118951,118954,118960,118963,118986,118989,119039,119042,119048,119051,119054,119057,119076,119079,119085,119088,119091,119094,119114,119117,119120,119123,119168],[10,118761,118763],{"id":118762},"mujoco-学习","MuJoCo 学习",[19,118765,118766],{},"初版",[19,118768,118769],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[1826,118771,118772,118775,118778,118787],{},[1829,118773,118774],{},"MuJoCo 模型文件在描述什么。",[1829,118776,118777],{},"Python 代码怎样读取和推进仿真。",[1829,118779,118780,46,118782,46,118784,118786],{},[23,118781,105940],{},[23,118783,106270],{},[23,118785,106273],{}," 这些数组为什么重要。",[1829,118788,118789],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[19,118791,118792,118793,118795],{},"默认环境为 Fedora 44、Python >= 3.10、",[23,118794,102938],{}," 官方 Python bindings。",[19,118797,118798,118799,118801],{},"注意：本文禁止使用 ",[23,118800,102923],{},"。所有示例均使用：",[231,118803,118804],{"className":32324,"code":103489,"language":32326,"meta":236,"style":236},[23,118805,118806],{"__ignoreMap":236},[240,118807,118808,118810],{"class":242,"line":243},[240,118809,32338],{"class":288},[240,118811,103212],{"class":257},[14,118813,118814],{"id":118814},"适合谁阅读",[19,118816,118817],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[1826,118819,118820,118823,118826,118829],{},[1829,118821,118822],{},"没学过 MuJoCo，只会一点 Python。",[1829,118824,118825],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[1829,118827,118828],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[1829,118830,118831,118832,118834,118835,118837],{},"以前接触过 ",[23,118833,102923],{},"，现在想迁移到官方 ",[23,118836,102932],{}," Python bindings。",[19,118839,118840],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[14,118842,118844],{"id":118843},"mujoco-到底是什么","MuJoCo 到底是什么",[19,118846,118847],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[231,118849,118852],{"className":118850,"code":118851,"language":7139,"meta":236},[7137],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[23,118853,118851],{"__ignoreMap":236},[19,118855,118856],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[1826,118858,118859,118862,118865,118868],{},[1829,118860,118861],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[1829,118863,118864],{},"快速测试控制算法，不必一开始就上真实机器人。",[1829,118866,118867],{},"生成强化学习环境。",[1829,118869,118870],{},"采集状态、动作、图像、奖励等训练数据。",[14,118872,118873],{"id":118873},"学习前的心智模型",[19,118875,118876],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[802,118878,118879,118891],{},[805,118880,118881],{},[808,118882,118883,118886,118889],{},[811,118884,118885],{"align":813},"部分",[811,118887,118888],{"align":813},"负责什么",[811,118890,23134],{"align":813},[819,118892,118893,118904,118916,118928,118940],{},[808,118894,118895,118898,118901],{},[824,118896,118897],{"align":813},"MJCF XML",[824,118899,118900],{"align":813},"定义世界和机器人结构",[824,118902,118903],{"align":813},"地面、盒子、关节、电机、摄像头",[808,118905,118906,118910,118913],{},[824,118907,118908],{"align":813},[23,118909,102620],{},[824,118911,118912],{"align":813},"编译后的静态模型",[824,118914,118915],{"align":813},"有几个关节、有几个电机、时间步长是多少",[808,118917,118918,118922,118925],{},[824,118919,118920],{"align":813},[23,118921,102630],{},[824,118923,118924],{"align":813},"运行中的动态状态",[824,118926,118927],{"align":813},"当前时间、位置、速度、电机输入",[808,118929,118930,118934,118937],{},[824,118931,118932],{"align":813},[23,118933,103126],{},[824,118935,118936],{"align":813},"推进一步物理仿真",[824,118938,118939],{"align":813},"根据重力、力、碰撞更新状态",[808,118941,118942,118945,118948],{},[824,118943,118944],{"align":813},"Viewer \u002F Renderer",[824,118946,118947],{"align":813},"把仿真显示出来",[824,118949,118950],{"align":813},"打开窗口或保存图片",[19,118952,118953],{},"一句话总结：",[231,118955,118958],{"className":118956,"code":118957,"language":7139,"meta":236},[7137],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[23,118959,118957],{"__ignoreMap":236},[19,118961,118962],{},"参考来源：",[3100,118964,118965,118972,118979],{},[1829,118966,118967,118968],{},"MuJoCo Python 官方文档：",[254,118969,118970],{"href":118970,"rel":118971},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[25811],[1829,118973,118974,118975],{},"MuJoCo XML Reference：",[254,118976,118977],{"href":118977,"rel":118978},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[25811],[1829,118980,118981,118982],{},"MuJoCo Overview：",[254,118983,118984],{"href":118984,"rel":118985},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[25811],[14,118987,118988],{"id":118988},"章节目录",[1826,118990,118991,118997,119003,119009,119015,119021,119027,119033],{},[1829,118992,118993],{},[254,118994,118996],{"href":118995},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[1829,118998,118999],{},[254,119000,119002],{"href":119001},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[1829,119004,119005],{},[254,119006,119008],{"href":119007},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[1829,119010,119011],{},[254,119012,119014],{"href":119013},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[1829,119016,119017],{},[254,119018,119020],{"href":119019},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[1829,119022,119023],{},[254,119024,119026],{"href":119025},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[1829,119028,119029],{},[254,119030,119032],{"href":119031},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[1829,119034,119035],{},[254,119036,119038],{"href":119037},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[14,119040,119041],{"id":119041},"推荐学习路线",[231,119043,119046],{"className":119044,"code":119045,"language":7139,"meta":236},[7137],"环境安装\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",[23,119047,119045],{"__ignoreMap":236},[19,119049,119050],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[14,119052,119053],{"id":119053},"建议的目录结构",[19,119055,119056],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[231,119058,119060],{"className":25768,"code":119059,"language":25770,"meta":236,"style":236},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[23,119061,119062,119070],{"__ignoreMap":236},[240,119063,119064,119066,119068],{"class":242,"line":243},[240,119065,103177],{"class":436},[240,119067,31162],{"class":264},[240,119069,103182],{"class":443},[240,119071,119072,119074],{"class":242,"line":250},[240,119073,103187],{"class":264},[240,119075,103182],{"class":443},[19,119077,119078],{},"每一章的代码都单独保存：",[231,119080,119083],{"className":119081,"code":119082,"language":7139,"meta":236},[7137],"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",[23,119084,119082],{"__ignoreMap":236},[19,119086,119087],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[14,119089,119090],{"id":119090},"学习方法",[19,119092,119093],{},"每章建议按这个顺序操作：",[1826,119095,119096,119099,119102,119105,119108,119111],{},[1829,119097,119098],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[1829,119100,119101],{},"复制最小可运行代码，保存成指定文件。",[1829,119103,119104],{},"运行代码，确认没有报错。",[1829,119106,119107],{},"对照“运行结果说明”理解输出。",[1829,119109,119110],{},"做“验证步骤”，主动改一两个参数。",[1829,119112,119113],{},"遇到报错先看“常见错误与解决方案”。",[19,119115,119116],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[14,119118,119119],{"id":119119},"全局排错顺序",[19,119121,119122],{},"遇到问题时，按下面顺序查：",[1826,119124,119125,119131,119137,119142,119145,119148,119155,119165],{},[1829,119126,119127,119128],{},"Python 环境是否激活：",[23,119129,119130],{},"which python",[1829,119132,119133,119134],{},"MuJoCo 是否能导入：",[23,119135,119136],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[1829,119138,119139,119140],{},"是否误装了 ",[23,119141,102923],{},[1829,119143,119144],{},"XML 标签是否闭合、属性是否拼写正确",[1829,119146,119147],{},"actuator 引用的 joint 名字是否存在",[1829,119149,119150,119152,119153],{},[23,119151,102987],{}," 的长度是否等于 ",[23,119154,104069],{},[1829,119156,107495,119157,84453,119159,119161,119162],{},[23,119158,105940],{},[23,119160,106270],{}," 后是否调用了 ",[23,119163,119164],{},"mujoco.mj_forward",[1829,119166,119167],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[2019,119169,119170],{},"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":236,"searchDepth":250,"depth":250,"links":119172},[119173,119174,119175,119176,119177,119178,119179,119180],{"id":118814,"depth":250,"text":118814},{"id":118843,"depth":250,"text":118844},{"id":118873,"depth":250,"text":118873},{"id":118988,"depth":250,"text":118988},{"id":119041,"depth":250,"text":119041},{"id":119053,"depth":250,"text":119053},{"id":119090,"depth":250,"text":119090},{"id":119119,"depth":250,"text":119119},"仿真搭建。",{"category":25325},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":118757,"description":119181},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":119188,"title":119189,"body":119190,"description":2048,"extension":2049,"meta":119645,"navigation":2051,"path":119646,"seo":119647,"stem":119648,"__hash__":119649},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":119191,"toc":119643},[119192,119195,119198,119204,119640],[10,119193,119189],{"id":119194},"_1-最常用的基本操作更新",[19,119196,119197],{},"装linux系统教程：",[19,119199,119200],{},[254,119201,119202],{"href":119202,"rel":119203},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[25811],[231,119205,119209],{"className":119206,"code":119207,"language":119208,"meta":236,"style":236},"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",[23,119210,119211,119216,119221,119230,119235,119244,119249,119269,119274,119285,119290,119299,119304,119332,119337,119356,119361,119380,119384,119389,119405,119409,119414,119444,119448,119453,119469,119473,119478,119493,119497,119502,119518,119522,119527,119539,119551,119555,119560,119577,119581,119586,119604,119608,119613,119622,119626,119631],{"__ignoreMap":236},[240,119212,119213],{"class":242,"line":243},[240,119214,119215],{"class":246},"#更新相关的知识\n",[240,119217,119218],{"class":242,"line":250},[240,119219,119220],{"class":246},"# 更新软件包列表（从服务器获取最新软件信息）\n",[240,119222,119223,119225,119228],{"class":242,"line":261},[240,119224,26523],{"class":436},[240,119226,119227],{"class":443}," apt",[240,119229,28188],{"class":443},[240,119231,119232],{"class":242,"line":277},[240,119233,119234],{"class":246},"# 升级所有可更新的软件包（不删除旧包）\n",[240,119236,119237,119239,119241],{"class":242,"line":294},[240,119238,26523],{"class":436},[240,119240,119227],{"class":443},[240,119242,119243],{"class":443}," upgrade\n",[240,119245,119246],{"class":242,"line":309},[240,119247,119248],{"class":246},"#更新和升级软件包\n",[240,119250,119251,119253,119255,119258,119260,119262,119264,119267],{"class":242,"line":529},[240,119252,26523],{"class":436},[240,119254,119227],{"class":443},[240,119256,119257],{"class":443}," update",[240,119259,28136],{"class":257},[240,119261,26523],{"class":436},[240,119263,119227],{"class":443},[240,119265,119266],{"class":443}," upgrade",[240,119268,102892],{"class":264},[240,119270,119271],{"class":242,"line":549},[240,119272,119273],{"class":246},"#列出可更新的软件包及版本信息\n",[240,119275,119276,119279,119282],{"class":242,"line":569},[240,119277,119278],{"class":436},"apt",[240,119280,119281],{"class":443}," list",[240,119283,119284],{"class":264}," --upgradable\n",[240,119286,119287],{"class":242,"line":589},[240,119288,119289],{"class":246},"#彻底升级（处理依赖关系，可能删除旧包）\n",[240,119291,119292,119294,119296],{"class":242,"line":715},[240,119293,26523],{"class":436},[240,119295,119227],{"class":443},[240,119297,119298],{"class":443}," full-upgrade\n",[240,119300,119301],{"class":242,"line":727},[240,119302,119303],{"class":246},"#设置指定版本\n",[240,119305,119306,119308,119310,119312,119314,119317,119319,119321,119323,119325,119328,119330],{"class":242,"line":1730},[240,119307,26523],{"class":436},[240,119309,119227],{"class":443},[240,119311,25780],{"class":443},[240,119313,30848],{"class":288},[240,119315,119316],{"class":443},"package_nam",[240,119318,2192],{"class":257},[240,119320,3053],{"class":288},[240,119322,440],{"class":443},[240,119324,431],{"class":288},[240,119326,119327],{"class":443},"version_numbe",[240,119329,2768],{"class":257},[240,119331,447],{"class":288},[240,119333,119334],{"class":242,"line":3582},[240,119335,119336],{"class":246},"#只安装软件包不升级\n",[240,119338,119339,119341,119343,119345,119347,119349,119351,119353],{"class":242,"line":3596},[240,119340,26523],{"class":436},[240,119342,119227],{"class":443},[240,119344,25780],{"class":443},[240,119346,30848],{"class":288},[240,119348,119316],{"class":443},[240,119350,2192],{"class":257},[240,119352,3053],{"class":288},[240,119354,119355],{"class":264}," --no-upgrade\n",[240,119357,119358],{"class":242,"line":3601},[240,119359,119360],{"class":246},"#只升级，不存在就不安装\n",[240,119362,119363,119365,119367,119369,119371,119373,119375,119377],{"class":242,"line":3607},[240,119364,26523],{"class":436},[240,119366,119227],{"class":443},[240,119368,25780],{"class":443},[240,119370,30848],{"class":288},[240,119372,119316],{"class":443},[240,119374,2192],{"class":257},[240,119376,3053],{"class":288},[240,119378,119379],{"class":264}," --only-upgrade\n",[240,119381,119382],{"class":242,"line":3628},[240,119383,4353],{"emptyLinePlaceholder":2051},[240,119385,119386],{"class":242,"line":3633},[240,119387,119388],{"class":246},"#安装指定的软件命令\n",[240,119390,119391,119393,119395,119397,119399,119401,119403],{"class":242,"line":3647},[240,119392,26523],{"class":436},[240,119394,119227],{"class":443},[240,119396,25780],{"class":443},[240,119398,30848],{"class":288},[240,119400,119316],{"class":443},[240,119402,2192],{"class":257},[240,119404,447],{"class":288},[240,119406,119407],{"class":242,"line":3652},[240,119408,4353],{"emptyLinePlaceholder":2051},[240,119410,119411],{"class":242,"line":3681},[240,119412,119413],{"class":246},"#安装多个软件包\n",[240,119415,119416,119418,119420,119422,119424,119427,119430,119432,119434,119437,119439,119441],{"class":242,"line":3686},[240,119417,26523],{"class":436},[240,119419,119227],{"class":443},[240,119421,25780],{"class":443},[240,119423,30848],{"class":288},[240,119425,119426],{"class":443},"package_",[240,119428,119429],{"class":288},"1>",[240,119431,30848],{"class":288},[240,119433,119426],{"class":443},[240,119435,119436],{"class":288},"2>",[240,119438,30848],{"class":288},[240,119440,119426],{"class":443},[240,119442,119443],{"class":288},"3>\n",[240,119445,119446],{"class":242,"line":3703},[240,119447,4353],{"emptyLinePlaceholder":2051},[240,119449,119450],{"class":242,"line":3708},[240,119451,119452],{"class":246},"#更新指定的软件命令\n",[240,119454,119455,119457,119459,119461,119463,119465,119467],{"class":242,"line":3713},[240,119456,26523],{"class":436},[240,119458,119227],{"class":443},[240,119460,119257],{"class":443},[240,119462,30848],{"class":288},[240,119464,119316],{"class":443},[240,119466,2192],{"class":257},[240,119468,447],{"class":288},[240,119470,119471],{"class":242,"line":3718},[240,119472,4353],{"emptyLinePlaceholder":2051},[240,119474,119475],{"class":242,"line":3732},[240,119476,119477],{"class":246},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[240,119479,119480,119482,119485,119487,119489,119491],{"class":242,"line":3737},[240,119481,119278],{"class":436},[240,119483,119484],{"class":443}," show",[240,119486,30848],{"class":288},[240,119488,119316],{"class":443},[240,119490,2192],{"class":257},[240,119492,447],{"class":288},[240,119494,119495],{"class":242,"line":4530},[240,119496,4353],{"emptyLinePlaceholder":2051},[240,119498,119499],{"class":242,"line":4544},[240,119500,119501],{"class":246},"#删除软件包命令\n",[240,119503,119504,119506,119508,119510,119512,119514,119516],{"class":242,"line":4552},[240,119505,26523],{"class":436},[240,119507,119227],{"class":443},[240,119509,28025],{"class":443},[240,119511,30848],{"class":288},[240,119513,119316],{"class":443},[240,119515,2192],{"class":257},[240,119517,447],{"class":288},[240,119519,119520],{"class":242,"line":4557},[240,119521,4353],{"emptyLinePlaceholder":2051},[240,119523,119524],{"class":242,"line":4563},[240,119525,119526],{"class":246},"# 清理旧版本和缓存（释放磁盘空间）\n",[240,119528,119529,119531,119533,119536],{"class":242,"line":4569},[240,119530,26523],{"class":436},[240,119532,119227],{"class":443},[240,119534,119535],{"class":443}," autoremove",[240,119537,119538],{"class":246},"  # 删除不再需要的依赖和库文件\n",[240,119540,119541,119543,119545,119548],{"class":242,"line":4574},[240,119542,26523],{"class":436},[240,119544,119227],{"class":443},[240,119546,119547],{"class":443}," clean",[240,119549,119550],{"class":246},"       # 清理下载的缓存包\n",[240,119552,119553],{"class":242,"line":9899},[240,119554,4353],{"emptyLinePlaceholder":2051},[240,119556,119557],{"class":242,"line":9923},[240,119558,119559],{"class":246},"#移除软件包及配置文件\n",[240,119561,119562,119564,119566,119569,119571,119573,119575],{"class":242,"line":9928},[240,119563,26523],{"class":436},[240,119565,119227],{"class":443},[240,119567,119568],{"class":443}," purge",[240,119570,30848],{"class":288},[240,119572,119316],{"class":443},[240,119574,2192],{"class":257},[240,119576,447],{"class":288},[240,119578,119579],{"class":242,"line":9934},[240,119580,4353],{"emptyLinePlaceholder":2051},[240,119582,119583],{"class":242,"line":9961},[240,119584,119585],{"class":246},"#查找软件包命令\n",[240,119587,119588,119590,119592,119595,119597,119600,119602],{"class":242,"line":9966},[240,119589,26523],{"class":436},[240,119591,119227],{"class":443},[240,119593,119594],{"class":443}," search",[240,119596,30848],{"class":288},[240,119598,119599],{"class":443},"keywor",[240,119601,2416],{"class":257},[240,119603,447],{"class":288},[240,119605,119606],{"class":242,"line":9972},[240,119607,4353],{"emptyLinePlaceholder":2051},[240,119609,119610],{"class":242,"line":9984},[240,119611,119612],{"class":246},"#列出所有已安装的包\n",[240,119614,119615,119617,119619],{"class":242,"line":9996},[240,119616,119278],{"class":436},[240,119618,119281],{"class":443},[240,119620,119621],{"class":264}," --installed\n",[240,119623,119624],{"class":242,"line":10008},[240,119625,4353],{"emptyLinePlaceholder":2051},[240,119627,119628],{"class":242,"line":11667},[240,119629,119630],{"class":246},"#列出所有已安装的包的版本信息\n",[240,119632,119633,119635,119637],{"class":242,"line":11692},[240,119634,119278],{"class":436},[240,119636,119281],{"class":443},[240,119638,119639],{"class":264}," --all-versions\n",[2019,119641,119642],{},"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":236,"searchDepth":250,"depth":250,"links":119644},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":119189,"description":2048},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":119651,"title":119652,"body":119653,"description":2048,"extension":2049,"meta":120394,"navigation":2051,"path":120395,"seo":120396,"stem":120397,"__hash__":120398},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":119654,"toc":120381},[119655,119658,119662,119665,119671,119675,119679,119685,119690,119695,119700,119705,119710,119713,119716,119719,119722,119726,119729,119734,119737,119742,119745,119750,119757,119760,119763,119766,119769,119772,119783,119787,119791,119796,119801,119805,119810,119814,119819,119823,119827,119832,119835,119880,119885,119889,119893,119898,119904,119909,119919,119924,119934,119939,119944,119971,119975,119978,119983,119986,120011,120015,120020,120023,120028,120033,120053,120058,120061,120076,120080,120133,120136,120141,120145,120148,120163,120166,120169,120174,120178,120182,120185,120189,120193,120196,120201,120206,120210,120217,120225,120228,120235,120240,120245,120248,120253,120260,120265,120272,120276,120278,120283,120287,120290,120293,120298,120301,120306,120309,120314,120319,120324,120328,120333,120337,120378],[10,119656,119652],{"id":119657},"_2-linux装机教程",[14,119659,119661],{"id":119660},"_21-实体机","2.1 实体机",[19,119663,119664],{},"使用清华源：（Ubuntu24.04）",[19,119666,119667],{},[254,119668,119669],{"href":119669,"rel":119670},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[25811],[14,119672,119674],{"id":119673},"_22-普通虚拟机","2.2 普通虚拟机",[32,119676,119678],{"id":119677},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[19,119680,119681],{},[254,119682,119683],{"href":119683,"rel":119684},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[25811],[19,119686,119687],{},[219,119688],{"alt":236,"src":119689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[19,119691,119692],{},[219,119693],{"alt":236,"src":119694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[19,119696,119697],{},[219,119698],{"alt":236,"src":119699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[19,119701,119702],{},[219,119703],{"alt":236,"src":119704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[19,119706,119707],{},[219,119708],{"alt":236,"src":119709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[19,119711,119712],{},"内存4G（4096MB）；",[19,119714,119715],{},"CPU给4个核；",[19,119717,119718],{},"硬盘动态分配60G；",[19,119720,119721],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[32,119723,119725],{"id":119724},"_222-安装ubuntu","2.2.2 安装Ubuntu",[19,119727,119728],{},"按照1.1的步骤下载Ubuntu",[19,119730,119731],{},[219,119732],{"alt":236,"src":119733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[19,119735,119736],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[19,119738,119739],{},[219,119740],{"alt":236,"src":119741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[19,119743,119744],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[19,119746,119747],{},[219,119748],{"alt":236,"src":119749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[19,119751,119752,119753,119756],{},"选择“正常安装”(找不到都用Alt+F7)， ",[68,119754,119755],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[19,119758,119759],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[19,119761,119762],{},"将改动写入磁盘吗 继续",[19,119764,119765],{},"选择东八区（shanghai，大致在地图上点一下），继续",[19,119767,119768],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[19,119770,119771],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[19,119773,119774,119775,119778,119779,119782],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[68,119776,119777],{},"除了"," 选不发送系统信息与不升级之外， ",[68,119780,119781],{},"其它"," 都跳过或前进）",[32,119784,119786],{"id":119785},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[23945,119788,119790],{"id":119789},"_2231-全屏","2.2.3.1 全屏",[19,119792,119793],{},[219,119794],{"alt":236,"src":119795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[19,119797,119798],{},[219,119799],{"alt":236,"src":119800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[23945,119802,119804],{"id":119803},"_2232-文件交换","2.2.3.2 文件交换",[19,119806,119807],{},[219,119808],{"alt":236,"src":119809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[23945,119811,119813],{"id":119812},"_2233-新建文本文档","2.2.3.3 新建文本文档",[19,119815,119816],{},[219,119817],{"alt":236,"src":119818},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[14,119820,119822],{"id":119821},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[32,119824,119826],{"id":119825},"_231-简介与优缺点","2.3.1 简介与优缺点",[1826,119828,119829],{},[1829,119830,119831],{},"什么情况下推荐？",[19,119833,119834],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[1826,119836,119837],{"start":250},[1829,119838,119839,119840],{},"优缺点：",[1826,119841,119842,119872],{},[1829,119843,119844,119845],{},"优点：",[1826,119846,119847,119850,119857,119860,119863,119866,119869],{},[1829,119848,119849],{},"WSL2是最好的Linux发行版;(bushi)",[1829,119851,119852,119853,119856],{},"性能损耗极低。且比在Windows上跑深度性能 ",[68,119854,119855],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[1829,119858,119859],{},"非常方便调用USB设备，可以USB直通;",[1829,119861,119862],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[1829,119864,119865],{},"非常方便Win与WSL2互相传文件等协同操作;",[1829,119867,119868],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[1829,119870,119871],{},"非常方便使用Windows的VScode远程开发;",[1829,119873,119874,119875],{},"缺点：",[1826,119876,119877],{},[1829,119878,119879],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[19,119881,119882],{},[219,119883],{"alt":236,"src":119884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[32,119886,119888],{"id":119887},"_232-安装教程","2.3.2 安装教程",[23945,119890,119892],{"id":119891},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[1826,119894,119895],{},[1829,119896,119897],{},"方法一(图形界面)",[19,119899,119900,119901,26565],{},"用Win+R输入",[23,119902,119903],{},"appwiz.cpl",[19,119905,119906],{},[219,119907],{"alt":236,"src":119908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[19,119910,119911,119912,119915,119916,28419],{},"点击OK进入 ",[68,119913,119914],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[68,119917,119918],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[19,119920,119921],{},[219,119922],{"alt":236,"src":119923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[19,119925,119926,119927,102929,119930,119933],{},"选择 ",[68,119928,119929],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[68,119931,119932],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[19,119935,119936],{},[219,119937],{"alt":236,"src":119938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[1826,119940,119941],{"start":250},[1829,119942,119943],{},"方法二(命令行)",[231,119945,119949],{"className":119946,"code":119947,"language":119948,"meta":236,"style":236},"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",[23,119950,119951,119956,119961,119966],{"__ignoreMap":236},[240,119952,119953],{"class":242,"line":243},[240,119954,119955],{},"# 开启 Linux 子系统\n",[240,119957,119958],{"class":242,"line":250},[240,119959,119960],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[240,119962,119963],{"class":242,"line":261},[240,119964,119965],{},"# 开启虚拟机平台\n",[240,119967,119968],{"class":242,"line":277},[240,119969,119970],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[23945,119972,119974],{"id":119973},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[19,119976,119977],{},"用管理员权限打开powershell",[19,119979,119980],{},[219,119981],{"alt":236,"src":119982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[19,119984,119985],{},"升级WSL并设置默认版本为WSL2",[231,119987,119989],{"className":119946,"code":119988,"language":119948,"meta":236,"style":236},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[23,119990,119991,119996,120001,120006],{"__ignoreMap":236},[240,119992,119993],{"class":242,"line":243},[240,119994,119995],{},"# 更新 wsl\n",[240,119997,119998],{"class":242,"line":250},[240,119999,120000],{},"wsl --update\n",[240,120002,120003],{"class":242,"line":261},[240,120004,120005],{},"# 将 wsl 版本设置为 wsl2\n",[240,120007,120008],{"class":242,"line":277},[240,120009,120010],{},"wsl --set-default-version 2\n",[23945,120012,120014],{"id":120013},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[1826,120016,120017],{},[1829,120018,120019],{},"方式一(商店下载)",[19,120021,120022],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[19,120024,120025],{},[219,120026],{"alt":236,"src":120027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[1826,120029,120030],{"start":250},[1829,120031,120032],{},"方式二(命令行安装)",[231,120034,120036],{"className":119946,"code":120035,"language":119948,"meta":236,"style":236},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[23,120037,120038,120043,120048],{"__ignoreMap":236},[240,120039,120040],{"class":242,"line":243},[240,120041,120042],{},"# 列出可安装的 Linux 版本\n",[240,120044,120045],{"class":242,"line":250},[240,120046,120047],{},"#（需要科学手段）\n",[240,120049,120050],{"class":242,"line":261},[240,120051,120052],{},"wsl --list --online\n",[19,120054,120055],{},[219,120056],{"alt":236,"src":120057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[19,120059,120060],{},"选择对应发行版并安装",[231,120062,120064],{"className":119946,"code":120063,"language":119948,"meta":236,"style":236},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[23,120065,120066,120071],{"__ignoreMap":236},[240,120067,120068],{"class":242,"line":243},[240,120069,120070],{},"# Ubuntu安装完毕后需要重启系统\n",[240,120072,120073],{"class":242,"line":250},[240,120074,120075],{},"wsl --install -d Ubuntu-24.04\n",[23945,120077,120079],{"id":120078},"_2324-查看系统状态","2.3.2.4 查看系统状态",[231,120081,120083],{"className":119946,"code":120082,"language":119948,"meta":236,"style":236},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[23,120084,120085,120090,120095,120100,120105,120109,120113,120118,120123,120128],{"__ignoreMap":236},[240,120086,120087],{"class":242,"line":243},[240,120088,120089],{},"# 查看 wsl\n",[240,120091,120092],{"class":242,"line":250},[240,120093,120094],{},"wsl -l\n",[240,120096,120097],{"class":242,"line":261},[240,120098,120099],{},"# 查看 wsl 运行版本或模式\n",[240,120101,120102],{"class":242,"line":277},[240,120103,120104],{},"wsl -l -v\n",[240,120106,120107],{"class":242,"line":294},[240,120108,4353],{"emptyLinePlaceholder":2051},[240,120110,120111],{"class":242,"line":309},[240,120112,4353],{"emptyLinePlaceholder":2051},[240,120114,120115],{"class":242,"line":529},[240,120116,120117],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[240,120119,120120],{"class":242,"line":549},[240,120121,120122],{},"wsl --set-version \u003Cdistro> 2\n",[240,120124,120125],{"class":242,"line":569},[240,120126,120127],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[240,120129,120130],{"class":242,"line":589},[240,120131,120132],{},"wsl --unregister \u003Cdistro>\n",[19,120134,120135],{},"输出Version为2即正常",[19,120137,120138],{},[219,120139],{"alt":236,"src":120140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[23945,120142,120144],{"id":120143},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[19,120146,120147],{},"直接在Powershell里输入wsl命令进入子系统",[231,120149,120151],{"className":119946,"code":120150,"language":119948,"meta":236,"style":236},"# 进入子系统\nwsl\n",[23,120152,120153,120158],{"__ignoreMap":236},[240,120154,120155],{"class":242,"line":243},[240,120156,120157],{},"# 进入子系统\n",[240,120159,120160],{"class":242,"line":250},[240,120161,120162],{},"wsl\n",[19,120164,120165],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[19,120167,120168],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[19,120170,120171],{},[219,120172],{"alt":236,"src":120173},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[32,120175,120177],{"id":120176},"_233-配置各种环境","2.3.3 配置各种环境",[23945,120179,120181],{"id":120180},"_2331-换源","2.3.3.1 换源",[19,120183,120184],{},"(同实体机LINUX，往下找教程)",[23945,120186,120188],{"id":120187},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[24857,120190,120192],{"id":120191},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[19,120194,120195],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[19,120197,120198],{},[219,120199],{"alt":236,"src":120200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[19,120202,120203],{},[219,120204],{"alt":236,"src":120205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[24857,120207,120209],{"id":120208},"_23322-cuda","2.3.3.2.2 CUDA",[19,120211,120212,120213],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[254,120214,120215],{"href":120215,"rel":120216},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[25811],[19,120218,120219,120222],{},[219,120220],{"alt":236,"src":120221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[219,120223],{"alt":236,"src":120224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[19,120226,120227],{},"在下方的网站，选择合适的版本。",[19,120229,120230,120231],{},"WSL2 专属 CUDA 指南：",[254,120232,120233],{"href":120233,"rel":120234},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[25811],[19,120236,120237],{},[68,120238,120239],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[19,120241,120242],{},[219,120243],{"alt":236,"src":120244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[19,120246,120247],{},"挨行敲一遍",[19,120249,120250],{},[219,120251],{"alt":236,"src":120252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[19,120254,120255,120256,120259],{},"敲完后，输入",[23,120257,120258],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[19,120261,120262],{},[219,120263],{"alt":236,"src":120264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[19,120266,120267,120268,120271],{},"（请详看下方教程的",[68,120269,120270],{},"安装CUDA的配置环境来看","如何配置环境）",[24857,120273,120275],{"id":120274},"_23323-cudnn","2.3.3.2.3 cuDNN",[19,120277,120184],{},[19,120279,120280],{},[219,120281],{"alt":236,"src":120282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[23945,120284,120286],{"id":120285},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[19,120288,120289],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[19,120291,120292],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[19,120294,120295],{},[219,120296],{"alt":236,"src":120297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[19,120299,120300],{},"连接WSL2",[19,120302,120303],{},[219,120304],{"alt":236,"src":120305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[19,120307,120308],{},"远程开发成功。",[19,120310,120311],{},[219,120312],{"alt":236,"src":120313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[19,120315,120316],{},[219,120317],{"alt":236,"src":120318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[19,120320,120321],{},[219,120322],{"alt":236,"src":120323},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[23945,120325,120327],{"id":120326},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[19,120329,120330],{},[219,120331],{"alt":236,"src":120332},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[23945,120334,120336],{"id":120335},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[231,120338,120340],{"className":119206,"code":120339,"language":119208,"meta":236,"style":236},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[23,120341,120342,120350,120358,120369,120373],{"__ignoreMap":236},[240,120343,120344,120346,120348],{"class":242,"line":243},[240,120345,26523],{"class":436},[240,120347,119227],{"class":443},[240,120349,28188],{"class":443},[240,120351,120352,120354,120356],{"class":242,"line":250},[240,120353,26523],{"class":436},[240,120355,119227],{"class":443},[240,120357,119243],{"class":443},[240,120359,120360,120362,120364,120366],{"class":242,"line":261},[240,120361,26523],{"class":436},[240,120363,119227],{"class":443},[240,120365,25780],{"class":443},[240,120367,120368],{"class":443}," mesa-utils\n",[240,120370,120371],{"class":242,"line":277},[240,120372,4353],{"emptyLinePlaceholder":2051},[240,120374,120375],{"class":242,"line":294},[240,120376,120377],{"class":246},"#然后重启wsl2即可\n",[2019,120379,120380],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":236,"searchDepth":250,"depth":250,"links":120382},[120383,120384,120389],{"id":119660,"depth":250,"text":119661},{"id":119673,"depth":250,"text":119674,"children":120385},[120386,120387,120388],{"id":119677,"depth":261,"text":119678},{"id":119724,"depth":261,"text":119725},{"id":119785,"depth":261,"text":119786},{"id":119821,"depth":250,"text":119822,"children":120390},[120391,120392,120393],{"id":119825,"depth":261,"text":119826},{"id":119887,"depth":261,"text":119888},{"id":120176,"depth":261,"text":120177},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":119652,"description":2048},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":120400,"title":120401,"body":120402,"description":2048,"extension":2049,"meta":123338,"navigation":2051,"path":123339,"seo":123340,"stem":123341,"__hash__":123342},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":120403,"toc":123310},[120404,120407,120411,120417,120421,120427,120431,120619,120622,120627,120631,120635,120638,120641,120647,120652,120655,120658,120663,120696,120701,120705,120782,120785,120790,120794,120797,120836,120839,120848,120866,120871,120878,120995,121000,121003,121030,121035,121039,121048,121098,121105,121109,121112,121126,121133,121167,121172,121176,121199,121202,121207,121211,121214,121217,121220,121262,121266,121269,121272,121313,121317,121321,121324,121329,121334,121337,121360,121363,121371,121376,121379,121384,121389,121392,121397,121401,121406,121429,121434,121496,121504,121509,121514,121517,121522,121525,121530,121535,121553,121558,121564,121569,121583,121587,121590,121593,121596,121639,121642,121647,121748,121751,121756,121760,121764,121801,121805,121809,121813,121859,121863,121908,121912,121919,121927,121982,121985,122062,122065,122088,122092,122095,122100,122105,122113,122116,122121,122126,122131,122134,122139,122148,122151,122156,122159,122230,122235,122238,122243,122246,122251,122254,122259,122262,122267,122272,122275,122350,122353,122366,122371,122374,122388,122391,122420,122425,122454,122457,122462,122466,122471,122480,122483,122488,122491,122496,122499,122502,122507,122510,122515,122520,122523,122528,122531,122656,122661,122691,122694,122699,122704,122721,122724,122767,122770,122797,122802,122815,122958,122962,122967,122981,122984,123035,123038,123068,123071,123087,123092,123106,123109,123176,123181,123190,123195,123198,123210,123215,123222,123246,123249,123254,123257,123276,123281,123288,123300,123307],[10,120405,120401],{"id":120406},"_3-安装必备配置",[14,120408,120410],{"id":120409},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[231,120412,120415],{"className":120413,"code":120414,"language":7139},[7137],"  打开下方网站（注意，该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",[23,120416,120414],{"__ignoreMap":236},[32,120418,120420],{"id":120419},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[231,120422,120425],{"className":120423,"code":120424,"language":7139},[7137],"  输入以下命令\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",[23,120426,120424],{"__ignoreMap":236},[32,120428,120430],{"id":120429},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[231,120432,120436],{"className":120433,"code":120434,"language":120435,"meta":236,"style":236},"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",[23,120437,120438,120446,120457,120469,120483,120487,120497,120502,120506,120510,120515,120519,120531,120535,120540,120544,120555,120559,120575,120579,120590,120594,120599,120603,120611],{"__ignoreMap":236},[240,120439,120440,120442,120444],{"class":242,"line":243},[240,120441,26523],{"class":436},[240,120443,119227],{"class":443},[240,120445,28188],{"class":443},[240,120447,120448,120450,120452,120454],{"class":242,"line":250},[240,120449,26523],{"class":436},[240,120451,119227],{"class":443},[240,120453,25780],{"class":443},[240,120455,120456],{"class":443}," vim\n",[240,120458,120459,120461,120464,120466],{"class":242,"line":261},[240,120460,26523],{"class":436},[240,120462,120463],{"class":443}," rm",[240,120465,27272],{"class":264},[240,120467,120468],{"class":443}," \u002Fetc\u002Fapt\u002Fsources.list\n",[240,120470,120471,120473,120475,120477,120480],{"class":242,"line":277},[240,120472,26523],{"class":436},[240,120474,120463],{"class":443},[240,120476,27272],{"class":264},[240,120478,120479],{"class":443}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[240,120481,120482],{"class":264},"**\n",[240,120484,120485],{"class":242,"line":294},[240,120486,4353],{"emptyLinePlaceholder":2051},[240,120488,120489,120491,120494],{"class":242,"line":309},[240,120490,26523],{"class":436},[240,120492,120493],{"class":443}," vim",[240,120495,120496],{"class":443}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[240,120498,120499],{"class":242,"line":529},[240,120500,120501],{"class":443},"```\n",[240,120503,120504],{"class":242,"line":549},[240,120505,4353],{"emptyLinePlaceholder":2051},[240,120507,120508],{"class":242,"line":569},[240,120509,4353],{"emptyLinePlaceholder":2051},[240,120511,120512],{"class":242,"line":589},[240,120513,120514],{"class":436},"选择好Ubuntu版本后，复制下方的内容。\n",[240,120516,120517],{"class":242,"line":715},[240,120518,4353],{"emptyLinePlaceholder":2051},[240,120520,120521,120523,120526,120529],{"class":242,"line":727},[240,120522,2331],{"class":288},[240,120524,120525],{"class":443},"[](",[240,120527,120528],{"class":436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[240,120530,2129],{"class":443},[240,120532,120533],{"class":242,"line":1730},[240,120534,4353],{"emptyLinePlaceholder":2051},[240,120536,120537],{"class":242,"line":3582},[240,120538,120539],{"class":436},"粘贴进去\n",[240,120541,120542],{"class":242,"line":3596},[240,120543,4353],{"emptyLinePlaceholder":2051},[240,120545,120546,120548,120550,120553],{"class":242,"line":3601},[240,120547,2331],{"class":288},[240,120549,120525],{"class":443},[240,120551,120552],{"class":436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[240,120554,2129],{"class":443},[240,120556,120557],{"class":242,"line":3607},[240,120558,4353],{"emptyLinePlaceholder":2051},[240,120560,120561,120564,120567,120570,120572],{"class":242,"line":3628},[240,120562,120563],{"class":436},"按一下ESC，然后英文冒号，输入",[240,120565,120566],{"class":443}," `",[240,120568,120569],{"class":436},":wq!",[240,120571,3065],{"class":443},[240,120573,120574],{"class":436},"然后回车\n",[240,120576,120577],{"class":242,"line":3633},[240,120578,4353],{"emptyLinePlaceholder":2051},[240,120580,120581,120583,120585,120588],{"class":242,"line":3647},[240,120582,2331],{"class":288},[240,120584,120525],{"class":443},[240,120586,120587],{"class":436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[240,120589,2129],{"class":443},[240,120591,120592],{"class":242,"line":3652},[240,120593,4353],{"emptyLinePlaceholder":2051},[240,120595,120596],{"class":242,"line":3681},[240,120597,120598],{"class":436},"输入以下命令\n",[240,120600,120601],{"class":242,"line":3686},[240,120602,4353],{"emptyLinePlaceholder":2051},[240,120604,120605,120608],{"class":242,"line":3703},[240,120606,120607],{"class":443},"```",[240,120609,120610],{"class":436},"Bash\n",[240,120612,120613,120615,120617],{"class":242,"line":3708},[240,120614,26523],{"class":436},[240,120616,119227],{"class":443},[240,120618,28188],{"class":443},[19,120620,120621],{},"这里被替换成对应学校则成功",[19,120623,120624],{},[219,120625],{"alt":236,"src":120626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[14,120628,120630],{"id":120629},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[32,120632,120634],{"id":120633},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[19,120636,120637],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[19,120639,120640],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[19,120642,120643],{},[254,120644,120645],{"href":120645,"rel":120646},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[25811],[19,120648,120649],{},[219,120650],{"alt":236,"src":120651},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[19,120653,120654],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[19,120656,120657],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[19,120659,120660],{},[219,120661],{"alt":236,"src":120662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[231,120664,120666],{"className":119206,"code":120665,"language":119208,"meta":236,"style":236},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[23,120667,120668,120673,120680,120685],{"__ignoreMap":236},[240,120669,120670],{"class":242,"line":243},[240,120671,120672],{"class":246},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[240,120674,120675,120677],{"class":242,"line":250},[240,120676,103187],{"class":264},[240,120678,120679],{"class":443}," ~\u002FDownloads\n",[240,120681,120682],{"class":242,"line":261},[240,120683,120684],{"class":246},"#下方chrome安装包名不一定是这个，根据名字来看\n",[240,120686,120687,120689,120691,120693],{"class":242,"line":277},[240,120688,26523],{"class":436},[240,120690,119227],{"class":443},[240,120692,25780],{"class":443},[240,120694,120695],{"class":443}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[19,120697,120698],{},[219,120699],{"alt":236,"src":120700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[32,120702,120704],{"id":120703},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[231,120706,120708],{"className":119206,"code":120707,"language":119208,"meta":236,"style":236},"# 老版\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",[23,120709,120710,120715,120723,120734,120739,120743,120748,120758,120766,120777],{"__ignoreMap":236},[240,120711,120712],{"class":242,"line":243},[240,120713,120714],{"class":246},"# 老版\n",[240,120716,120717,120719,120721],{"class":242,"line":250},[240,120718,26523],{"class":436},[240,120720,119227],{"class":443},[240,120722,28188],{"class":443},[240,120724,120725,120727,120729,120731],{"class":242,"line":261},[240,120726,26523],{"class":436},[240,120728,119227],{"class":443},[240,120730,25780],{"class":443},[240,120732,120733],{"class":443}," neofetch\n",[240,120735,120736],{"class":242,"line":277},[240,120737,120738],{"class":436},"neofetch\n",[240,120740,120741],{"class":242,"line":294},[240,120742,4353],{"emptyLinePlaceholder":2051},[240,120744,120745],{"class":242,"line":309},[240,120746,120747],{"class":246},"# 新版\n",[240,120749,120750,120752,120755],{"class":242,"line":529},[240,120751,26523],{"class":436},[240,120753,120754],{"class":443}," add-apt-repository",[240,120756,120757],{"class":443}," ppa:zhangsongcui3371\u002Ffastfetch\n",[240,120759,120760,120762,120764],{"class":242,"line":549},[240,120761,26523],{"class":436},[240,120763,119227],{"class":443},[240,120765,28188],{"class":443},[240,120767,120768,120770,120772,120774],{"class":242,"line":569},[240,120769,26523],{"class":436},[240,120771,119227],{"class":443},[240,120773,25780],{"class":443},[240,120775,120776],{"class":443}," fastfetch\n",[240,120778,120779],{"class":242,"line":589},[240,120780,120781],{"class":436},"fastfetch\n",[19,120783,120784],{},"这里显示，一共有3162个debian的程序，7个snap程序",[19,120786,120787],{},[219,120788],{"alt":236,"src":120789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[32,120791,120793],{"id":120792},"_323-移除snap应用","3.2.3 移除snap应用",[19,120795,120796],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[231,120798,120800],{"className":119206,"code":120799,"language":119208,"meta":236,"style":236},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[23,120801,120802,120814,120825],{"__ignoreMap":236},[240,120803,120804,120806,120808,120811],{"class":242,"line":243},[240,120805,26523],{"class":436},[240,120807,28459],{"class":443},[240,120809,120810],{"class":443}," disable",[240,120812,120813],{"class":443}," snapd.service\n",[240,120815,120816,120818,120820,120822],{"class":242,"line":250},[240,120817,26523],{"class":436},[240,120819,28459],{"class":443},[240,120821,120810],{"class":443},[240,120823,120824],{"class":443}," snapd.socket\n",[240,120826,120827,120829,120831,120833],{"class":242,"line":261},[240,120828,26523],{"class":436},[240,120830,28459],{"class":443},[240,120832,120810],{"class":443},[240,120834,120835],{"class":443}," snapd.seeded.service\n",[19,120837,120838],{},"然后查看snap应用列表",[19,120840,120841,120842,120847],{},"根据你安装的选择不同（最小安装或普通安装），有",[254,120843,120846],{"href":120844,"rel":120845},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[25811],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[231,120849,120851],{"className":119206,"code":120850,"language":119208,"meta":236,"style":236},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[23,120852,120853,120858],{"__ignoreMap":236},[240,120854,120855],{"class":242,"line":243},[240,120856,120857],{"class":246},"# 查询当前系统上snap安装了哪些app\n",[240,120859,120860,120863],{"class":242,"line":250},[240,120861,120862],{"class":436},"snap",[240,120864,120865],{"class":443}," list\n",[19,120867,120868],{},[219,120869],{"alt":236,"src":120870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[19,120872,120873,120874,120877],{},"卸载掉图中所有应用，按照 ",[68,120875,120876],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[231,120879,120881],{"className":119206,"code":120880,"language":119208,"meta":236,"style":236},"#移除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",[23,120882,120883,120888,120900,120905,120916,120921,120932,120937,120948,120953,120957,120962,120973,120984],{"__ignoreMap":236},[240,120884,120885],{"class":242,"line":243},[240,120886,120887],{"class":246},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[240,120889,120890,120892,120895,120897],{"class":242,"line":250},[240,120891,26523],{"class":436},[240,120893,120894],{"class":443}," snap",[240,120896,28025],{"class":443},[240,120898,120899],{"class":443}," snap-store\n",[240,120901,120902],{"class":242,"line":261},[240,120903,120904],{"class":246},"#移除firefox浏览器\n",[240,120906,120907,120909,120911,120913],{"class":242,"line":277},[240,120908,26523],{"class":436},[240,120910,120894],{"class":443},[240,120912,28025],{"class":443},[240,120914,120915],{"class":443}," firefox\n",[240,120917,120918],{"class":242,"line":294},[240,120919,120920],{"class":246},"#移除gnome-42-2204\n",[240,120922,120923,120925,120927,120929],{"class":242,"line":309},[240,120924,26523],{"class":436},[240,120926,120894],{"class":443},[240,120928,28025],{"class":443},[240,120930,120931],{"class":443}," gnome-42-2204\n",[240,120933,120934],{"class":242,"line":529},[240,120935,120936],{"class":246},"#移除gtk-common-themes\n",[240,120938,120939,120941,120943,120945],{"class":242,"line":549},[240,120940,26523],{"class":436},[240,120942,120894],{"class":443},[240,120944,28025],{"class":443},[240,120946,120947],{"class":443}," gtk-common-themes\n",[240,120949,120950],{"class":242,"line":569},[240,120951,120952],{"class":246},"#移除其它...\n",[240,120954,120955],{"class":242,"line":589},[240,120956,4627],{"class":257},[240,120958,120959],{"class":242,"line":715},[240,120960,120961],{"class":246},"#移除core22,bare以及snapd\n",[240,120963,120964,120966,120968,120970],{"class":242,"line":727},[240,120965,26523],{"class":436},[240,120967,120894],{"class":443},[240,120969,28025],{"class":443},[240,120971,120972],{"class":443}," core22\n",[240,120974,120975,120977,120979,120981],{"class":242,"line":1730},[240,120976,26523],{"class":436},[240,120978,120894],{"class":443},[240,120980,28025],{"class":443},[240,120982,120983],{"class":443}," bare\n",[240,120985,120986,120988,120990,120992],{"class":242,"line":3582},[240,120987,26523],{"class":436},[240,120989,120894],{"class":443},[240,120991,28025],{"class":443},[240,120993,120994],{"class":443}," snapd\n",[19,120996,120997],{},[219,120998],{"alt":236,"src":120999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[19,121001,121002],{},"输入以下命令查看是否还有snap包",[231,121004,121006],{"className":119206,"code":121005,"language":119208,"meta":236,"style":236},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[23,121007,121008,121014,121018,121022,121026],{"__ignoreMap":236},[240,121009,121010,121012],{"class":242,"line":243},[240,121011,120862],{"class":436},[240,121013,120865],{"class":443},[240,121015,121016],{"class":242,"line":250},[240,121017,120714],{"class":246},[240,121019,121020],{"class":242,"line":261},[240,121021,120738],{"class":436},[240,121023,121024],{"class":242,"line":277},[240,121025,120747],{"class":246},[240,121027,121028],{"class":242,"line":294},[240,121029,120781],{"class":436},[19,121031,121032],{},[219,121033],{"alt":236,"src":121034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[32,121036,121038],{"id":121037},"_324-移除snap","3.2.4 移除snap",[19,121040,121041,121042,121047],{},"在删除掉",[254,121043,121046],{"href":121044,"rel":121045},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[25811],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[231,121049,121051],{"className":119206,"code":121050,"language":119208,"meta":236,"style":236}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[23,121052,121053,121058,121071,121076,121087],{"__ignoreMap":236},[240,121054,121055],{"class":242,"line":243},[240,121056,121057],{"class":246}," #使用apt移除掉snap\n",[240,121059,121060,121062,121064,121066,121069],{"class":242,"line":250},[240,121061,26523],{"class":436},[240,121063,119227],{"class":443},[240,121065,119535],{"class":443},[240,121067,121068],{"class":264}," --purge",[240,121070,120994],{"class":443},[240,121072,121073],{"class":242,"line":261},[240,121074,121075],{"class":246},"#移除snapd的一些目录\n",[240,121077,121078,121080,121082,121084],{"class":242,"line":277},[240,121079,26523],{"class":436},[240,121081,120463],{"class":443},[240,121083,27272],{"class":264},[240,121085,121086],{"class":443}," \u002Fvar\u002Fcache\u002Fsnapd\n",[240,121088,121089,121091,121093,121095],{"class":242,"line":294},[240,121090,26523],{"class":436},[240,121092,120463],{"class":443},[240,121094,27272],{"class":264},[240,121096,121097],{"class":443}," ~\u002Fsnap\n",[19,121099,121100,121101,121104],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[23,121102,121103],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[32,121106,121108],{"id":121107},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[19,121110,121111],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[231,121113,121115],{"className":119206,"code":121114,"language":119208,"meta":236,"style":236},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[23,121116,121117],{"__ignoreMap":236},[240,121118,121119,121121,121123],{"class":242,"line":243},[240,121120,26523],{"class":436},[240,121122,120493],{"class":443},[240,121124,121125],{"class":443}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[19,121127,121128,121129,121132],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[23,121130,121131],{},":wq"," 回车",[231,121134,121136],{"className":119206,"code":121135,"language":119208,"meta":236,"style":236},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[23,121137,121138,121145,121159],{"__ignoreMap":236},[240,121139,121140,121143],{"class":242,"line":243},[240,121141,121142],{"class":436},"Package:",[240,121144,120994],{"class":443},[240,121146,121147,121150,121153,121156],{"class":242,"line":250},[240,121148,121149],{"class":436},"Pin:",[240,121151,121152],{"class":443}," release",[240,121154,121155],{"class":443}," a=",[240,121157,121158],{"class":264},"*\n",[240,121160,121161,121164],{"class":242,"line":261},[240,121162,121163],{"class":436},"Pin-Priority:",[240,121165,121166],{"class":264}," -10\n",[19,121168,121169],{},[219,121170],{"alt":236,"src":121171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[32,121173,121175],{"id":121174},"_326-测试是否成功","3.2.6 测试是否成功",[231,121177,121179],{"className":119206,"code":121178,"language":119208,"meta":236,"style":236},"sudo apt update\nsudo apt install firefox\n",[23,121180,121181,121189],{"__ignoreMap":236},[240,121182,121183,121185,121187],{"class":242,"line":243},[240,121184,26523],{"class":436},[240,121186,119227],{"class":443},[240,121188,28188],{"class":443},[240,121190,121191,121193,121195,121197],{"class":242,"line":250},[240,121192,26523],{"class":436},[240,121194,119227],{"class":443},[240,121196,25780],{"class":443},[240,121198,120915],{"class":443},[19,121200,121201],{},"这里提示snapd无法被安装，就证明成功了",[19,121203,121204],{},[219,121205],{"alt":236,"src":121206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[32,121208,121210],{"id":121209},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[19,121212,121213],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[19,121215,121216],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[19,121218,121219],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[231,121221,121223],{"className":119206,"code":121222,"language":119208,"meta":236,"style":236},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[23,121224,121225,121230,121239,121244,121252],{"__ignoreMap":236},[240,121226,121227],{"class":242,"line":243},[240,121228,121229],{"class":246},"# 添加Mozilla提供的源\n",[240,121231,121232,121234,121236],{"class":242,"line":250},[240,121233,26523],{"class":436},[240,121235,120754],{"class":443},[240,121237,121238],{"class":443}," ppa:mozillateam\u002Fppa\n",[240,121240,121241],{"class":242,"line":261},[240,121242,121243],{"class":246},"# 安装Firefox\n",[240,121245,121246,121248,121250],{"class":242,"line":277},[240,121247,26523],{"class":436},[240,121249,119227],{"class":443},[240,121251,28188],{"class":443},[240,121253,121254,121256,121258,121260],{"class":242,"line":294},[240,121255,26523],{"class":436},[240,121257,119227],{"class":443},[240,121259,25780],{"class":443},[240,121261,120915],{"class":443},[32,121263,121265],{"id":121264},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[19,121267,121268],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[19,121270,121271],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[231,121273,121275],{"className":119206,"code":121274,"language":119208,"meta":236,"style":236},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[23,121276,121277,121282,121292,121300,121304],{"__ignoreMap":236},[240,121278,121279],{"class":242,"line":243},[240,121280,121281],{"class":246},"#删掉禁止安装snap的配置文件\n",[240,121283,121284,121286,121288,121290],{"class":242,"line":250},[240,121285,26523],{"class":436},[240,121287,120463],{"class":443},[240,121289,27272],{"class":264},[240,121291,121125],{"class":443},[240,121293,121294,121296,121298],{"class":242,"line":261},[240,121295,26523],{"class":436},[240,121297,119227],{"class":443},[240,121299,28188],{"class":443},[240,121301,121302],{"class":242,"line":277},[240,121303,4353],{"emptyLinePlaceholder":2051},[240,121305,121306,121308,121310],{"class":242,"line":294},[240,121307,26523],{"class":436},[240,121309,119227],{"class":443},[240,121311,121312],{"class":443}," dist-update\n",[14,121314,121316],{"id":121315},"_33-中文输入法","3.3 中文输入法",[32,121318,121320],{"id":121319},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[19,121322,121323],{},"官网下载搜狗输入法",[19,121325,121326],{},[219,121327],{"alt":236,"src":121328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[19,121330,121331],{},[219,121332],{"alt":236,"src":121333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[19,121335,121336],{},"打开终端输入如下",[231,121338,121340],{"className":119206,"code":121339,"language":119208,"meta":236,"style":236},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[23,121341,121342,121349],{"__ignoreMap":236},[240,121343,121344,121346],{"class":242,"line":243},[240,121345,103187],{"class":264},[240,121347,121348],{"class":443}," ~\u002FDownloads\u002F\n",[240,121350,121351,121353,121355,121357],{"class":242,"line":250},[240,121352,26523],{"class":436},[240,121354,119227],{"class":443},[240,121356,25780],{"class":443},[240,121358,121359],{"class":443}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[19,121361,121362],{},"打开Fcitx",[19,121364,121365,121368],{},[219,121366],{"alt":236,"src":121367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[219,121369],{"alt":236,"src":121370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[19,121372,121373],{},[219,121374],{"alt":236,"src":121375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[19,121377,121378],{},"添加搜狗输入法",[19,121380,121381],{},[219,121382],{"alt":236,"src":121383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[19,121385,121386],{},[219,121387],{"alt":236,"src":121388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[19,121390,121391],{},"将搜狗输入法设置为唯一输入法",[19,121393,121394],{},[219,121395],{"alt":236,"src":121396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[32,121398,121400],{"id":121399},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[1826,121402,121403],{},[1829,121404,121405],{},"卸载旧输入法",[231,121407,121409],{"className":120433,"code":121408,"language":120435,"meta":236,"style":236},"sudo apt purge fcitx* ibus*\n",[23,121410,121411],{"__ignoreMap":236},[240,121412,121413,121415,121417,121419,121422,121424,121427],{"class":242,"line":243},[240,121414,26523],{"class":436},[240,121416,119227],{"class":443},[240,121418,119568],{"class":443},[240,121420,121421],{"class":443}," fcitx",[240,121423,2554],{"class":264},[240,121425,121426],{"class":443}," ibus",[240,121428,121158],{"class":264},[1826,121430,121431],{"start":250},[1829,121432,121433],{},"安装Fcitx5",[231,121435,121437],{"className":119206,"code":121436,"language":119208,"meta":236,"style":236},"# 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",[23,121438,121439,121444,121458,121462,121467,121476,121484],{"__ignoreMap":236},[240,121440,121441],{"class":242,"line":243},[240,121442,121443],{"class":246},"# Ubuntu22.04及以上、Debian12及以上\n",[240,121445,121446,121448,121450,121452,121455],{"class":242,"line":250},[240,121447,26523],{"class":436},[240,121449,119227],{"class":443},[240,121451,25780],{"class":443},[240,121453,121454],{"class":443}," fcitx5",[240,121456,121457],{"class":443}," fcitx5-chinese-addons\n",[240,121459,121460],{"class":242,"line":261},[240,121461,4353],{"emptyLinePlaceholder":2051},[240,121463,121464],{"class":242,"line":277},[240,121465,121466],{"class":246},"# Ubuntu20.04\n",[240,121468,121469,121471,121473],{"class":242,"line":294},[240,121470,26523],{"class":436},[240,121472,120754],{"class":443},[240,121474,121475],{"class":443}," ppa:zhsj\u002Ffcitx5\n",[240,121477,121478,121480,121482],{"class":242,"line":309},[240,121479,26523],{"class":436},[240,121481,119227],{"class":443},[240,121483,28188],{"class":443},[240,121485,121486,121488,121490,121492,121494],{"class":242,"line":529},[240,121487,26523],{"class":436},[240,121489,119227],{"class":443},[240,121491,25780],{"class":443},[240,121493,121454],{"class":443},[240,121495,121457],{"class":443},[1826,121497,121498,121501],{"start":261},[1829,121499,121500],{},"Reboot System",[1829,121502,121503],{},"启动Fcitx5",[19,121505,121506],{},[219,121507],{"alt":236,"src":121508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[1826,121510,121511],{"start":294},[1829,121512,121513],{},"修改一些设置",[19,121515,121516],{},"将Pinyin和Keyboard - English US加入到左边。",[19,121518,121519],{},[219,121520],{"alt":236,"src":121521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[19,121523,121524],{},"添加快捷键以便于更好切换中英文",[19,121526,121527],{},[219,121528],{"alt":236,"src":121529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[1826,121531,121532],{"start":309},[1829,121533,121534],{},"重启",[231,121536,121538],{"className":120433,"code":121537,"language":120435,"meta":236,"style":236},"sudo shutdown -r now\n",[23,121539,121540],{"__ignoreMap":236},[240,121541,121542,121544,121547,121550],{"class":242,"line":243},[240,121543,26523],{"class":436},[240,121545,121546],{"class":443}," shutdown",[240,121548,121549],{"class":264}," -r",[240,121551,121552],{"class":443}," now\n",[1826,121554,121555],{"start":529},[1829,121556,121557],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[19,121559,121560],{},[254,121561,121562],{"href":121562,"rel":121563},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[25811],[1826,121565,121566],{"start":549},[1829,121567,121568],{},"再重启",[231,121570,121571],{"className":120433,"code":121537,"language":120435,"meta":236,"style":236},[23,121572,121573],{"__ignoreMap":236},[240,121574,121575,121577,121579,121581],{"class":242,"line":243},[240,121576,26523],{"class":436},[240,121578,121546],{"class":443},[240,121580,121549],{"class":264},[240,121582,121552],{"class":443},[14,121584,121586],{"id":121585},"_34-pip3源替换","3.4 pip3源替换",[19,121588,121589],{},"非Debian系发行版需要做。",[19,121591,121592],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[19,121594,121595],{},"使用dnf的系统也可能不用做。",[231,121597,121599],{"className":119206,"code":121598,"language":119208,"meta":236,"style":236},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[23,121600,121601,121606,121613,121618,121623],{"__ignoreMap":236},[240,121602,121603],{"class":242,"line":243},[240,121604,121605],{"class":246},"# 检查是否已安装 pip\n",[240,121607,121608,121611],{"class":242,"line":250},[240,121609,121610],{"class":436},"pip3",[240,121612,28239],{"class":264},[240,121614,121615],{"class":242,"line":261},[240,121616,121617],{"class":246},"# 如果未安装，先安装 pip3（见下方）\n",[240,121619,121620],{"class":242,"line":277},[240,121621,121622],{"class":246},"# 配置 pip 使用清华源\n",[240,121624,121625,121627,121630,121633,121636],{"class":242,"line":294},[240,121626,121610],{"class":436},[240,121628,121629],{"class":443}," config",[240,121631,121632],{"class":443}," set",[240,121634,121635],{"class":443}," global.index-url",[240,121637,121638],{"class":443}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[19,121640,121641],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[19,121643,121644],{},[219,121645],{"alt":236,"src":121646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[231,121648,121650],{"className":119206,"code":121649,"language":119208,"meta":236,"style":236},"#安装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",[23,121651,121652,121657,121665,121676,121680,121685,121704,121708,121713,121725,121729,121734],{"__ignoreMap":236},[240,121653,121654],{"class":242,"line":243},[240,121655,121656],{"class":246},"#安装pip3\n",[240,121658,121659,121661,121663],{"class":242,"line":250},[240,121660,26523],{"class":436},[240,121662,119227],{"class":443},[240,121664,28188],{"class":443},[240,121666,121667,121669,121671,121673],{"class":242,"line":261},[240,121668,26523],{"class":436},[240,121670,28022],{"class":443},[240,121672,25780],{"class":443},[240,121674,121675],{"class":443}," python3-pip\n",[240,121677,121678],{"class":242,"line":277},[240,121679,4353],{"emptyLinePlaceholder":2051},[240,121681,121682],{"class":242,"line":294},[240,121683,121684],{"class":246},"#更新pip3\n",[240,121686,121687,121689,121691,121693,121695,121697,121700,121702],{"class":242,"line":309},[240,121688,102790],{"class":436},[240,121690,102793],{"class":264},[240,121692,102816],{"class":443},[240,121694,25780],{"class":443},[240,121696,28376],{"class":264},[240,121698,121699],{"class":443}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[240,121701,102821],{"class":264},[240,121703,102824],{"class":443},[240,121705,121706],{"class":242,"line":529},[240,121707,4353],{"emptyLinePlaceholder":2051},[240,121709,121710],{"class":242,"line":549},[240,121711,121712],{"class":246},"#设置pip源为清华源\n",[240,121714,121715,121717,121719,121721,121723],{"class":242,"line":569},[240,121716,121610],{"class":436},[240,121718,121629],{"class":443},[240,121720,121632],{"class":443},[240,121722,121635],{"class":443},[240,121724,121638],{"class":443},[240,121726,121727],{"class":242,"line":589},[240,121728,4353],{"emptyLinePlaceholder":2051},[240,121730,121731],{"class":242,"line":715},[240,121732,121733],{"class":246},"#测试\n",[240,121735,121736,121738,121740,121742,121744,121746],{"class":242,"line":727},[240,121737,102790],{"class":436},[240,121739,102793],{"class":264},[240,121741,102816],{"class":443},[240,121743,25780],{"class":443},[240,121745,102821],{"class":264},[240,121747,102824],{"class":443},[19,121749,121750],{},"成功的话，会看到Looking后面是tsinghua字样。",[19,121752,121753],{},[219,121754],{"alt":236,"src":121755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[14,121757,121759],{"id":121758},"_35-显卡驱动安装","3.5 显卡驱动安装",[32,121761,121763],{"id":121762},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[231,121765,121767],{"className":120433,"code":121766,"language":120435,"meta":236,"style":236},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[23,121768,121769,121774,121789,121794],{"__ignoreMap":236},[240,121770,121771],{"class":242,"line":243},[240,121772,121773],{"class":246},"# 如果是使用apt安装的驱动\n",[240,121775,121776,121778,121780,121782,121784,121787],{"class":242,"line":250},[240,121777,26523],{"class":436},[240,121779,28022],{"class":443},[240,121781,28025],{"class":443},[240,121783,121068],{"class":264},[240,121785,121786],{"class":443}," nvidia",[240,121788,121158],{"class":264},[240,121790,121791],{"class":242,"line":261},[240,121792,121793],{"class":246},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[240,121795,121796,121798],{"class":242,"line":277},[240,121797,26523],{"class":436},[240,121799,121800],{"class":443}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[32,121802,121804],{"id":121803},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[23945,121806,121808],{"id":121807},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[24857,121810,121812],{"id":121811},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[231,121814,121816],{"className":120433,"code":121815,"language":120435,"meta":236,"style":236},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[23,121817,121818,121823,121834,121839,121849,121854],{"__ignoreMap":236},[240,121819,121820],{"class":242,"line":243},[240,121821,121822],{"class":246},"# 安装英伟达驱动\n",[240,121824,121825,121827,121829,121831],{"class":242,"line":250},[240,121826,26523],{"class":436},[240,121828,119227],{"class":443},[240,121830,25780],{"class":443},[240,121832,121833],{"class":443}," nvidia-driver-版本号\n",[240,121835,121836],{"class":242,"line":261},[240,121837,121838],{"class":246},"# 重启 \n",[240,121840,121841,121843,121845,121847],{"class":242,"line":277},[240,121842,26523],{"class":436},[240,121844,121546],{"class":443},[240,121846,121549],{"class":264},[240,121848,121552],{"class":443},[240,121850,121851],{"class":242,"line":294},[240,121852,121853],{"class":246},"# 检查驱动是否安装成功\n",[240,121855,121856],{"class":242,"line":309},[240,121857,121858],{"class":436},"nvidia-smi\n",[24857,121860,121862],{"id":121861},"_35212-debian","3.5.2.1.2 Debian",[231,121864,121866],{"className":120433,"code":121865,"language":120435,"meta":236,"style":236},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[23,121867,121868,121872,121886,121890,121900,121904],{"__ignoreMap":236},[240,121869,121870],{"class":242,"line":243},[240,121871,121822],{"class":246},[240,121873,121874,121876,121878,121880,121883],{"class":242,"line":250},[240,121875,26523],{"class":436},[240,121877,119227],{"class":443},[240,121879,25780],{"class":443},[240,121881,121882],{"class":443}," nvidia-driver",[240,121884,121885],{"class":443}," nvidia-settings\n",[240,121887,121888],{"class":242,"line":261},[240,121889,121838],{"class":246},[240,121891,121892,121894,121896,121898],{"class":242,"line":277},[240,121893,26523],{"class":436},[240,121895,121546],{"class":443},[240,121897,121549],{"class":264},[240,121899,121552],{"class":443},[240,121901,121902],{"class":242,"line":294},[240,121903,121853],{"class":246},[240,121905,121906],{"class":242,"line":309},[240,121907,121858],{"class":436},[23945,121909,121911],{"id":121910},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[19,121913,121914,121915,121918],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[68,121916,121917],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[19,121920,121921,121922],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[25500,121923,121924],{},[68,121925,121926],{},"（也可以不禁用桌面环境，直接进行下一步。）",[231,121928,121930],{"className":120433,"code":121929,"language":120435,"meta":236,"style":236},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[23,121931,121932,121937,121947,121952,121965,121970],{"__ignoreMap":236},[240,121933,121934],{"class":242,"line":243},[240,121935,121936],{"class":246},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[240,121938,121939,121941,121944],{"class":242,"line":250},[240,121940,26523],{"class":436},[240,121942,121943],{"class":443}," telinit",[240,121945,121946],{"class":264}," 3\n",[240,121948,121949],{"class":242,"line":261},[240,121950,121951],{"class":246},"# ubuntu 使用下方命令\n",[240,121953,121954,121956,121959,121962],{"class":242,"line":277},[240,121955,26523],{"class":436},[240,121957,121958],{"class":443}," service",[240,121960,121961],{"class":443}," lightdm",[240,121963,121964],{"class":443}," stop\n",[240,121966,121967],{"class":242,"line":294},[240,121968,121969],{"class":246},"# Fedora 使用下方命令\n",[240,121971,121972,121974,121976,121979],{"class":242,"line":309},[240,121973,26523],{"class":436},[240,121975,28459],{"class":443},[240,121977,121978],{"class":443}," isolate",[240,121980,121981],{"class":443}," multi-user.target\n",[19,121983,121984],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[231,121986,121988],{"className":120433,"code":121987,"language":120435,"meta":236,"style":236},"# 编译环境+准备工作\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",[23,121989,121990,121995,122006,122011,122018,122023,122035,122040,122047,122052],{"__ignoreMap":236},[240,121991,121992],{"class":242,"line":243},[240,121993,121994],{"class":246},"# 编译环境+准备工作\n",[240,121996,121997,121999,122001,122003],{"class":242,"line":250},[240,121998,26523],{"class":436},[240,122000,119227],{"class":443},[240,122002,25780],{"class":443},[240,122004,122005],{"class":443}," build-essential\n",[240,122007,122008],{"class":242,"line":261},[240,122009,122010],{"class":246},"# 进入到.run目录中\n",[240,122012,122013,122015],{"class":242,"line":277},[240,122014,103187],{"class":264},[240,122016,122017],{"class":443}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[240,122019,122020],{"class":242,"line":294},[240,122021,122022],{"class":246},"# 给驱动文件增加可执行权限：\n",[240,122024,122025,122027,122029,122032],{"class":242,"line":309},[240,122026,26523],{"class":436},[240,122028,26526],{"class":443},[240,122030,122031],{"class":443}," a+x",[240,122033,122034],{"class":443}," NVIDIA-Linux-x86_64-550.107.02.run\n",[240,122036,122037],{"class":242,"line":529},[240,122038,122039],{"class":246},"# 然后执行安装：\n",[240,122041,122042,122044],{"class":242,"line":549},[240,122043,26523],{"class":436},[240,122045,122046],{"class":443}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[240,122048,122049],{"class":242,"line":569},[240,122050,122051],{"class":246},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[240,122053,122054,122056,122059],{"class":242,"line":589},[240,122055,26523],{"class":436},[240,122057,122058],{"class":443}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[240,122060,122061],{"class":264},"  --no-opengl-files\n",[19,122063,122064],{},"安装完毕重启即可",[231,122066,122068],{"className":120433,"code":122067,"language":120435,"meta":236,"style":236},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[23,122069,122070,122074,122080,122084],{"__ignoreMap":236},[240,122071,122072],{"class":242,"line":243},[240,122073,121838],{"class":246},[240,122075,122076,122078],{"class":242,"line":250},[240,122077,26523],{"class":436},[240,122079,28593],{"class":443},[240,122081,122082],{"class":242,"line":261},[240,122083,121853],{"class":246},[240,122085,122086],{"class":242,"line":277},[240,122087,121858],{"class":436},[32,122089,122091],{"id":122090},"_353-安装cuda","3.5.3 安装CUDA",[19,122093,122094],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[19,122096,122097],{},[219,122098],{"alt":236,"src":122099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[1826,122101,122102],{},[1829,122103,122104],{},"先查看显卡驱动所支持的最高CUDA版本",[231,122106,122107],{"className":120433,"code":121858,"language":120435,"meta":236,"style":236},[23,122108,122109],{"__ignoreMap":236},[240,122110,122111],{"class":242,"line":243},[240,122112,121858],{"class":436},[19,122114,122115],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[19,122117,122118],{},[219,122119],{"alt":236,"src":122120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[1826,122122,122123],{"start":250},[1829,122124,122125],{},"下载CUDA并安装CUDA",[19,122127,120212,122128],{},[254,122129,120215],{"href":120215,"rel":122130},[25811],[19,122132,122133],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[19,122135,122136],{},[219,122137],{"alt":236,"src":122138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[19,122140,122141,122142,122147],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[254,122143,122146],{"href":122144,"rel":122145},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[25811],"Vinci机器人队单片机教程","）",[19,122149,122150],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[19,122152,122153],{},[219,122154],{"alt":236,"src":122155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[19,122157,122158],{},"将最下方框框里的命令敲入终端",[231,122160,122162],{"className":120433,"code":122161,"language":120435,"meta":236,"style":236},"# 在当前文件夹下创建一个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",[23,122163,122164,122169,122178,122183,122190,122195,122203,122208,122219,122224],{"__ignoreMap":236},[240,122165,122166],{"class":242,"line":243},[240,122167,122168],{"class":246},"# 在当前文件夹下创建一个ttt的子文件夹\n",[240,122170,122171,122173,122175],{"class":242,"line":250},[240,122172,103177],{"class":436},[240,122174,31162],{"class":264},[240,122176,122177],{"class":443}," .\u002Fttt\n",[240,122179,122180],{"class":242,"line":261},[240,122181,122182],{"class":246},"# 进入ttt文件夹\n",[240,122184,122185,122187],{"class":242,"line":277},[240,122186,103187],{"class":264},[240,122188,122189],{"class":443}," ttt\n",[240,122191,122192],{"class":242,"line":294},[240,122193,122194],{"class":246},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[240,122196,122197,122200],{"class":242,"line":309},[240,122198,122199],{"class":436},"wget",[240,122201,122202],{"class":443}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[240,122204,122205],{"class":242,"line":529},[240,122206,122207],{"class":246},"# 给予权限\n",[240,122209,122210,122212,122214,122216],{"class":242,"line":549},[240,122211,26523],{"class":436},[240,122213,26526],{"class":443},[240,122215,122031],{"class":443},[240,122217,122218],{"class":443}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[240,122220,122221],{"class":242,"line":569},[240,122222,122223],{"class":246},"# 运行脚本\n",[240,122225,122226,122228],{"class":242,"line":589},[240,122227,26523],{"class":436},[240,122229,122218],{"class":443},[19,122231,122232],{},[219,122233],{"alt":236,"src":122234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[19,122236,122237],{},"正在安装中：",[19,122239,122240],{},[219,122241],{"alt":236,"src":122242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[19,122244,122245],{},"输入accept接受即可",[19,122247,122248],{},[219,122249],{"alt":236,"src":122250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[19,122252,122253],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[19,122255,122256],{},[219,122257],{"alt":236,"src":122258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[19,122260,122261],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[19,122263,122264],{},[219,122265],{"alt":236,"src":122266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[1826,122268,122269],{"start":261},[1829,122270,122271],{},"配置环境",[19,122273,122274],{},"根据上方确认一下路径，比如我上面红色框起来的为",[231,122276,122278],{"className":120433,"code":122277,"language":120435,"meta":236,"style":236},"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",[23,122279,122280,122296,122311],{"__ignoreMap":236},[240,122281,122282,122285,122288,122291,122294],{"class":242,"line":243},[240,122283,122284],{"class":436},"Please",[240,122286,122287],{"class":443}," make",[240,122289,122290],{"class":443}," sure",[240,122292,122293],{"class":443}," that",[240,122295,4627],{"class":257},[240,122297,122298,122300,122303,122306,122309],{"class":242,"line":250},[240,122299,54207],{"class":436},[240,122301,122302],{"class":443},"   PATH",[240,122304,122305],{"class":443}," includes",[240,122307,122308],{"class":443}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[240,122310,4627],{"class":257},[240,122312,122313,122315,122318,122320,122323,122326,122328,122331,122334,122337,122340,122342,122345,122347],{"class":242,"line":261},[240,122314,54207],{"class":436},[240,122316,122317],{"class":443},"   LD_LIBRARY_PATH",[240,122319,122305],{"class":443},[240,122321,122322],{"class":443}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[240,122324,122325],{"class":443}," or,",[240,122327,7161],{"class":443},[240,122329,122330],{"class":443}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[240,122332,122333],{"class":443}," to",[240,122335,122336],{"class":443}," \u002Fetc\u002Fld.so.conf",[240,122338,122339],{"class":443}," and",[240,122341,29176],{"class":443},[240,122343,122344],{"class":443}," ldconfig",[240,122346,66527],{"class":443},[240,122348,122349],{"class":443}," root\n",[19,122351,122352],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[231,122354,122356],{"className":120433,"code":122355,"language":120435,"meta":236,"style":236},"which nvcc\n",[23,122357,122358],{"__ignoreMap":236},[240,122359,122360,122363],{"class":242,"line":243},[240,122361,122362],{"class":264},"which",[240,122364,122365],{"class":443}," nvcc\n",[19,122367,122368],{},[219,122369],{"alt":236,"src":122370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[19,122372,122373],{},"所以我进行以下操作：",[231,122375,122377],{"className":120433,"code":122376,"language":120435,"meta":236,"style":236},"sudo vim ~\u002F.bashrc\n",[23,122378,122379],{"__ignoreMap":236},[240,122380,122381,122383,122385],{"class":242,"line":243},[240,122382,26523],{"class":436},[240,122384,120493],{"class":443},[240,122386,122387],{"class":443}," ~\u002F.bashrc\n",[19,122389,122390],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[231,122392,122394],{"className":120433,"code":122393,"language":120435,"meta":236,"style":236},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[23,122395,122396,122408],{"__ignoreMap":236},[240,122397,122398,122400,122403,122405],{"class":242,"line":243},[240,122399,26989],{"class":288},[240,122401,122402],{"class":257}," PATH",[240,122404,440],{"class":288},[240,122406,122407],{"class":257},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[240,122409,122410,122412,122415,122417],{"class":242,"line":250},[240,122411,26989],{"class":288},[240,122413,122414],{"class":257}," LD_LIBRARY_PATH",[240,122416,440],{"class":288},[240,122418,122419],{"class":257},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[19,122421,122422],{},[219,122423],{"alt":236,"src":122424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[231,122426,122428],{"className":120433,"code":122427,"language":120435,"meta":236,"style":236},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[23,122429,122430,122435,122441,122446],{"__ignoreMap":236},[240,122431,122432],{"class":242,"line":243},[240,122433,122434],{"class":246},"# 刷新当前终端的环境变量\n",[240,122436,122437,122439],{"class":242,"line":250},[240,122438,102804],{"class":264},[240,122440,122387],{"class":443},[240,122442,122443],{"class":242,"line":261},[240,122444,122445],{"class":246},"# 验证CUDA是否安装成功\n",[240,122447,122448,122451],{"class":242,"line":277},[240,122449,122450],{"class":436},"nvcc",[240,122452,122453],{"class":264}," -V\n",[19,122455,122456],{},"出现下图这种则安装成功。",[19,122458,122459],{},[219,122460],{"alt":236,"src":122461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[32,122463,122465],{"id":122464},"_354-安装cudnn","3.5.4 安装cuDNN",[1826,122467,122468],{},[1829,122469,122470],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[19,122472,122473,122474,122479],{},"前往 NVIDIA cuDNN 下载页面：",[254,122475,122478],{"href":122476,"rel":122477},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[25811],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[19,122481,122482],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[19,122484,122485],{},[219,122486],{"alt":236,"src":122487},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[19,122489,122490],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[19,122492,122493],{},[219,122494],{"alt":236,"src":122495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[19,122497,122498],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[19,122500,122501],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[19,122503,122504],{},[68,122505,122506],{},"我这里选择所有Linux X86_64最通用的办法：",[19,122508,122509],{},"下载好的：",[19,122511,122512],{},[219,122513],{"alt":236,"src":122514},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[1826,122516,122517],{"start":250},[1829,122518,122519],{},"安装cuDNN",[19,122521,122522],{},"找到该文件所在目录，并打开终端，cd到该目录。",[19,122524,122525],{},[219,122526],{"alt":236,"src":122527},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[19,122529,122530],{},"解压文件，并复制到对应位置完成安装",[231,122532,122534],{"className":120433,"code":122533,"language":120435,"meta":236,"style":236},"# 解压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",[23,122535,122536,122541,122552,122557,122564,122569,122585,122599,122604,122615,122624,122628,122644],{"__ignoreMap":236},[240,122537,122538],{"class":242,"line":243},[240,122539,122540],{"class":246},"# 解压cuDNN文件\n",[240,122542,122543,122546,122549],{"class":242,"line":250},[240,122544,122545],{"class":436},"tar",[240,122547,122548],{"class":264}," -xvf",[240,122550,122551],{"class":443}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[240,122553,122554],{"class":242,"line":261},[240,122555,122556],{"class":246},"# cd进文件夹\n",[240,122558,122559,122561],{"class":242,"line":277},[240,122560,103187],{"class":264},[240,122562,122563],{"class":443}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[240,122565,122566],{"class":242,"line":294},[240,122567,122568],{"class":246},"# 复制cuDNN文件到CUDA目录\n",[240,122570,122571,122573,122575,122578,122580,122583],{"class":242,"line":309},[240,122572,26523],{"class":436},[240,122574,29807],{"class":443},[240,122576,122577],{"class":443}," include\u002Fcudnn",[240,122579,2554],{"class":264},[240,122581,122582],{"class":443},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[240,122584,4627],{"class":257},[240,122586,122587,122589,122591,122594,122596],{"class":242,"line":529},[240,122588,26523],{"class":436},[240,122590,29807],{"class":443},[240,122592,122593],{"class":443}," lib\u002Flibcudnn",[240,122595,2554],{"class":264},[240,122597,122598],{"class":443},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[240,122600,122601],{"class":242,"line":549},[240,122602,122603],{"class":246},"# 对比一下有没有缺文件\n",[240,122605,122606,122608,122611,122613],{"class":242,"line":569},[240,122607,28707],{"class":436},[240,122609,122610],{"class":443}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[240,122612,2554],{"class":264},[240,122614,4627],{"class":257},[240,122616,122617,122619,122622],{"class":242,"line":589},[240,122618,28707],{"class":436},[240,122620,122621],{"class":443}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[240,122623,121158],{"class":264},[240,122625,122626],{"class":242,"line":715},[240,122627,122207],{"class":246},[240,122629,122630,122632,122634,122637,122639,122641],{"class":242,"line":727},[240,122631,26523],{"class":436},[240,122633,26526],{"class":443},[240,122635,122636],{"class":443}," a+r",[240,122638,122610],{"class":443},[240,122640,2554],{"class":264},[240,122642,122643],{"class":257},"   \n",[240,122645,122646,122648,122650,122652,122654],{"class":242,"line":1730},[240,122647,26523],{"class":436},[240,122649,26526],{"class":443},[240,122651,122636],{"class":443},[240,122653,122621],{"class":443},[240,122655,121158],{"class":264},[1826,122657,122658],{"start":261},[1829,122659,122660],{},"检查是否安装成功",[231,122662,122664],{"className":120433,"code":122663,"language":120435,"meta":236,"style":236},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[23,122665,122666,122671],{"__ignoreMap":236},[240,122667,122668],{"class":242,"line":243},[240,122669,122670],{"class":246},"# 检查cuDNN版本命令\n",[240,122672,122673,122676,122679,122681,122683,122686,122689],{"class":242,"line":250},[240,122674,122675],{"class":436},"cat",[240,122677,122678],{"class":443}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[240,122680,27056],{"class":288},[240,122682,32182],{"class":436},[240,122684,122685],{"class":443}," CUDNN_MAJOR",[240,122687,122688],{"class":264}," -A",[240,122690,49669],{"class":264},[19,122692,122693],{},"出现下图这样的就是安装成功了",[19,122695,122696],{},[219,122697],{"alt":236,"src":122698},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[1826,122700,122701],{"start":277},[1829,122702,122703],{},"软链接(一般不需要)",[231,122705,122707],{"className":120433,"code":122706,"language":120435,"meta":236,"style":236},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[23,122708,122709,122714],{"__ignoreMap":236},[240,122710,122711],{"class":242,"line":243},[240,122712,122713],{"class":246},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[240,122715,122716,122718],{"class":242,"line":250},[240,122717,26523],{"class":436},[240,122719,122720],{"class":443}," ldconfig\n",[19,122722,122723],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[231,122725,122730],{"className":122726,"code":122727,"language":122728,"meta":122729,"style":236},"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",[23,122731,122732,122737,122742,122747,122752,122757,122762],{"__ignoreMap":236},[240,122733,122734],{"class":242,"line":243},[240,122735,122736],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[240,122738,122739],{"class":242,"line":250},[240,122740,122741],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[240,122743,122744],{"class":242,"line":261},[240,122745,122746],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[240,122748,122749],{"class":242,"line":277},[240,122750,122751],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[240,122753,122754],{"class":242,"line":294},[240,122755,122756],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[240,122758,122759],{"class":242,"line":309},[240,122760,122761],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[240,122763,122764],{"class":242,"line":529},[240,122765,122766],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[19,122768,122769],{},"运行下方的命令",[231,122771,122773],{"className":120433,"code":122772,"language":120435,"meta":236,"style":236},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[23,122774,122775,122780,122787,122792],{"__ignoreMap":236},[240,122776,122777],{"class":242,"line":243},[240,122778,122779],{"class":246},"# cd进入CUDA路径\n",[240,122781,122782,122784],{"class":242,"line":250},[240,122783,103187],{"class":264},[240,122785,122786],{"class":443}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[240,122788,122789],{"class":242,"line":261},[240,122790,122791],{"class":246}," # 查看本路径下的需要软链接的文件名\n",[240,122793,122794],{"class":242,"line":277},[240,122795,122796],{"class":436}," ls\n",[19,122798,122799],{},[219,122800],{"alt":236,"src":122801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[19,122803,122804,122805,20357,122808,20357,122811,122814],{},"如上图，我需要将",[23,122806,122807],{},"libcudnn_xxx_xxxxx.so.8.9.7",[23,122809,122810],{},"libcudnn_xxx_xxxxx.so.8",[23,122812,122813],{},"libcudnn_xxx_xxxxx.so","软链接",[231,122816,122818],{"className":120433,"code":122817,"language":120435,"meta":236,"style":236},"# 创建符号链接。对于每个 .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",[23,122819,122820,122825,122841,122855,122869,122883,122897,122911,122925,122930,122936,122941],{"__ignoreMap":236},[240,122821,122822],{"class":242,"line":243},[240,122823,122824],{"class":246},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[240,122826,122827,122829,122832,122835,122838],{"class":242,"line":250},[240,122828,26523],{"class":436},[240,122830,122831],{"class":443}," ln",[240,122833,122834],{"class":264}," -sf",[240,122836,122837],{"class":443}," libcudnn_cnn_train.so.8.9.7",[240,122839,122840],{"class":443}," libcudnn_cnn_train.so.8\n",[240,122842,122843,122845,122847,122849,122852],{"class":242,"line":261},[240,122844,26523],{"class":436},[240,122846,122831],{"class":443},[240,122848,122834],{"class":264},[240,122850,122851],{"class":443}," libcudnn_adv_infer.so.8.9.7",[240,122853,122854],{"class":443}," libcudnn_adv_infer.so.8\n",[240,122856,122857,122859,122861,122863,122866],{"class":242,"line":277},[240,122858,26523],{"class":436},[240,122860,122831],{"class":443},[240,122862,122834],{"class":264},[240,122864,122865],{"class":443}," libcudnn_adv_train.so.8.9.7",[240,122867,122868],{"class":443}," libcudnn_adv_train.so.8\n",[240,122870,122871,122873,122875,122877,122880],{"class":242,"line":294},[240,122872,26523],{"class":436},[240,122874,122831],{"class":443},[240,122876,122834],{"class":264},[240,122878,122879],{"class":443}," libcudnn_cnn_infer.so.8.9.7",[240,122881,122882],{"class":443}," libcudnn_cnn_infer.so.8\n",[240,122884,122885,122887,122889,122891,122894],{"class":242,"line":309},[240,122886,26523],{"class":436},[240,122888,122831],{"class":443},[240,122890,122834],{"class":264},[240,122892,122893],{"class":443}," libcudnn.so.8.9.7",[240,122895,122896],{"class":443}," libcudnn.so.8\n",[240,122898,122899,122901,122903,122905,122908],{"class":242,"line":529},[240,122900,26523],{"class":436},[240,122902,122831],{"class":443},[240,122904,122834],{"class":264},[240,122906,122907],{"class":443}," libcudnn_ops_infer.so.8.9.7",[240,122909,122910],{"class":443}," libcudnn_ops_infer.so.8\n",[240,122912,122913,122915,122917,122919,122922],{"class":242,"line":549},[240,122914,26523],{"class":436},[240,122916,122831],{"class":443},[240,122918,122834],{"class":264},[240,122920,122921],{"class":443}," libcudnn_ops_train.so.8.9.7",[240,122923,122924],{"class":443}," libcudnn_ops_train.so.8\n",[240,122926,122927],{"class":242,"line":569},[240,122928,122929],{"class":246},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[240,122931,122932,122934],{"class":242,"line":589},[240,122933,26523],{"class":436},[240,122935,122720],{"class":443},[240,122937,122938],{"class":242,"line":715},[240,122939,122940],{"class":246},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[240,122942,122943,122945,122948,122951,122953,122956],{"class":242,"line":727},[240,122944,28707],{"class":436},[240,122946,122947],{"class":264}," -l",[240,122949,122950],{"class":443}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[240,122952,2554],{"class":264},[240,122954,122955],{"class":443},".so",[240,122957,121158],{"class":264},[32,122959,122961],{"id":122960},"_355-常见问题","3.5.5 常见问题",[1826,122963,122964],{},[1829,122965,122966],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[231,122968,122970],{"className":120433,"code":122969,"language":120435,"meta":236,"style":236},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[23,122971,122972],{"__ignoreMap":236},[240,122973,122974,122976,122978],{"class":242,"line":243},[240,122975,26523],{"class":436},[240,122977,120493],{"class":443},[240,122979,122980],{"class":443}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[19,122982,122983],{},"blacklist-nouveau.conf文件内容如下：",[231,122985,122987],{"className":120433,"code":122986,"language":120435,"meta":236,"style":236},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[23,122988,122989,122997,123004,123016,123026],{"__ignoreMap":236},[240,122990,122991,122994],{"class":242,"line":243},[240,122992,122993],{"class":436},"blacklist",[240,122995,122996],{"class":443}," nouveau\n",[240,122998,122999,123001],{"class":242,"line":250},[240,123000,122993],{"class":436},[240,123002,123003],{"class":443}," lbm-nouveau\n",[240,123005,123006,123008,123011,123014],{"class":242,"line":261},[240,123007,117840],{"class":436},[240,123009,123010],{"class":443}," nouveau",[240,123012,123013],{"class":443}," modeset=",[240,123015,5037],{"class":264},[240,123017,123018,123021,123023],{"class":242,"line":277},[240,123019,123020],{"class":264},"alias",[240,123022,123010],{"class":443},[240,123024,123025],{"class":443}," off\n",[240,123027,123028,123030,123033],{"class":242,"line":294},[240,123029,123020],{"class":264},[240,123031,123032],{"class":443}," lbm-nouveau",[240,123034,123025],{"class":443},[19,123036,123037],{},"接着运行下方命令",[231,123039,123041],{"className":120433,"code":123040,"language":120435,"meta":236,"style":236},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[23,123042,123043,123053,123058],{"__ignoreMap":236},[240,123044,123045,123047,123050],{"class":242,"line":243},[240,123046,26523],{"class":436},[240,123048,123049],{"class":443}," update-initramfs",[240,123051,123052],{"class":264}," -u\n",[240,123054,123055],{"class":242,"line":250},[240,123056,123057],{"class":436},"或者\n",[240,123059,123060,123062,123065],{"class":242,"line":261},[240,123061,26523],{"class":436},[240,123063,123064],{"class":443}," dracut",[240,123066,123067],{"class":264}," --force\n",[19,123069,123070],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[231,123072,123074],{"className":120433,"code":123073,"language":120435,"meta":236,"style":236},"lsmod | grep nouveau\n",[23,123075,123076],{"__ignoreMap":236},[240,123077,123078,123081,123083,123085],{"class":242,"line":243},[240,123079,123080],{"class":436},"lsmod",[240,123082,27056],{"class":288},[240,123084,32182],{"class":436},[240,123086,122996],{"class":443},[1826,123088,123089],{"start":250},[1829,123090,123091],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[231,123093,123095],{"className":120433,"code":123094,"language":120435,"meta":236,"style":236},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[23,123096,123097],{"__ignoreMap":236},[240,123098,123099,123101,123103],{"class":242,"line":243},[240,123100,26523],{"class":436},[240,123102,120493],{"class":443},[240,123104,123105],{"class":443}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[19,123107,123108],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[231,123110,123112],{"className":120433,"code":123111,"language":120435,"meta":236,"style":236},"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",[23,123113,123114,123122,123130,123138,123145,123153,123163,123171],{"__ignoreMap":236},[240,123115,123116,123119],{"class":242,"line":243},[240,123117,123118],{"class":436},"Section",[240,123120,123121],{"class":443}," \"OutputClass\"\n",[240,123123,123124,123127],{"class":242,"line":250},[240,123125,123126],{"class":436},"   Identifier",[240,123128,123129],{"class":443}," \"nvidia\"\n",[240,123131,123132,123135],{"class":242,"line":261},[240,123133,123134],{"class":436},"   MatchDriver",[240,123136,123137],{"class":443}," \"nvidia-drm\"\n",[240,123139,123140,123143],{"class":242,"line":277},[240,123141,123142],{"class":436},"   Driver",[240,123144,123129],{"class":443},[240,123146,123147,123150],{"class":242,"line":294},[240,123148,123149],{"class":436},"   Option",[240,123151,123152],{"class":443}," \"AllowEmptyInitialConfiguration\"\n",[240,123154,123155,123157,123160],{"class":242,"line":309},[240,123156,123149],{"class":436},[240,123158,123159],{"class":443}," \"PrimaryGPU\"",[240,123161,123162],{"class":443}," \"yes\"\n",[240,123164,123165,123168],{"class":242,"line":529},[240,123166,123167],{"class":436},"   ModulePath",[240,123169,123170],{"class":443}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[240,123172,123173],{"class":242,"line":549},[240,123174,123175],{"class":436},"EndSection\n",[1826,123177,123178],{"start":261},[1829,123179,123180],{},"安装N卡驱动提示错误",[231,123182,123184],{"className":122726,"code":123183,"language":122728,"meta":122729,"style":236},"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",[23,123185,123186],{"__ignoreMap":236},[240,123187,123188],{"class":242,"line":243},[240,123189,123183],{},[1826,123191,123192],{},[1829,123193,123194],{},"检查当前运行的内核版本：",[19,123196,123197],{},"运行以下命令以查看你当前正在使用的内核版本：",[231,123199,123201],{"className":119206,"code":123200,"language":119208,"meta":236,"style":236},"uname -r\n",[23,123202,123203],{"__ignoreMap":236},[240,123204,123205,123207],{"class":242,"line":243},[240,123206,72127],{"class":436},[240,123208,123209],{"class":264}," -r\n",[1826,123211,123212],{"start":250},[1829,123213,123214],{},"安装内核开发文件：",[19,123216,123217,123218,123221],{},"确保你已经安装了与当前内核版本相匹配的 ",[23,123219,123220],{},"kernel-devel"," 包。运行以下命令来安装：",[231,123223,123225],{"className":119206,"code":123224,"language":119208,"meta":236,"style":236},"sudo dnf install kernel-devel-$(uname -r)\n",[23,123226,123227],{"__ignoreMap":236},[240,123228,123229,123231,123233,123235,123238,123240,123242,123244],{"class":242,"line":243},[240,123230,26523],{"class":436},[240,123232,28261],{"class":443},[240,123234,25780],{"class":443},[240,123236,123237],{"class":443}," kernel-devel-",[240,123239,27046],{"class":257},[240,123241,72127],{"class":436},[240,123243,121549],{"class":264},[240,123245,2129],{"class":257},[19,123247,123248],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[1826,123250,123251],{"start":261},[1829,123252,123253],{},"安装内核源代码（如果需要）：",[19,123255,123256],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[231,123258,123260],{"className":119206,"code":123259,"language":119208,"meta":236,"style":236},"sudo dnf install kernel-headers kernel-source\n",[23,123261,123262],{"__ignoreMap":236},[240,123263,123264,123266,123268,123270,123273],{"class":242,"line":243},[240,123265,26523],{"class":436},[240,123267,28261],{"class":443},[240,123269,25780],{"class":443},[240,123271,123272],{"class":443}," kernel-headers",[240,123274,123275],{"class":443}," kernel-source\n",[1826,123277,123278],{"start":277},[1829,123279,123280],{},"检查安装：",[19,123282,123283,123284,123287],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[23,123285,123286],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[231,123289,123291],{"className":119206,"code":123290,"language":119208,"meta":236,"style":236},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[23,123292,123293],{"__ignoreMap":236},[240,123294,123295,123297],{"class":242,"line":243},[240,123296,28707],{"class":436},[240,123298,123299],{"class":443}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[19,123301,123302,123303,123306],{},"如果仍然遇到问题，可以通过 ",[23,123304,123305],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[2019,123308,123309],{},"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":236,"searchDepth":250,"depth":250,"links":123311},[123312,123316,123326,123330,123331],{"id":120409,"depth":250,"text":120410,"children":123313},[123314,123315],{"id":120419,"depth":261,"text":120420},{"id":120429,"depth":261,"text":120430},{"id":120629,"depth":250,"text":120630,"children":123317},[123318,123319,123320,123321,123322,123323,123324,123325],{"id":120633,"depth":261,"text":120634},{"id":120703,"depth":261,"text":120704},{"id":120792,"depth":261,"text":120793},{"id":121037,"depth":261,"text":121038},{"id":121107,"depth":261,"text":121108},{"id":121174,"depth":261,"text":121175},{"id":121209,"depth":261,"text":121210},{"id":121264,"depth":261,"text":121265},{"id":121315,"depth":250,"text":121316,"children":123327},[123328,123329],{"id":121319,"depth":261,"text":121320},{"id":121399,"depth":261,"text":121400},{"id":121585,"depth":250,"text":121586},{"id":121758,"depth":250,"text":121759,"children":123332},[123333,123334,123335,123336,123337],{"id":121762,"depth":261,"text":121763},{"id":121803,"depth":261,"text":121804},{"id":122090,"depth":261,"text":122091},{"id":122464,"depth":261,"text":122465},{"id":122960,"depth":261,"text":122961},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":120401,"description":2048},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":123344,"title":123345,"body":123346,"description":2048,"extension":2049,"meta":123686,"navigation":2051,"path":123687,"seo":123688,"stem":123689,"__hash__":123690},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":123347,"toc":123684},[123348,123351,123356,123359,123605,123610,123613,123649,123652,123681],[10,123349,123345],{"id":123350},"_4-命令教程长期积累",[1826,123352,123353],{},[1829,123354,123355],{},"大多数命令",[19,123357,123358],{},"常用 Linux 命令速查：",[231,123360,123362],{"className":119206,"code":123361,"language":119208,"meta":236,"style":236},"# 文件与目录\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",[23,123363,123364,123369,123376,123383,123391,123398,123405,123413,123421,123428,123435,123443,123447,123452,123459,123467,123474,123478,123483,123490,123498,123506,123514,123522,123526,123531,123539,123546,123553,123561,123569,123573,123578,123587,123596],{"__ignoreMap":236},[240,123365,123366],{"class":242,"line":243},[240,123367,123368],{"class":246},"# 文件与目录\n",[240,123370,123371,123373],{"class":242,"line":250},[240,123372,28707],{"class":436},[240,123374,123375],{"class":246},"        # 列出目录内容\n",[240,123377,123378,123380],{"class":242,"line":261},[240,123379,103187],{"class":264},[240,123381,123382],{"class":246},"        # 切换目录\n",[240,123384,123385,123388],{"class":242,"line":277},[240,123386,123387],{"class":264},"pwd",[240,123389,123390],{"class":246},"       # 显示当前路径\n",[240,123392,123393,123395],{"class":242,"line":294},[240,123394,103177],{"class":436},[240,123396,123397],{"class":246},"     # 创建目录\n",[240,123399,123400,123402],{"class":242,"line":309},[240,123401,27269],{"class":436},[240,123403,123404],{"class":246},"        # 删除文件或目录\n",[240,123406,123407,123410],{"class":242,"line":529},[240,123408,123409],{"class":436},"cp",[240,123411,123412],{"class":246},"        # 复制文件或目录\n",[240,123414,123415,123418],{"class":242,"line":549},[240,123416,123417],{"class":436},"mv",[240,123419,123420],{"class":246},"        # 移动\u002F重命名文件或目录\n",[240,123422,123423,123425],{"class":242,"line":569},[240,123424,103194],{"class":436},[240,123426,123427],{"class":246},"     # 创建空文件\n",[240,123429,123430,123432],{"class":242,"line":589},[240,123431,122675],{"class":436},[240,123433,123434],{"class":246},"       # 查看文件内容\n",[240,123436,123437,123440],{"class":242,"line":715},[240,123438,123439],{"class":436},"head\u002Ftail",[240,123441,123442],{"class":246}," # 查看文件头部\u002F尾部\n",[240,123444,123445],{"class":242,"line":727},[240,123446,4353],{"emptyLinePlaceholder":2051},[240,123448,123449],{"class":242,"line":1730},[240,123450,123451],{"class":246},"# 权限管理\n",[240,123453,123454,123456],{"class":242,"line":3582},[240,123455,26558],{"class":436},[240,123457,123458],{"class":246},"     # 修改文件权限\n",[240,123460,123461,123464],{"class":242,"line":3596},[240,123462,123463],{"class":436},"chown",[240,123465,123466],{"class":246},"     # 修改文件所有者\n",[240,123468,123469,123471],{"class":242,"line":3601},[240,123470,26523],{"class":436},[240,123472,123473],{"class":246},"      # 以管理员身份执行\n",[240,123475,123476],{"class":242,"line":3607},[240,123477,4353],{"emptyLinePlaceholder":2051},[240,123479,123480],{"class":242,"line":3628},[240,123481,123482],{"class":246},"# 系统信息\n",[240,123484,123485,123487],{"class":242,"line":3633},[240,123486,72127],{"class":436},[240,123488,123489],{"class":246},"     # 系统信息\n",[240,123491,123492,123495],{"class":242,"line":3647},[240,123493,123494],{"class":436},"df",[240,123496,123497],{"class":246},"        # 磁盘使用情况\n",[240,123499,123500,123503],{"class":242,"line":3652},[240,123501,123502],{"class":436},"free",[240,123504,123505],{"class":246},"      # 内存使用情况\n",[240,123507,123508,123511],{"class":242,"line":3681},[240,123509,123510],{"class":436},"top\u002Fhtop",[240,123512,123513],{"class":246},"  # 进程监控\n",[240,123515,123516,123519],{"class":242,"line":3686},[240,123517,123518],{"class":436},"ps",[240,123520,123521],{"class":246},"        # 查看进程\n",[240,123523,123524],{"class":242,"line":3703},[240,123525,4353],{"emptyLinePlaceholder":2051},[240,123527,123528],{"class":242,"line":3708},[240,123529,123530],{"class":246},"# 网络\n",[240,123532,123533,123536],{"class":242,"line":3713},[240,123534,123535],{"class":436},"ping",[240,123537,123538],{"class":246},"      # 测试网络连通性\n",[240,123540,123541,123543],{"class":242,"line":3718},[240,123542,28795],{"class":436},[240,123544,123545],{"class":246},"      # 发送 HTTP 请求\n",[240,123547,123548,123550],{"class":242,"line":3732},[240,123549,122199],{"class":436},[240,123551,123552],{"class":246},"      # 下载文件\n",[240,123554,123555,123558],{"class":242,"line":3737},[240,123556,123557],{"class":436},"ssh",[240,123559,123560],{"class":246},"       # 远程登录\n",[240,123562,123563,123566],{"class":242,"line":4530},[240,123564,123565],{"class":436},"scp",[240,123567,123568],{"class":246},"       # 远程文件传输\n",[240,123570,123571],{"class":242,"line":4544},[240,123572,4353],{"emptyLinePlaceholder":2051},[240,123574,123575],{"class":242,"line":4552},[240,123576,123577],{"class":246},"# 包管理（Debian\u002FUbuntu）\n",[240,123579,123580,123582,123584],{"class":242,"line":4557},[240,123581,119278],{"class":436},[240,123583,119257],{"class":443},[240,123585,123586],{"class":246},"   # 更新软件源\n",[240,123588,123589,123591,123593],{"class":242,"line":4563},[240,123590,119278],{"class":436},[240,123592,25780],{"class":443},[240,123594,123595],{"class":246},"  # 安装软件包\n",[240,123597,123598,123600,123602],{"class":242,"line":4569},[240,123599,119278],{"class":436},[240,123601,28025],{"class":443},[240,123603,123604],{"class":246},"   # 卸载软件包\n",[1826,123606,123607],{"start":250},[1829,123608,123609],{},"KDE Dolphin 以root打开",[19,123611,123612],{},"kde5",[231,123614,123616],{"className":119206,"code":123615,"language":119208,"meta":236,"style":236},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[23,123617,123618],{"__ignoreMap":236},[240,123619,123620,123623,123626,123629,123631,123633,123636,123639,123641,123644,123646],{"class":242,"line":243},[240,123621,123622],{"class":436},"pkexec",[240,123624,123625],{"class":443}," env",[240,123627,123628],{"class":443}," DISPLAY=",[240,123630,30089],{"class":257},[240,123632,30147],{"class":443},[240,123634,123635],{"class":257},"$XAUTHORITY ",[240,123637,123638],{"class":443},"KDE_SESSION_VERSION=",[240,123640,1741],{"class":264},[240,123642,123643],{"class":443}," KDE_FULL_SESSION=",[240,123645,3322],{"class":264},[240,123647,123648],{"class":443}," dolphin\n",[19,123650,123651],{},"kde6",[231,123653,123655],{"className":119206,"code":123654,"language":119208,"meta":236,"style":236},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[23,123656,123657],{"__ignoreMap":236},[240,123658,123659,123661,123663,123665,123667,123669,123671,123673,123675,123677,123679],{"class":242,"line":243},[240,123660,123622],{"class":436},[240,123662,123625],{"class":443},[240,123664,123628],{"class":443},[240,123666,30089],{"class":257},[240,123668,30147],{"class":443},[240,123670,123635],{"class":257},[240,123672,123638],{"class":443},[240,123674,2445],{"class":264},[240,123676,123643],{"class":443},[240,123678,3322],{"class":264},[240,123680,123648],{"class":443},[2019,123682,123683],{},"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":236,"searchDepth":250,"depth":250,"links":123685},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":123345,"description":2048},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":123692,"title":123693,"body":123694,"description":2048,"extension":2049,"meta":123708,"navigation":2051,"path":123709,"seo":123710,"stem":123711,"__hash__":123712},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":123695,"toc":123706},[123696,123699],[10,123697,123693],{"id":123698},"_5-各种环境配置",[19,123700,123701],{},[254,123702,123705],{"href":123703,"rel":123704},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[25811],"电控组环境搭建大全",{"title":236,"searchDepth":250,"depth":250,"links":123707},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":123693,"description":2048},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":123714,"title":123715,"body":123716,"description":2048,"extension":2049,"meta":124064,"navigation":2051,"path":124065,"seo":124066,"stem":124067,"__hash__":124068},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":123717,"toc":124056},[123718,123721,123725,123729,123733,123738,123745,123749,124042,124046,124053],[10,123719,123715],{"id":123720},"_6-拓展功能",[14,123722,123724],{"id":123723},"_61-wine","6.1 Wine",[14,123726,123728],{"id":123727},"_62-android","6.2 Android",[32,123730,123732],{"id":123731},"_621-i卡a卡","6.2.1 I卡、A卡",[1826,123734,123735],{},[1829,123736,123737],{},"Wayland-Waydroid(体验超级好)",[19,123739,123740,123741],{},"Waydroid 官网与安装指南：",[254,123742,123743],{"href":123743,"rel":123744},"https:\u002F\u002Fwaydro.id\u002F",[25811],[32,123746,123748],{"id":123747},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[1826,123750,123751],{},[1829,123752,123753,123754,123756,123757,123761,123763,123766,123771,123968],{},"QEMU-KVM虚拟机 + BlissOS-X86",[55651,123755],{},"BlissOS 官网下载：",[254,123758,123759],{"href":123759,"rel":123760},"https:\u002F\u002Fblissos.org\u002F",[25811],[55651,123762],{},[219,123764],{"alt":236,"src":123765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[1826,123767,123768],{"start":261},[1829,123769,123770],{},"比较推荐的配置",[231,123772,123774],{"className":119206,"code":123773,"language":119208,"meta":236,"style":236},"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",[23,123775,123776,123783,123793,123803,123813,123825,123835,123842,123852,123861,123870,123880,123890,123899,123909,123919,123931,123941,123950,123960],{"__ignoreMap":236},[240,123777,123778,123781],{"class":242,"line":243},[240,123779,123780],{"class":436},"qemu-system-x86_64",[240,123782,26625],{"class":264},[240,123784,123785,123788,123791],{"class":242,"line":250},[240,123786,123787],{"class":264},"        -M",[240,123789,123790],{"class":443}," q35,vmport=off",[240,123792,26625],{"class":264},[240,123794,123795,123798,123801],{"class":242,"line":261},[240,123796,123797],{"class":264},"        -accel",[240,123799,123800],{"class":443}," kvm",[240,123802,26625],{"class":264},[240,123804,123805,123808,123811],{"class":242,"line":277},[240,123806,123807],{"class":264},"        -cpu",[240,123809,123810],{"class":443}," qemu64,+sse3,+sse4.2",[240,123812,26625],{"class":264},[240,123814,123815,123818,123821,123823],{"class":242,"line":294},[240,123816,123817],{"class":264},"        -smp",[240,123819,123820],{"class":443}," 8,cores=",[240,123822,1716],{"class":264},[240,123824,26625],{"class":264},[240,123826,123827,123830,123833],{"class":242,"line":309},[240,123828,123829],{"class":264},"        -m",[240,123831,123832],{"class":443}," 6G",[240,123834,26625],{"class":264},[240,123836,123837,123840],{"class":242,"line":529},[240,123838,123839],{"class":264},"        -usb",[240,123841,26625],{"class":264},[240,123843,123844,123847,123850],{"class":242,"line":549},[240,123845,123846],{"class":264},"        -device",[240,123848,123849],{"class":443}," virtio-tablet",[240,123851,26625],{"class":264},[240,123853,123854,123856,123859],{"class":242,"line":569},[240,123855,123846],{"class":264},[240,123857,123858],{"class":443}," virtio-keyboard",[240,123860,26625],{"class":264},[240,123862,123863,123865,123868],{"class":242,"line":589},[240,123864,123846],{"class":264},[240,123866,123867],{"class":443}," usb-tablet",[240,123869,26625],{"class":264},[240,123871,123872,123875,123878],{"class":242,"line":715},[240,123873,123874],{"class":264},"        -bios",[240,123876,123877],{"class":443}," OVMF-pure-efi64.fd",[240,123879,26625],{"class":264},[240,123881,123882,123885,123888],{"class":242,"line":727},[240,123883,123884],{"class":264},"        -net",[240,123886,123887],{"class":443}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[240,123889,26625],{"class":264},[240,123891,123892,123894,123897],{"class":242,"line":1730},[240,123893,123884],{"class":264},[240,123895,123896],{"class":443}," nic,model=virtio",[240,123898,26625],{"class":264},[240,123900,123901,123904,123907],{"class":242,"line":3582},[240,123902,123903],{"class":264},"        -audio",[240,123905,123906],{"class":443}," sdl,model=hda",[240,123908,26625],{"class":264},[240,123910,123911,123914,123917],{"class":242,"line":3596},[240,123912,123913],{"class":264},"        -display",[240,123915,123916],{"class":443}," sdl,gl=on,show-cursor=on",[240,123918,26625],{"class":264},[240,123920,123921,123923,123926,123929],{"class":242,"line":3601},[240,123922,123846],{"class":264},[240,123924,123925],{"class":443}," virtio-vga-gl,xres=1920,yres=",[240,123927,123928],{"class":264},"1080",[240,123930,26625],{"class":264},[240,123932,123933,123936,123939],{"class":242,"line":3607},[240,123934,123935],{"class":264},"        -drive",[240,123937,123938],{"class":443}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[240,123940,26625],{"class":264},[240,123942,123943,123945,123948],{"class":242,"line":3628},[240,123944,123935],{"class":264},[240,123946,123947],{"class":443}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[240,123949,26625],{"class":264},[240,123951,123952,123955,123958],{"class":242,"line":3633},[240,123953,123954],{"class":264},"        -monitor",[240,123956,123957],{"class":443}," stdio",[240,123959,26625],{"class":264},[240,123961,123962,123965],{"class":242,"line":3647},[240,123963,123964],{"class":264},"        -serial",[240,123966,123967],{"class":443}," none\n",[1826,123969,123970],{"start":294},[1829,123971,123972,123973],{},"常用操作：",[1826,123974,123975,123978,124034],{},[1829,123976,123977],{},"全屏：Ctrl+Alt+F",[1829,123979,123980,123981,123986],{},"adb调试",[1826,123982,123983],{},[1829,123984,123985],{},"使Linux与Android用ADB连接。",[231,123987,123989],{"className":119206,"code":123988,"language":119208,"meta":236,"style":236},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[23,123990,123991,123996,124007,124012,124024,124029],{"__ignoreMap":236},[240,123992,123993],{"class":242,"line":243},[240,123994,123995],{"class":246},"# 连接安卓\n",[240,123997,123998,124001,124004],{"class":242,"line":250},[240,123999,124000],{"class":436},"adb",[240,124002,124003],{"class":443}," connect",[240,124005,124006],{"class":264}," 127.0.0.1\n",[240,124008,124009],{"class":242,"line":261},[240,124010,124011],{"class":246},"# 打开shell\n",[240,124013,124014,124016,124018,124021],{"class":242,"line":277},[240,124015,124000],{"class":436},[240,124017,28829],{"class":264},[240,124019,124020],{"class":443}," 127.0.0.1:5555",[240,124022,124023],{"class":443}," shell\n",[240,124025,124026],{"class":242,"line":294},[240,124027,124028],{"class":246},"# 使用root权限\n",[240,124030,124031],{"class":242,"line":309},[240,124032,124033],{"class":436},"su\n",[1829,124035,124036,124037],{},"中文输入法",[1826,124038,124039],{},[1829,124040,124041],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[14,124043,124045],{"id":124044},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[19,124047,124048,124049],{},"rEFInd 官网与文档：",[254,124050,124051],{"href":124051,"rel":124052},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[25811],[2019,124054,124055],{},"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":236,"searchDepth":250,"depth":250,"links":124057},[124058,124059,124063],{"id":123723,"depth":250,"text":123724},{"id":123727,"depth":250,"text":123728,"children":124060},[124061,124062],{"id":123731,"depth":261,"text":123732},{"id":123747,"depth":261,"text":123748},{"id":124044,"depth":250,"text":124045},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":123715,"description":2048},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":124070,"title":124071,"body":124072,"description":2048,"extension":2049,"meta":127371,"navigation":2051,"path":127372,"seo":127373,"stem":127374,"__hash__":127375},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":124073,"toc":127345},[124074,124077,124081,124084,124091,124341,124344,124416,124419,124423,124427,124432,124435,124438,124441,124446,124449,124452,124455,124460,124463,124468,124471,124474,124479,124482,124487,124490,124494,124498,124501,124506,124509,124523,124526,124529,124538,124541,124550,124553,124556,124565,124568,124577,124580,124583,124592,124595,124598,124613,124616,124619,124628,124633,124636,124639,124648,124651,124660,124663,124672,124675,124684,124689,124692,124700,124705,124708,124717,124720,124728,124733,124736,124745,124748,124751,124755,124758,124763,124766,124771,124785,124790,124795,124806,124811,124817,124822,124837,124842,124845,124850,124855,124860,124868,124873,124880,124885,124896,124901,124904,124908,124911,124914,124919,124922,124941,124946,124949,124958,124963,124966,124988,124991,125021,125024,125029,125032,125046,125051,125070,125073,125076,125081,125093,125098,125103,125106,125111,125114,125129,125132,125137,125142,125146,125151,125191,125194,125198,125204,125210,125215,125218,125225,125230,125237,125240,125243,125250,125264,125267,125327,125330,125344,125356,125359,125362,125365,125429,125432,125435,125438,125458,125461,125466,125473,125477,125480,125484,125489,125494,125498,125501,125504,125546,125551,125554,125576,125591,125593,125598,125610,125670,125672,125674,125728,125730,125732,125738,125743,125746,125751,125755,125758,125820,125825,125828,125830,125834,125846,125928,125930,125932,125986,125992,125994,125998,126003,126005,126010,126014,126034,126069,126073,126076,126079,126082,126089,126092,126104,126107,126122,126125,126144,126192,126195,126212,126215,126229,126234,126237,126246,126261,126273,126311,126316,126325,126330,126335,126361,126370,126374,126378,126383,126386,126390,126394,126399,126402,126407,126410,126415,126418,126423,126426,126430,126435,126438,126443,126446,126450,126455,126458,126463,126466,126471,126474,126478,126483,126486,126491,126494,126499,126502,126506,126511,126514,126519,126522,126527,126530,126535,126538,126543,126546,126551,126554,126558,126563,126566,126571,126578,126582,126587,126590,126595,126598,126602,126607,126610,126613,126616,126619,126622,126626,126629,126639,126644,126649,126671,126676,126681,126688,126692,126697,126700,126703,126708,126711,126714,126717,126720,126723,126726,126729,126732,126735,126738,126741,126744,126749,126754,126759,126764,126769,126774,126779,126782,126786,126789,126793,126798,126803,126808,126813,126817,126823,126831,126836,126839,126844,126859,126862,126867,126901,126916,126919,126974,127000,127012,127015,127024,127027,127042,127047,127050,127056,127061,127064,127069,127072,127077,127082,127089,127092,127107,127110,127145,127150,127158,127196,127199,127202,127207,127210,127215,127226,127260,127265,127268,127277,127282,127288,127291,127296,127305,127310,127313,127316,127321,127329,127332,127337,127342],[10,124075,124071],{"id":124076},"_7-其他操作",[14,124078,124080],{"id":124079},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[19,124082,124083],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[19,124085,124086,124087,124090],{},"进入工控机的硬盘目录，进入",[23,124088,124089],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[231,124092,124096],{"className":124093,"code":124094,"language":124095,"meta":236,"style":236},"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",[23,124097,124098,124106,124117,124124,124131,124143,124150,124162,124173,124184,124191,124198,124205,124217,124229,124236,124248,124260,124267,124279,124291,124303,124314,124321,124332],{"__ignoreMap":236},[240,124099,124100,124103],{"class":242,"line":243},[240,124101,124102],{"class":253},"network",[240,124104,124105],{"class":257},": \n",[240,124107,124108,124111,124113,124115],{"class":242,"line":250},[240,124109,124110],{"class":253},"  version",[240,124112,268],{"class":257},[240,124114,1668],{"class":264},[240,124116,4627],{"class":257},[240,124118,124119,124122],{"class":242,"line":261},[240,124120,124121],{"class":253},"  wifis",[240,124123,124105],{"class":257},[240,124125,124126,124129],{"class":242,"line":277},[240,124127,124128],{"class":253},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[240,124130,124105],{"class":257},[240,124132,124133,124136,124138,124141],{"class":242,"line":294},[240,124134,124135],{"class":253},"      renderer",[240,124137,268],{"class":257},[240,124139,124140],{"class":443},"NetworkManager",[240,124142,4627],{"class":257},[240,124144,124145,124148],{"class":242,"line":309},[240,124146,124147],{"class":253},"      match",[240,124149,124105],{"class":257},[240,124151,124152,124155,124157,124160],{"class":242,"line":529},[240,124153,124154],{"class":253},"        name",[240,124156,268],{"class":257},[240,124158,124159],{"class":443},"\"wlan0\"",[240,124161,4627],{"class":257},[240,124163,124164,124167,124169,124171],{"class":242,"line":549},[240,124165,124166],{"class":253},"      dhcp4",[240,124168,268],{"class":257},[240,124170,3322],{"class":264},[240,124172,4627],{"class":257},[240,124174,124175,124178,124180,124182],{"class":242,"line":569},[240,124176,124177],{"class":253},"      dhcp6",[240,124179,268],{"class":257},[240,124181,3322],{"class":264},[240,124183,4627],{"class":257},[240,124185,124186,124189],{"class":242,"line":589},[240,124187,124188],{"class":253},"      access-points",[240,124190,124105],{"class":257},[240,124192,124193,124196],{"class":242,"line":715},[240,124194,124195],{"class":443},"        \"EMIS_Vinci_Robocon_5G\"",[240,124197,124105],{"class":257},[240,124199,124200,124203],{"class":242,"line":727},[240,124201,124202],{"class":253},"          auth",[240,124204,124105],{"class":257},[240,124206,124207,124210,124212,124215],{"class":242,"line":1730},[240,124208,124209],{"class":253},"            key-management",[240,124211,268],{"class":257},[240,124213,124214],{"class":443},"\"psk\"",[240,124216,4627],{"class":257},[240,124218,124219,124222,124224,124227],{"class":242,"line":3582},[240,124220,124221],{"class":253},"            password",[240,124223,268],{"class":257},[240,124225,124226],{"class":443},"\"vinci666\"",[240,124228,4627],{"class":257},[240,124230,124231,124234],{"class":242,"line":3596},[240,124232,124233],{"class":253},"          networkmanager",[240,124235,124105],{"class":257},[240,124237,124238,124241,124243,124246],{"class":242,"line":3601},[240,124239,124240],{"class":253},"            uuid",[240,124242,268],{"class":257},[240,124244,124245],{"class":443},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[240,124247,4627],{"class":257},[240,124249,124250,124253,124255,124258],{"class":242,"line":3607},[240,124251,124252],{"class":253},"            name",[240,124254,268],{"class":257},[240,124256,124257],{"class":443},"\"EMIS_Vinci_Robocon_5G\"",[240,124259,4627],{"class":257},[240,124261,124262,124265],{"class":242,"line":3628},[240,124263,124264],{"class":253},"            passthrough",[240,124266,124105],{"class":257},[240,124268,124269,124272,124274,124277],{"class":242,"line":3633},[240,124270,124271],{"class":253},"              wifi-security.auth-alg",[240,124273,268],{"class":257},[240,124275,124276],{"class":443},"\"open\"",[240,124278,4627],{"class":257},[240,124280,124281,124284,124286,124289],{"class":242,"line":3647},[240,124282,124283],{"class":253},"              ipv6.addr-gen-mode",[240,124285,268],{"class":257},[240,124287,124288],{"class":443},"\"default\"",[240,124290,4627],{"class":257},[240,124292,124293,124296,124298,124301],{"class":242,"line":3652},[240,124294,124295],{"class":253},"              ipv6.ip6-privacy",[240,124297,268],{"class":257},[240,124299,124300],{"class":443},"\"-1\"",[240,124302,4627],{"class":257},[240,124304,124305,124308,124310,124312],{"class":242,"line":3681},[240,124306,124307],{"class":253},"              proxy._",[240,124309,268],{"class":257},[240,124311,9603],{"class":443},[240,124313,4627],{"class":257},[240,124315,124316,124319],{"class":242,"line":3686},[240,124317,124318],{"class":253},"      networkmanager",[240,124320,124105],{"class":257},[240,124322,124323,124326,124328,124330],{"class":242,"line":3703},[240,124324,124325],{"class":253},"        uuid",[240,124327,268],{"class":257},[240,124329,124245],{"class":443},[240,124331,4627],{"class":257},[240,124333,124334,124336,124338],{"class":242,"line":3708},[240,124335,124154],{"class":253},[240,124337,268],{"class":257},[240,124339,124340],{"class":443},"\"EMIS_Vinci_Robocon_5G\"\n",[19,124342,124343],{},"将其改为新wifi的名和密码：",[231,124345,124347],{"className":124093,"code":124346,"language":124095,"meta":236,"style":236},"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",[23,124348,124349,124355,124364,124370,124377,124386,124394,124400,124406],{"__ignoreMap":236},[240,124350,124351,124353],{"class":242,"line":243},[240,124352,124102],{"class":253},[240,124354,5691],{"class":257},[240,124356,124357,124359,124361],{"class":242,"line":250},[240,124358,124110],{"class":253},[240,124360,268],{"class":257},[240,124362,124363],{"class":264},"2\n",[240,124365,124366,124368],{"class":242,"line":261},[240,124367,124121],{"class":253},[240,124369,5691],{"class":257},[240,124371,124372,124375],{"class":242,"line":277},[240,124373,124374],{"class":253},"    wlan0",[240,124376,5691],{"class":257},[240,124378,124379,124381,124383],{"class":242,"line":294},[240,124380,124166],{"class":253},[240,124382,268],{"class":257},[240,124384,124385],{"class":264},"true\n",[240,124387,124388,124390,124392],{"class":242,"line":309},[240,124389,124177],{"class":253},[240,124391,268],{"class":257},[240,124393,124385],{"class":264},[240,124395,124396,124398],{"class":242,"line":529},[240,124397,124188],{"class":253},[240,124399,5691],{"class":257},[240,124401,124402,124404],{"class":242,"line":549},[240,124403,124195],{"class":443},[240,124405,5691],{"class":257},[240,124407,124408,124411,124413],{"class":242,"line":569},[240,124409,124410],{"class":253},"          password",[240,124412,268],{"class":257},[240,124414,124415],{"class":443},"\"vinci666\"\n",[19,124417,124418],{},"工控机开机即可连上网。",[14,124420,124422],{"id":124421},"_72-ssh远程开发","7.2 SSH远程开发",[32,124424,124426],{"id":124425},"_721-环境准备","7.2.1 环境准备",[19,124428,124429],{},[68,124430,124431],{},"1.硬件准备",[19,124433,124434],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[19,124436,124437],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[19,124439,124440],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[19,124442,124443],{},[68,124444,124445],{},"2.设置固定IP",[19,124447,124448],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[19,124450,124451],{},"1.进入设置界面",[19,124453,124454],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[19,124456,124457],{},[219,124458],{"alt":236,"src":124459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[19,124461,124462],{},"2.配置所连接的网络",[19,124464,124465],{},[219,124466],{"alt":236,"src":124467},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[19,124469,124470],{},"3.设置固定IP",[19,124472,124473],{},"查看当前IP地址。",[19,124475,124476],{},[219,124477],{"alt":236,"src":124478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[19,124480,124481],{},"设置固定IP。",[19,124483,124484],{},[219,124485],{"alt":236,"src":124486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[19,124488,124489],{},"至此，IP配置完毕。",[32,124491,124493],{"id":124492},"_722-环境搭建","7.2.2 环境搭建",[19,124495,124496],{},[68,124497,27700],{},[19,124499,124500],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[19,124502,124503],{},[68,124504,124505],{},"实现",[19,124507,124508],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[1826,124510,124511,124514,124517,124520],{},[1829,124512,124513],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[1829,124515,124516],{},"远程主机启动SSH服务；",[1829,124518,124519],{},"本地主机登陆远程主机；",[1829,124521,124522],{},"实现数据传输。",[19,124524,124525],{},"1.安装SSH客户端与服务端",[19,124527,124528],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[231,124530,124532],{"className":122726,"code":124531,"language":122728,"meta":122729,"style":236}," sudo apt install openssh-server\n",[23,124533,124534],{"__ignoreMap":236},[240,124535,124536],{"class":242,"line":243},[240,124537,124531],{},[19,124539,124540],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[231,124542,124544],{"className":122726,"code":124543,"language":122728,"meta":122729,"style":236},"sudo apt install openssh-client\n",[23,124545,124546],{"__ignoreMap":236},[240,124547,124548],{"class":242,"line":243},[240,124549,124543],{},[19,124551,124552],{},"2.远程主机启动SSH服务",[19,124554,124555],{},"远程主机启动 ssh 服务命令如下：",[231,124557,124559],{"className":122726,"code":124558,"language":122728,"meta":122729,"style":236},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[23,124560,124561],{"__ignoreMap":236},[240,124562,124563],{"class":242,"line":243},[240,124564,124558],{},[19,124566,124567],{},"启动后可使用如下命令查看服务是否正常运行：",[231,124569,124571],{"className":122726,"code":124570,"language":122728,"meta":122729,"style":236},"ps -e | grep ssh\n",[23,124572,124573],{"__ignoreMap":236},[240,124574,124575],{"class":242,"line":243},[240,124576,124570],{},[19,124578,124579],{},"如果启动成功，会包含 sshd 程序。",[19,124581,124582],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[231,124584,124586],{"className":122726,"code":124585,"language":122728,"meta":122729,"style":236},"sudo systemctl enable ssh\n",[23,124587,124588],{"__ignoreMap":236},[240,124589,124590],{"class":242,"line":243},[240,124591,124585],{},[19,124593,124594],{},"3.本地远程登录",[19,124596,124597],{},"登录远程主机可以调用如下命令:",[231,124599,124601],{"className":119206,"code":124600,"language":119208,"meta":236,"style":236},"ssh -X 用户名@ip地址\n",[23,124602,124603],{"__ignoreMap":236},[240,124604,124605,124607,124610],{"class":242,"line":243},[240,124606,123557],{"class":436},[240,124608,124609],{"class":264}," -X",[240,124611,124612],{"class":443}," 用户名@ip地址\n",[19,124614,124615],{},"然后根据提示，录入登陆密码，即可成功登录。",[19,124617,124618],{},"如果退出，可以调用exit命令：",[231,124620,124622],{"className":122726,"code":124621,"language":122728,"meta":122729,"style":236},"exit\n",[23,124623,124624],{"__ignoreMap":236},[240,124625,124626],{"class":242,"line":243},[240,124627,124621],{},[19,124629,124630],{},[68,124631,124632],{},"4.实现数据传输",[19,124634,124635],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[19,124637,124638],{},"上传文件指令格式如下：",[231,124640,124642],{"className":122726,"code":124641,"language":122728,"meta":122729,"style":236},"scp 本地文件路径 账号@ip:路径\n",[23,124643,124644],{"__ignoreMap":236},[240,124645,124646],{"class":242,"line":243},[240,124647,124641],{},[19,124649,124650],{},"上传文件夹指令格式如下：",[231,124652,124654],{"className":122726,"code":124653,"language":122728,"meta":122729,"style":236},"scp -r 本地文件夹路径 账号@ip:路径\n",[23,124655,124656],{"__ignoreMap":236},[240,124657,124658],{"class":242,"line":243},[240,124659,124653],{},[19,124661,124662],{},"下载文件指令格式如下：",[231,124664,124666],{"className":122726,"code":124665,"language":122728,"meta":122729,"style":236},"scp 账号@ip:路径 本地文件夹路径\n",[23,124667,124668],{"__ignoreMap":236},[240,124669,124670],{"class":242,"line":243},[240,124671,124665],{},[19,124673,124674],{},"下载文件夹指令格式如下：",[231,124676,124678],{"className":122726,"code":124677,"language":122728,"meta":122729,"style":236},"scp -r 账号@ip:路径 本地文件夹路径\n",[23,124679,124680],{"__ignoreMap":236},[240,124681,124682],{"class":242,"line":243},[240,124683,124677],{},[19,124685,124686],{},[68,124687,124688],{},"优化",[19,124690,124691],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[1826,124693,124694,124697],{},[1829,124695,124696],{},"本地生成密钥对；",[1829,124698,124699],{},"将公钥上传至远程主机。",[19,124701,124702],{},[68,124703,124704],{},"1.生成密钥对",[19,124706,124707],{},"本地客户端生成公私钥：（一路回车默认即可）",[231,124709,124711],{"className":122726,"code":124710,"language":122728,"meta":122729,"style":236},"ssh-keygen\n",[23,124712,124713],{"__ignoreMap":236},[240,124714,124715],{"class":242,"line":243},[240,124716,124710],{},[19,124718,124719],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[1826,124721,124722,124725],{},[1829,124723,124724],{},"id_rsa （私钥）；",[1829,124726,124727],{},"id_rsa.pub (公钥)。",[19,124729,124730],{},[68,124731,124732],{},"2.公钥上传",[19,124734,124735],{},"上传指令如下：",[231,124737,124739],{"className":122726,"code":124738,"language":122728,"meta":122729,"style":236},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[23,124740,124741],{"__ignoreMap":236},[240,124742,124743],{"class":242,"line":243},[240,124744,124738],{},[19,124746,124747],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[19,124749,124750],{},"以后再远程登录就无需录入密码了。",[32,124752,124754],{"id":124753},"_723-使用vscode优化","7.2.3 使用VScode优化",[19,124756,124757],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[19,124759,124760],{},[68,124761,124762],{},"1.准备工作",[19,124764,124765],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[19,124767,124768],{},[68,124769,124770],{},"2.为VScode安装远程开发插件",[19,124772,124773,124774,124777,124778,124781,124782,30331],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[23,124775,124776],{},"扩展：商店","的搜索栏输入",[23,124779,124780],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[23,124783,124784],{},"安装",[19,124786,124787],{},[219,124788],{"alt":236,"src":124789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[19,124791,124792],{},[68,124793,124794],{},"3.配置远程连接",[19,124796,124797,124798,124801,124802,124805],{},"步骤1：使用快捷键",[23,124799,124800],{},"ctrl + shift + p","打开命令输入窗口，并输入",[23,124803,124804],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[19,124807,124808],{},[219,124809],{"alt":236,"src":124810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[19,124812,124813,124814,30331],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[23,124815,124816],{},"Add New SSH Host",[19,124818,124819],{},[219,124820],{"alt":236,"src":124821},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[19,124823,124824,124825,124828,124829,124832,124833,124836],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[23,124826,124827],{},"ssh +X ubuntu@192.168.43.164","，其中，",[23,124830,124831],{},"ubuntu","需要替换为你的登录用户名，",[23,124834,124835],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[19,124838,124839],{},[219,124840],{"alt":236,"src":124841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[19,124843,124844],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[19,124846,124847],{},[219,124848],{"alt":236,"src":124849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[19,124851,124852],{},[219,124853],{"alt":236,"src":124854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[19,124856,124857],{},[68,124858,124859],{},"4.使用",[19,124861,124862,124863,124801,124865,124867],{},"步骤1：继续使用快捷键",[23,124864,124800],{},[23,124866,124804],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[19,124869,124870],{},[219,124871],{"alt":236,"src":124872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[19,124874,124875,124876,124879],{},"或者，也可以点击侧边栏的",[23,124877,124878],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[19,124881,124882],{},[219,124883],{"alt":236,"src":124884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[19,124886,124887,124888,124891,124892,124895],{},"步骤2：选择菜单栏的",[23,124889,124890],{},"文件","下的",[23,124893,124894],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[19,124897,124898],{},[219,124899],{"alt":236,"src":124900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[19,124902,124903],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[14,124905,124907],{"id":124906},"_73-远程桌面","7.3 远程桌面",[19,124909,124910],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[19,124912,124913],{},"我们选择使用VNC来看。",[1826,124915,124916],{},[1829,124917,124918],{},"安装VNC服务器：",[19,124920,124921],{},"这里以TigerVNC为例进行安装：",[231,124923,124925],{"className":119206,"code":124924,"language":119208,"meta":236,"style":236},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[23,124926,124927],{"__ignoreMap":236},[240,124928,124929,124931,124933,124935,124938],{"class":242,"line":243},[240,124930,26523],{"class":436},[240,124932,119227],{"class":443},[240,124934,25780],{"class":443},[240,124936,124937],{"class":443}," tigervnc-standalone-server",[240,124939,124940],{"class":443}," tigervnc-common\n",[1826,124942,124943],{"start":250},[1829,124944,124945],{},"设置VNC密码：",[19,124947,124948],{},"为VNC用户设置密码，运行以下命令：",[231,124950,124952],{"className":119206,"code":124951,"language":119208,"meta":236,"style":236},"vncpasswd\n",[23,124953,124954],{"__ignoreMap":236},[240,124955,124956],{"class":242,"line":243},[240,124957,124951],{"class":436},[1826,124959,124960],{"start":261},[1829,124961,124962],{},"配置VNC启动脚本:",[19,124964,124965],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[231,124967,124969],{"className":119206,"code":124968,"language":119208,"meta":236,"style":236},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[23,124970,124971,124980],{"__ignoreMap":236},[240,124972,124973,124975,124977],{"class":242,"line":243},[240,124974,103177],{"class":436},[240,124976,31162],{"class":264},[240,124978,124979],{"class":443}," ~\u002F.vnc\n",[240,124981,124982,124985],{"class":242,"line":250},[240,124983,124984],{"class":436},"nano",[240,124986,124987],{"class":443}," ~\u002F.vnc\u002Fxstartup\n",[19,124989,124990],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[231,124992,124994],{"className":119206,"code":124993,"language":119208,"meta":236,"style":236},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[23,124995,124996,125001,125009,125016],{"__ignoreMap":236},[240,124997,124998],{"class":242,"line":243},[240,124999,125000],{"class":246},"#!\u002Fbin\u002Fsh\n",[240,125002,125003,125006],{"class":242,"line":250},[240,125004,125005],{"class":264},"unset",[240,125007,125008],{"class":443}," SESSION_MANAGER\n",[240,125010,125011,125013],{"class":242,"line":261},[240,125012,125005],{"class":264},[240,125014,125015],{"class":443}," DBUS_SESSION_BUS_ADDRESS\n",[240,125017,125018],{"class":242,"line":277},[240,125019,125020],{"class":436},"gnome-session\n",[19,125022,125023],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[1826,125025,125026],{"start":277},[1829,125027,125028],{},"给予执行权限：",[19,125030,125031],{},"为xstartup文件设置执行权限：",[231,125033,125035],{"className":119206,"code":125034,"language":119208,"meta":236,"style":236},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[23,125036,125037],{"__ignoreMap":236},[240,125038,125039,125041,125044],{"class":242,"line":243},[240,125040,26558],{"class":436},[240,125042,125043],{"class":443}," +x",[240,125045,124987],{"class":443},[1826,125047,125048],{"start":294},[1829,125049,125050],{},"启动VNC服务器：",[231,125052,125054],{"className":119206,"code":125053,"language":119208,"meta":236,"style":236},"vncserver -geometry 1920x1080 -localhost=0\n",[23,125055,125056],{"__ignoreMap":236},[240,125057,125058,125061,125064,125067],{"class":242,"line":243},[240,125059,125060],{"class":436},"vncserver",[240,125062,125063],{"class":264}," -geometry",[240,125065,125066],{"class":443}," 1920x1080",[240,125068,125069],{"class":264}," -localhost=0\n",[19,125071,125072],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[19,125074,125075],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[1826,125077,125078],{"start":309},[1829,125079,125080],{},"查看已开启的VNC服务器：",[231,125082,125084],{"className":119206,"code":125083,"language":119208,"meta":236,"style":236},"vncserver -list\n",[23,125085,125086],{"__ignoreMap":236},[240,125087,125088,125090],{"class":242,"line":243},[240,125089,125060],{"class":436},[240,125091,125092],{"class":264}," -list\n",[19,125094,125095],{},[219,125096],{"alt":236,"src":125097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[1826,125099,125100],{"start":529},[1829,125101,125102],{},"连接到VNC服务器：",[19,125104,125105],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[1826,125107,125108],{"start":549},[1829,125109,125110],{},"停止VNC服务器：",[19,125112,125113],{},"如果需要停止VNC服务器，可以使用以下命令：",[231,125115,125117],{"className":119206,"code":125116,"language":119208,"meta":236,"style":236},"vncserver -kill :1\n",[23,125118,125119],{"__ignoreMap":236},[240,125120,125121,125123,125126],{"class":242,"line":243},[240,125122,125060],{"class":436},[240,125124,125125],{"class":264}," -kill",[240,125127,125128],{"class":443}," :1\n",[19,125130,125131],{},"将:1替换为你实际使用的显示编号。",[19,125133,125134],{},[219,125135],{"alt":236,"src":125136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[19,125138,125139],{},[219,125140],{"alt":236,"src":125141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[14,125143,125145],{"id":125144},"_74-usb端口设置","7.4 USB端口设置",[19,125147,125148],{},[68,125149,125150],{},"首先先配置好权限",[231,125152,125154],{"className":119206,"code":125153,"language":119208,"meta":236,"style":236},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[23,125155,125156,125161,125174,125181,125186],{"__ignoreMap":236},[240,125157,125158],{"class":242,"line":243},[240,125159,125160],{"class":246},"# 将用户权限提高\n",[240,125162,125163,125165,125167,125169,125172],{"class":242,"line":250},[240,125164,26523],{"class":436},[240,125166,28520],{"class":443},[240,125168,28523],{"class":264},[240,125170,125171],{"class":443}," dialout",[240,125173,28528],{"class":257},[240,125175,125176,125178],{"class":242,"line":261},[240,125177,28547],{"class":436},[240,125179,125180],{"class":443}," dialout\n",[240,125182,125183],{"class":242,"line":277},[240,125184,125185],{"class":246},"# 查看下面命令是否输出dialout（若输出才正常）\n",[240,125187,125188],{"class":242,"line":294},[240,125189,125190],{"class":436},"groups\n",[19,125192,125193],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[32,125195,125197],{"id":125196},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[19,125199,125200,125203],{},[68,125201,125202],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[19,125205,125206,125209],{},[68,125207,125208],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[19,125211,125212],{},[68,125213,125214],{},"流程如下：",[19,125216,125217],{},"（1）.查找设备idVendor和idProduct",[19,125219,125220,125221,125224],{},"接入两个USB设备，在终端调用指令",[23,125222,125223],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[19,125226,125227],{},[219,125228],{"alt":236,"src":125229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[19,125231,125232,125233,125236],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[23,125234,125235],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[19,125238,125239],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[19,125241,125242],{},"（2）.编写映射规则",[19,125244,125245,125246,125249],{},"在",[23,125247,125248],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[231,125251,125253],{"className":119206,"code":125252,"language":119208,"meta":236,"style":236},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[23,125254,125255],{"__ignoreMap":236},[240,125256,125257,125259,125261],{"class":242,"line":243},[240,125258,26523],{"class":436},[240,125260,120493],{"class":443},[240,125262,125263],{"class":443}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[19,125265,125266],{},"输入如下内容：",[231,125268,125270],{"className":119206,"code":125269,"language":119208,"meta":236,"style":236},"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",[23,125271,125272,125302],{"__ignoreMap":236},[240,125273,125274,125277,125279,125282,125285,125288,125291,125293,125296,125299],{"class":242,"line":243},[240,125275,125276],{"class":257},"KERNEL",[240,125278,440],{"class":288},[240,125280,125281],{"class":443},"=\"ttyUSB*\",",[240,125283,125284],{"class":436}," ATTRS",[240,125286,125287],{"class":443},"{idVendor}==",[240,125289,125290],{"class":436},"\"10c4\"",[240,125292,2479],{"class":436},[240,125294,125295],{"class":443}," ATTRS{idProduct}==\"ea60\",",[240,125297,125298],{"class":443}," MODE:=\"0777\",",[240,125300,125301],{"class":443}," SYMLINK+=\"mylidar\"\n",[240,125303,125304,125306,125308,125310,125312,125314,125317,125319,125322,125324],{"class":242,"line":250},[240,125305,125276],{"class":257},[240,125307,440],{"class":288},[240,125309,125281],{"class":443},[240,125311,125284],{"class":436},[240,125313,125287],{"class":443},[240,125315,125316],{"class":436},"\"1a86\"",[240,125318,2479],{"class":436},[240,125320,125321],{"class":443}," ATTRS{idProduct}==\"7523\",",[240,125323,125298],{"class":443},[240,125325,125326],{"class":443}," SYMLINK+=\"mycar\"\n",[19,125328,125329],{},"代码解释：",[3100,125331,125332,125335,125338,125341],{},[1829,125333,125334],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[1829,125336,125337],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[1829,125339,125340],{},"SYMLINK是符号连接，即绑定的别名；",[1829,125342,125343],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[19,125345,125346,125347,125350,125353],{},"***小提示：***",[25500,125348,125349],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[23,125351,125352],{},"\u002Fetc\u002Fudev\u002Frule.d",[25500,125354,125355],{},"目录即可。",[19,125357,125358],{},"表格 还在加载中，请等待加载完成后再尝试复制",[19,125360,125361],{},"（3）.使规则生效",[19,125363,125364],{},"在终端下输入如下指令：",[231,125366,125368],{"className":119206,"code":125367,"language":119208,"meta":236,"style":236},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[23,125369,125370,125375,125387,125398,125402,125407,125420],{"__ignoreMap":236},[240,125371,125372],{"class":242,"line":243},[240,125373,125374],{"class":246},"# Ubuntu用下方命令\n",[240,125376,125377,125379,125381,125384],{"class":242,"line":250},[240,125378,26523],{"class":436},[240,125380,121958],{"class":443},[240,125382,125383],{"class":443}," udev",[240,125385,125386],{"class":443}," reload\n",[240,125388,125389,125391,125393,125395],{"class":242,"line":261},[240,125390,26523],{"class":436},[240,125392,121958],{"class":443},[240,125394,125383],{"class":443},[240,125396,125397],{"class":443}," restart\n",[240,125399,125400],{"class":242,"line":277},[240,125401,4353],{"emptyLinePlaceholder":2051},[240,125403,125404],{"class":242,"line":294},[240,125405,125406],{"class":246},"#Fedora用下方命令\n",[240,125408,125409,125411,125414,125417],{"class":242,"line":309},[240,125410,26523],{"class":436},[240,125412,125413],{"class":443}," udevadm",[240,125415,125416],{"class":443}," control",[240,125418,125419],{"class":264}," --reload\n",[240,125421,125422,125424,125426],{"class":242,"line":529},[240,125423,26523],{"class":436},[240,125425,125413],{"class":443},[240,125427,125428],{"class":443}," trigger\n",[19,125430,125431],{},"再重新插拔设备即可。",[19,125433,125434],{},"（4）.测试",[19,125436,125437],{},"终端下输入如下指令",[231,125439,125441],{"className":119206,"code":125440,"language":119208,"meta":236,"style":236},"ll \u002Fdev | grep ttyUSB\n",[23,125442,125443],{"__ignoreMap":236},[240,125444,125445,125448,125451,125453,125455],{"class":242,"line":243},[240,125446,125447],{"class":436},"ll",[240,125449,125450],{"class":443}," \u002Fdev",[240,125452,27056],{"class":288},[240,125454,32182],{"class":436},[240,125456,125457],{"class":443}," ttyUSB\n",[19,125459,125460],{},"运行结果如下：",[19,125462,125463],{},[219,125464],{"alt":236,"src":125465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[19,125467,125468,125469,125472],{},"也可以多次插拔USB设备，会发现设备端口",[23,125470,125471],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[19,125474,125475],{},[68,125476,119874],{},[19,125478,125479],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[32,125481,125483],{"id":125482},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[19,125485,125486,125488],{},[68,125487,125202],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[19,125490,125491,125493],{},[68,125492,125208],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[19,125495,125496],{},[68,125497,125214],{},[19,125499,125500],{},"（1）.查看所连接的主机USB接口的KERNELS",[19,125502,125503],{},"调用如下指令查看第一台雷达的USB信息：",[231,125505,125507],{"className":119206,"code":125506,"language":119208,"meta":236,"style":236},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[23,125508,125509,125529],{"__ignoreMap":236},[240,125510,125511,125514,125516,125519,125522,125524,125526],{"class":242,"line":243},[240,125512,125513],{"class":436},"udevadm",[240,125515,71744],{"class":443},[240,125517,125518],{"class":264}," --attribute-walk",[240,125520,125521],{"class":264}," --name=\u002Fdev\u002FttyUSB0",[240,125523,27056],{"class":288},[240,125525,32182],{"class":436},[240,125527,125528],{"class":443}," KERNELS\n",[240,125530,125531,125533,125535,125537,125540,125542,125544],{"class":242,"line":250},[240,125532,125513],{"class":436},[240,125534,71744],{"class":443},[240,125536,125518],{"class":264},[240,125538,125539],{"class":264}," --name=\u002Fdev\u002FttyACM0",[240,125541,27056],{"class":288},[240,125543,32182],{"class":436},[240,125545,125528],{"class":443},[19,125547,125548],{},[219,125549],{"alt":236,"src":125550},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[19,125552,125553],{},"调用如下指令查看第二台雷达的USB信息：",[231,125555,125557],{"className":119206,"code":125556,"language":119208,"meta":236,"style":236},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[23,125558,125559],{"__ignoreMap":236},[240,125560,125561,125563,125565,125567,125570,125572,125574],{"class":242,"line":243},[240,125562,125513],{"class":436},[240,125564,71744],{"class":443},[240,125566,125518],{"class":264},[240,125568,125569],{"class":264}," --name=\u002Fdev\u002FttyUSB1",[240,125571,27056],{"class":288},[240,125573,32182],{"class":436},[240,125575,125528],{"class":443},[19,125577,125578,125579,125582,125583,125586,125587,125590],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[23,125580,125581],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[23,125584,125585],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[68,125588,125589],{},"唯一性标识","”。",[19,125592,125242],{},[19,125594,125245,125595,125597],{},[23,125596,125248],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[231,125599,125600],{"className":119206,"code":125252,"language":119208,"meta":236,"style":236},[23,125601,125602],{"__ignoreMap":236},[240,125603,125604,125606,125608],{"class":242,"line":243},[240,125605,26523],{"class":436},[240,125607,120493],{"class":443},[240,125609,125263],{"class":443},[231,125611,125613],{"className":119206,"code":125612,"language":119208,"meta":236,"style":236},"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",[23,125614,125615,125644],{"__ignoreMap":236},[240,125616,125617,125619,125621,125623,125626,125628,125631,125634,125636,125639,125641],{"class":242,"line":243},[240,125618,125276],{"class":257},[240,125620,440],{"class":288},[240,125622,125281],{"class":443},[240,125624,125625],{"class":257}," KERNELS",[240,125627,440],{"class":288},[240,125629,125630],{"class":443},"=\"1-1.3:1.0\",",[240,125632,125633],{"class":436}," MODE:",[240,125635,440],{"class":443},[240,125637,125638],{"class":436},"\"0777\"",[240,125640,2479],{"class":436},[240,125642,125643],{"class":443}," SYMLINK+=\"rplidar_front\"\n",[240,125645,125646,125648,125650,125652,125654,125656,125659,125661,125663,125665,125667],{"class":242,"line":250},[240,125647,125276],{"class":257},[240,125649,440],{"class":288},[240,125651,125281],{"class":443},[240,125653,125625],{"class":257},[240,125655,440],{"class":288},[240,125657,125658],{"class":443},"=\"1-1.4:1.0\",",[240,125660,125633],{"class":436},[240,125662,440],{"class":443},[240,125664,125638],{"class":436},[240,125666,2479],{"class":436},[240,125668,125669],{"class":443}," SYMLINK+=\"rplidar_back\"\n",[19,125671,125361],{},[19,125673,125364],{},[231,125675,125676],{"className":119206,"code":125367,"language":119208,"meta":236,"style":236},[23,125677,125678,125682,125692,125702,125706,125710,125720],{"__ignoreMap":236},[240,125679,125680],{"class":242,"line":243},[240,125681,125374],{"class":246},[240,125683,125684,125686,125688,125690],{"class":242,"line":250},[240,125685,26523],{"class":436},[240,125687,121958],{"class":443},[240,125689,125383],{"class":443},[240,125691,125386],{"class":443},[240,125693,125694,125696,125698,125700],{"class":242,"line":261},[240,125695,26523],{"class":436},[240,125697,121958],{"class":443},[240,125699,125383],{"class":443},[240,125701,125397],{"class":443},[240,125703,125704],{"class":242,"line":277},[240,125705,4353],{"emptyLinePlaceholder":2051},[240,125707,125708],{"class":242,"line":294},[240,125709,125406],{"class":246},[240,125711,125712,125714,125716,125718],{"class":242,"line":309},[240,125713,26523],{"class":436},[240,125715,125413],{"class":443},[240,125717,125416],{"class":443},[240,125719,125419],{"class":264},[240,125721,125722,125724,125726],{"class":242,"line":529},[240,125723,26523],{"class":436},[240,125725,125413],{"class":443},[240,125727,125428],{"class":443},[19,125729,125431],{},[19,125731,125434],{},[19,125733,125437,125734,125737],{},[23,125735,125736],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[19,125739,125740],{},[219,125741],{"alt":236,"src":125742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[19,125744,125745],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[19,125747,125748,125750],{},[68,125749,119874],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[32,125752,125754],{"id":125753},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[19,125756,125757],{},"（1）.查看所连接的主机USB接口的信息",[231,125759,125761],{"className":119206,"code":125760,"language":119208,"meta":236,"style":236},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[23,125762,125763,125793],{"__ignoreMap":236},[240,125764,125765,125767,125769,125772,125774,125776,125778,125780,125783,125786,125788,125791],{"class":242,"line":243},[240,125766,125513],{"class":436},[240,125768,71744],{"class":443},[240,125770,125771],{"class":264}," -a",[240,125773,31162],{"class":264},[240,125775,30368],{"class":257},[240,125777,125513],{"class":436},[240,125779,71744],{"class":443},[240,125781,125782],{"class":264}," -q",[240,125784,125785],{"class":443}," path",[240,125787,27062],{"class":264},[240,125789,125790],{"class":443}," \u002Fdev\u002FttyACM0",[240,125792,2129],{"class":257},[240,125794,125795,125797,125799,125801,125803,125805,125807,125809,125811,125813,125815,125818],{"class":242,"line":250},[240,125796,125513],{"class":436},[240,125798,71744],{"class":443},[240,125800,125771],{"class":264},[240,125802,31162],{"class":264},[240,125804,30368],{"class":257},[240,125806,125513],{"class":436},[240,125808,71744],{"class":443},[240,125810,125782],{"class":264},[240,125812,125785],{"class":443},[240,125814,27062],{"class":264},[240,125816,125817],{"class":443}," \u002Fdev\u002FttyUSB0",[240,125819,2129],{"class":257},[19,125821,125822],{},[219,125823],{"alt":236,"src":125824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[19,125826,125827],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[19,125829,125242],{},[19,125831,125245,125832,125597],{},[23,125833,125248],{},[231,125835,125836],{"className":119206,"code":125252,"language":119208,"meta":236,"style":236},[23,125837,125838],{"__ignoreMap":236},[240,125839,125840,125842,125844],{"class":242,"line":243},[240,125841,26523],{"class":436},[240,125843,120493],{"class":443},[240,125845,125263],{"class":443},[231,125847,125849],{"className":119206,"code":125848,"language":119208,"meta":236,"style":236},"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",[23,125850,125851,125879,125905],{"__ignoreMap":236},[240,125852,125853,125855,125857,125860,125862,125864,125866,125868,125871,125874,125876],{"class":242,"line":243},[240,125854,125276],{"class":257},[240,125856,440],{"class":288},[240,125858,125859],{"class":443},"=\"ttyACM*\",",[240,125861,125284],{"class":436},[240,125863,125287],{"class":443},[240,125865,125316],{"class":436},[240,125867,2479],{"class":436},[240,125869,125870],{"class":443}," ATTRS{idProduct}==\"55d4\",",[240,125872,125873],{"class":443}," ATTRS{serial}==\"0001\",",[240,125875,125298],{"class":443},[240,125877,125878],{"class":443}," SYMLINK+=\"ttyACM_MCU\"\n",[240,125880,125881,125883,125885,125887,125889,125891,125893,125895,125897,125900,125902],{"class":242,"line":250},[240,125882,125276],{"class":257},[240,125884,440],{"class":288},[240,125886,125859],{"class":443},[240,125888,125284],{"class":436},[240,125890,125287],{"class":443},[240,125892,125316],{"class":436},[240,125894,2479],{"class":436},[240,125896,125870],{"class":443},[240,125898,125899],{"class":443}," ATTRS{serial}==\"0002\",",[240,125901,125298],{"class":443},[240,125903,125904],{"class":443}," SYMLINK+=\"ttyACM_Lidar\"\n",[240,125906,125907,125909,125911,125913,125915,125917,125919,125921,125923,125925],{"class":242,"line":261},[240,125908,125276],{"class":257},[240,125910,440],{"class":288},[240,125912,125281],{"class":443},[240,125914,125284],{"class":436},[240,125916,125287],{"class":443},[240,125918,125316],{"class":436},[240,125920,2479],{"class":436},[240,125922,125321],{"class":443},[240,125924,125298],{"class":443},[240,125926,125927],{"class":443}," SYMLINK+=\"ttyUSB_IMU\"\n",[19,125929,125361],{},[19,125931,125364],{},[231,125933,125934],{"className":119206,"code":125367,"language":119208,"meta":236,"style":236},[23,125935,125936,125940,125950,125960,125964,125968,125978],{"__ignoreMap":236},[240,125937,125938],{"class":242,"line":243},[240,125939,125374],{"class":246},[240,125941,125942,125944,125946,125948],{"class":242,"line":250},[240,125943,26523],{"class":436},[240,125945,121958],{"class":443},[240,125947,125383],{"class":443},[240,125949,125386],{"class":443},[240,125951,125952,125954,125956,125958],{"class":242,"line":261},[240,125953,26523],{"class":436},[240,125955,121958],{"class":443},[240,125957,125383],{"class":443},[240,125959,125397],{"class":443},[240,125961,125962],{"class":242,"line":277},[240,125963,4353],{"emptyLinePlaceholder":2051},[240,125965,125966],{"class":242,"line":294},[240,125967,125406],{"class":246},[240,125969,125970,125972,125974,125976],{"class":242,"line":309},[240,125971,26523],{"class":436},[240,125973,125413],{"class":443},[240,125975,125416],{"class":443},[240,125977,125419],{"class":264},[240,125979,125980,125982,125984],{"class":242,"line":529},[240,125981,26523],{"class":436},[240,125983,125413],{"class":443},[240,125985,125428],{"class":443},[19,125987,125988,125989],{},"再重新插拔设备即可，或者 ",[68,125990,125991],{},"直接重启系统。",[19,125993,125434],{},[19,125995,125437,125996,125737],{},[23,125997,125736],{},[19,125999,126000],{},[219,126001],{"alt":236,"src":126002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[19,126004,125745],{},[19,126006,126007,126009],{},[68,126008,119874],{}," 一些设备可能没有串口号等。",[32,126011,126013],{"id":126012},"_744-其他注意事项","7.4.4 其他注意事项",[19,126015,126016,126017,126019,126020,126023,126024,20357,126027,126030,126031,126033],{},"并非所有的USB设备端口号都是",[23,126018,125471],{},"的格式，比如Arduino的端口号可能是",[23,126021,126022],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[23,126025,126026],{},"videon",[23,126028,126029],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[23,126032,126026],{},"端口，绑定时需要关联的也是该接口。",[19,126035,126036,126037,126040,126041,126044,126045,126047,126048,126051,126052,126055,126056,126059,126060,126059,126063,126059,126066,30331],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[23,126038,126039],{},"KERNEL==\"ttyUSB*\"","修改为",[23,126042,126043],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[23,126046,126039],{},"修改为类似于",[23,126049,126050],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[23,126053,126054],{},"video[0,2,4,6]","表示可以绑定的端口为",[23,126057,126058],{},"video0","或",[23,126061,126062],{},"video2",[23,126064,126065],{},"video4",[23,126067,126068],{},"video6",[14,126070,126072],{"id":126071},"_75-挂载内网网页","7.5 挂载内网网页",[19,126074,126075],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[19,126077,126078],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[19,126080,126081],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[19,126083,126084,126085],{},"Termux 下载地址（F-Droid）：",[254,126086,126087],{"href":126087,"rel":126088},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[25811],[19,126090,126091],{},"首先打开app后，先更新软件缓存：",[231,126093,126095],{"className":119206,"code":126094,"language":119208,"meta":236,"style":236},"pkg update\n",[23,126096,126097],{"__ignoreMap":236},[240,126098,126099,126102],{"class":242,"line":243},[240,126100,126101],{"class":436},"pkg",[240,126103,28188],{"class":443},[19,126105,126106],{},"然后换源",[231,126108,126110],{"className":119206,"code":126109,"language":119208,"meta":236,"style":236},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[23,126111,126112],{"__ignoreMap":236},[240,126113,126114,126116,126119],{"class":242,"line":243},[240,126115,124984],{"class":436},[240,126117,126118],{"class":257}," $PREFIX",[240,126120,126121],{"class":443},"\u002Fetc\u002Fapt\u002Fsources.list\n",[19,126123,126124],{},"将该文件内容替换为下面：",[231,126126,126128],{"className":119206,"code":126127,"language":119208,"meta":236,"style":236},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[23,126129,126130],{"__ignoreMap":236},[240,126131,126132,126135,126138,126141],{"class":242,"line":243},[240,126133,126134],{"class":436},"deb",[240,126136,126137],{"class":443}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[240,126139,126140],{"class":443}," stable",[240,126142,126143],{"class":443}," main\n",[3100,126145,126146,126173],{},[1829,126147,126148,126149,126151,126152],{},"如果你使用的是",[23,126150,124984],{},"编辑器：",[3100,126153,126154,126161,126167],{},[1829,126155,126156,126157,126160],{},"按 ",[23,126158,126159],{},"Ctrl+O"," 保存文件。",[1829,126162,126156,126163,126166],{},[23,126164,126165],{},"Enter"," 确认文件名。",[1829,126168,126156,126169,126172],{},[23,126170,126171],{},"Ctrl+X"," 退出编辑器。",[1829,126174,126148,126175,126151,126178],{},[23,126176,126177],{},"vim",[3100,126179,126180,126186],{},[1829,126181,126156,126182,126185],{},[23,126183,126184],{},"Esc"," 退出编辑模式。",[1829,126187,126188,126189,126191],{},"输入 ",[23,126190,121131],{}," 保存并退出。",[19,126193,126194],{},"接下来重新更新软件源：",[231,126196,126198],{"className":119206,"code":126197,"language":119208,"meta":236,"style":236},"pkg update && pkg upgrade\n",[23,126199,126200],{"__ignoreMap":236},[240,126201,126202,126204,126206,126208,126210],{"class":242,"line":243},[240,126203,126101],{"class":436},[240,126205,119257],{"class":443},[240,126207,28136],{"class":257},[240,126209,126101],{"class":436},[240,126211,119243],{"class":443},[19,126213,126214],{},"安装python：",[231,126216,126218],{"className":119206,"code":126217,"language":119208,"meta":236,"style":236},"pkg install python\n",[23,126219,126220],{"__ignoreMap":236},[240,126221,126222,126224,126226],{"class":242,"line":243},[240,126223,126101],{"class":436},[240,126225,25780],{"class":443},[240,126227,126228],{"class":443}," python\n",[19,126230,126231,28419],{},[68,126232,126233],{},"通过Termux访问设备存储",[19,126235,126236],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[231,126238,126240],{"className":119206,"code":126239,"language":119208,"meta":236,"style":236},"termux-setup-storage\n",[23,126241,126242],{"__ignoreMap":236},[240,126243,126244],{"class":242,"line":243},[240,126245,126239],{"class":436},[1826,126247,126248],{},[1829,126249,126250,28419,126253],{},[68,126251,126252],{},"进入HTML文件所在的目录",[1826,126254,126255],{},[1829,126256,126257,126258,126260],{},"使用",[23,126259,103187],{},"命令进入HTML文件所在的目录：",[231,126262,126264],{"className":119206,"code":126263,"language":119208,"meta":236,"style":236},"cd ~\u002Fyour_html_folder\n",[23,126265,126266],{"__ignoreMap":236},[240,126267,126268,126270],{"class":242,"line":243},[240,126269,103187],{"class":264},[240,126271,126272],{"class":443}," ~\u002Fyour_html_folder\n",[1826,126274,126275],{"start":250},[1829,126276,126277,28419,126280,126285,126302],{},[68,126278,126279],{},"启动Python HTTP服务器",[1826,126281,126282],{},[1829,126283,126284],{},"运行以下命令启动一个简单的HTTP服务器：",[231,126286,126288],{"className":119206,"code":126287,"language":119208,"meta":236,"style":236},"python -m http.server 8000\n",[23,126289,126290],{"__ignoreMap":236},[240,126291,126292,126294,126296,126299],{"class":242,"line":243},[240,126293,32326],{"class":436},[240,126295,102793],{"class":264},[240,126297,126298],{"class":443}," http.server",[240,126300,126301],{"class":264}," 8000\n",[1826,126303,126304],{"start":261},[1829,126305,126306,126307,126310],{},"这会在端口",[23,126308,126309],{},"8000","上启动一个Web服务器。",[3100,126312,126313],{},[1829,126314,126315],{},"启动服务器后，Termux会显示日志信息，例如：",[231,126317,126319],{"className":122726,"code":126318,"language":122728,"meta":122729,"style":236},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[23,126320,126321],{"__ignoreMap":236},[240,126322,126323],{"class":242,"line":243},[240,126324,126318],{},[3100,126326,126327],{},[1829,126328,126329],{},"这表示服务器已成功启动。",[19,126331,126332],{},[68,126333,126334],{},"在浏览器中访问HTML文件",[1826,126336,126337],{},[1829,126338,126339,28419,126342,126347],{},[68,126340,126341],{},"在同一设备上访问",[1826,126343,126344],{},[1829,126345,126346],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[231,126348,126351],{"className":126349,"code":126350,"language":73580,"meta":236,"style":236},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[23,126352,126353],{"__ignoreMap":236},[240,126354,126355,126358],{"class":242,"line":243},[240,126356,126357],{"class":257},"http:",[240,126359,126360],{"class":246},"\u002F\u002Flocalhost:8000\n",[3100,126362,126363],{},[1829,126364,126365,126366,126369],{},"如果HTML文件中有",[23,126367,126368],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[14,126371,126373],{"id":126372},"_76-linux重点知识","7.6 Linux重点知识",[32,126375,126377],{"id":126376},"_761-关于点的说明","7.6.1 关于点的说明",[19,126379,126380],{},[219,126381],{"alt":236,"src":126382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[19,126384,126385],{},"一点本目录，两点上目录",[32,126387,126389],{"id":126388},"_762-目录","7.6.2 目录",[23945,126391,126393],{"id":126392},"_7621-系统启动必须","7.6.2.1 系统启动必须",[19,126395,126396],{},[68,126397,126398],{},"\u002Fboot:",[19,126400,126401],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[19,126403,126404],{},[68,126405,126406],{},"\u002Fetc:",[19,126408,126409],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[19,126411,126412],{},[68,126413,126414],{},"\u002Flib：",[19,126416,126417],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[19,126419,126420],{},[68,126421,126422],{},"\u002Fsys:",[19,126424,126425],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[23945,126427,126429],{"id":126428},"_7622-指令集合","7.6.2.2 指令集合",[19,126431,126432],{},[68,126433,126434],{},"\u002Fbin:",[19,126436,126437],{},"为二进制文件的缩写，存放最经常使用的命令",[19,126439,126440],{},[68,126441,126442],{},"\u002Fsbin:",[19,126444,126445],{},"只有系统管理员才能使用的程序和指令",[23945,126447,126449],{"id":126448},"_7623-外部文件管理","7.6.2.3 外部文件管理",[19,126451,126452],{},[68,126453,126454],{},"\u002Fdev:",[19,126456,126457],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[19,126459,126460],{},[68,126461,126462],{},"\u002Fmedia:",[19,126464,126465],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[19,126467,126468],{},[68,126469,126470],{},"\u002Fmnt:",[19,126472,126473],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[23945,126475,126477],{"id":126476},"_7624-临时文件","7.6.2.4 临时文件",[19,126479,126480],{},[68,126481,126482],{},"\u002Frun:",[19,126484,126485],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[19,126487,126488],{},[68,126489,126490],{},"\u002Flost+found:",[19,126492,126493],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[19,126495,126496],{},[68,126497,126498],{},"\u002Ftmp:",[19,126500,126501],{},"这个目录是用来存放一些临时文件的",[23945,126503,126505],{"id":126504},"_7625-账户","7.6.2.5 账户",[19,126507,126508],{},[68,126509,126510],{},"\u002Froot：",[19,126512,126513],{},"系统管理员的用户主目录",[19,126515,126516,28419],{},[68,126517,126518],{},"\u002Fhome",[19,126520,126521],{},"用户的主目录，以用户的账号命名的",[19,126523,126524,28419],{},[68,126525,126526],{},"\u002Fusr",[19,126528,126529],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[19,126531,126532],{},[68,126533,126534],{},"\u002Fusr\u002Fbin：",[19,126536,126537],{},"系统用户使用的应用程序与指令",[19,126539,126540],{},[68,126541,126542],{},"\u002Fusr\u002Fsbin：",[19,126544,126545],{},"超级用户使用的比较高级的管理程序和系统守护程序",[19,126547,126548],{},[68,126549,126550],{},"\u002Fusr\u002Fsrc：",[19,126552,126553],{},"内核源代码默认的放置目录",[23945,126555,126557],{"id":126556},"_7626-运行过程要用","7.6.2.6 运行过程要用",[19,126559,126560],{},[68,126561,126562],{},"\u002Fvar：",[19,126564,126565],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[19,126567,126568],{},[68,126569,126570],{},"\u002Fproc:",[19,126572,126573,126574,126577],{},"管理 ",[68,126575,126576],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[23945,126579,126581],{"id":126580},"_7627-扩展用的","7.6.2.7 扩展用的",[19,126583,126584],{},[68,126585,126586],{},"\u002Fopt:",[19,126588,126589],{},"默认是空的，我们安装额外软件可以放在这个里面",[19,126591,126592],{},[68,126593,126594],{},"\u002Fsrv:",[19,126596,126597],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[32,126599,126601],{"id":126600},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[19,126603,126604],{},[219,126605],{"alt":236,"src":126606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[19,126608,126609],{},"windows-->linux:",[19,126611,126612],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[19,126614,126615],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[19,126617,126618],{},"linux传输文件到windows",[19,126620,126621],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[32,126623,126625],{"id":126624},"_764-易忘知识","7.6.4 易忘知识",[19,126627,126628],{},"操作系统内核查看",[231,126630,126631],{"className":119206,"code":123200,"language":119208,"meta":236,"style":236},[23,126632,126633],{"__ignoreMap":236},[240,126634,126635,126637],{"class":242,"line":243},[240,126636,72127],{"class":436},[240,126638,123209],{"class":264},[19,126640,126641],{},[219,126642],{"alt":236,"src":126643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[19,126645,126646],{},[219,126647],{"alt":236,"src":126648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[231,126650,126652],{"className":119206,"code":126651,"language":119208,"meta":236,"style":236},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[23,126653,126654,126666],{"__ignoreMap":236},[240,126655,126656,126658,126661,126664],{"class":242,"line":243},[240,126657,123417],{"class":436},[240,126659,126660],{"class":443}," mvtest",[240,126662,126663],{"class":443}," mvtest2",[240,126665,4627],{"class":257},[240,126667,126668],{"class":242,"line":250},[240,126669,126670],{"class":436},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[19,126672,126673],{},[219,126674],{"alt":236,"src":126675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[19,126677,126678],{},[219,126679],{"alt":236,"src":126680},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[19,126682,126683,126684,126687],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[23,126685,126686],{},"du -a"," 可以快速查看磁盘使用细节。",[32,126689,126691],{"id":126690},"_765-vim","7.6.5 Vim",[19,126693,126694],{},[219,126695],{"alt":236,"src":126696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[19,126698,126699],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[19,126701,126702],{},"一开始进去为命令模式，此时点击输入的字母为命令",[19,126704,126705],{},[68,126706,126707],{},"1.命令模式：",[19,126709,126710],{},"i 切换到输入模式，在光标当前位置开始输入文本",[19,126712,126713],{},"x 删除当前光标所在处的字符",[19,126715,126716],{},"：切换到底线命令模式，以在最底一行输入命令",[19,126718,126719],{},"a 进行插入模式，在光标下一个位置输入文本",[19,126721,126722],{},"o 在当前的下方插入一个新行，并进入插入模式",[19,126724,126725],{},"0 在当前行的上方插入一个新行，并进入插入模式",[19,126727,126728],{},"dd 剪切当前行",[19,126730,126731],{},"yy 复制当前行",[19,126733,126734],{},"p 粘贴剪贴板内容到光标下方",[19,126736,126737],{},"P 粘贴剪贴板内容到光标上方",[19,126739,126740],{},"u 撤销上一次操作",[19,126742,126743],{},"ctrl+r 重做上一次操作",[19,126745,126746,126748],{},[2892,126747],{}," 保存文件",[19,126750,126751,126753],{},[2743,126752],{}," 退出Vim编辑器",[19,126755,126756,126758],{},[2743,126757],{},"! 强制退出Vim编辑器，不保存修改",[19,126760,126761],{},[68,126762,126763],{},"2.输入模式：",[19,126765,126766],{},[219,126767],{"alt":236,"src":126768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[19,126770,126771],{},[68,126772,126773],{},"3.底线命令模式：",[19,126775,126776],{},[219,126777],{"alt":236,"src":126778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[19,126780,126781],{},"按下esc可以退出底线命令模式",[32,126783,126785],{"id":126784},"_766-apt","7.6.6 apt",[19,126787,126788],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[32,126790,126792],{"id":126791},"_767-home与root的区别","7.6.7 home与root的区别",[19,126794,126795],{},[219,126796],{"alt":236,"src":126797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[19,126799,126800],{},[219,126801],{"alt":236,"src":126802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[19,126804,126805],{},[219,126806],{"alt":236,"src":126807},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[19,126809,126810],{},[219,126811],{"alt":236,"src":126812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[32,126814,126816],{"id":126815},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[19,126818,126819],{},[254,126820,126821],{"href":126821,"rel":126822},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[25811],[1826,126824,126825,126828],{},[1829,126826,126827],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[1829,126829,126830],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[19,126832,126833],{},[219,126834],{"alt":236,"src":126835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[19,126837,126838],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[19,126840,126841],{},[219,126842],{"alt":236,"src":126843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[231,126845,126847],{"className":122726,"code":126846,"language":122728,"meta":122729,"style":236},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[23,126848,126849,126854],{"__ignoreMap":236},[240,126850,126851],{"class":242,"line":243},[240,126852,126853],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[240,126855,126856],{"class":242,"line":250},[240,126857,126858],{},".\u002Fpycharm.sh\n",[19,126860,126861],{},"3️⃣创建.desktop文件",[19,126863,126864],{},[68,126865,126866],{},"原理：",[3100,126868,126869,126879],{},[1829,126870,126871,126872,126878],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[68,126873,126874,126877],{},[23,126875,126876],{},".desktop"," 文件"," 来识别应用。",[1829,126880,126881,126883,126884],{},[23,126882,126876],{}," 文件相当于一个“应用注册表”，告诉系统：",[3100,126885,126886,126889,126892,126895,126898],{},[1829,126887,126888],{},"应用名字（Name）",[1829,126890,126891],{},"图标（Icon）",[1829,126893,126894],{},"执行命令（Exec）",[1829,126896,126897],{},"分类（Categories）",[1829,126899,126900],{},"是否需要终端（Terminal）",[231,126902,126904],{"className":122726,"code":126903,"language":122728,"meta":122729,"style":236},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[23,126905,126906,126911],{"__ignoreMap":236},[240,126907,126908],{"class":242,"line":243},[240,126909,126910],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[240,126912,126913],{"class":242,"line":250},[240,126914,126915],{},"nano pycharm.desktop\n",[19,126917,126918],{},"nano是一个命令行下的编辑器，也可以使用vim",[231,126920,126922],{"className":122726,"code":126921,"language":122728,"meta":122729,"style":236},"[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",[23,126923,126924,126929,126934,126939,126944,126949,126954,126959,126964,126969],{"__ignoreMap":236},[240,126925,126926],{"class":242,"line":243},[240,126927,126928],{},"[Desktop Entry]\n",[240,126930,126931],{"class":242,"line":250},[240,126932,126933],{},"Version=1.0\n",[240,126935,126936],{"class":242,"line":261},[240,126937,126938],{},"Type=Application\n",[240,126940,126941],{"class":242,"line":277},[240,126942,126943],{},"Name=PyCharm\n",[240,126945,126946],{"class":242,"line":294},[240,126947,126948],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[240,126950,126951],{"class":242,"line":309},[240,126952,126953],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[240,126955,126956],{"class":242,"line":529},[240,126957,126958],{},"Comment=JetBrains PyCharm IDE\n",[240,126960,126961],{"class":242,"line":549},[240,126962,126963],{},"Categories=Development;IDE;\n",[240,126965,126966],{"class":242,"line":569},[240,126967,126968],{},"Terminal=false\n",[240,126970,126971],{"class":242,"line":589},[240,126972,126973],{},"StartupWMClass=jetbrains-pycharm\n",[3100,126975,126976,126982,126988,126994],{},[1829,126977,126978,126981],{},[23,126979,126980],{},"Exec"," → 点击图标时执行的命令",[1829,126983,126984,126987],{},[23,126985,126986],{},"Icon"," → 显示在菜单和桌面上的图标",[1829,126989,126990,126993],{},[23,126991,126992],{},"Terminal=false"," → 不打开终端",[1829,126995,126996,126999],{},[23,126997,126998],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[127001,127002,127003],"blockquote",{},[19,127004,127005,127006,127008,127009],{},"可以理解成 ",[23,127007,126876],{}," 文件是 Linux 的 ",[68,127010,127011],{},"快捷方式配置文件",[19,127013,127014],{},"4️⃣设置可执行权限",[231,127016,127018],{"className":122726,"code":127017,"language":122728,"meta":122729,"style":236},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[23,127019,127020],{"__ignoreMap":236},[240,127021,127022],{"class":242,"line":243},[240,127023,127017],{},[19,127025,127026],{},"5️⃣桌面图标启动的话如下：",[231,127028,127030],{"className":122726,"code":127029,"language":122728,"meta":122729,"style":236},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[23,127031,127032,127037],{"__ignoreMap":236},[240,127033,127034],{"class":242,"line":243},[240,127035,127036],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[240,127038,127039],{"class":242,"line":250},[240,127040,127041],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[1826,127043,127044],{"start":261},[1829,127045,127046],{},"下载Appimage文件实现软件的安装",[19,127048,127049],{},"1️⃣先下载appimage",[19,127051,127052],{},[254,127053,127054],{"href":127054,"rel":127055},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[25811],[19,127057,127058],{},[219,127059],{"alt":236,"src":127060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[19,127062,127063],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[19,127065,127066],{},[219,127067],{"alt":236,"src":127068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[19,127070,127071],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[19,127073,127074],{},[219,127075],{"alt":236,"src":127076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[19,127078,127079],{},[219,127080],{"alt":236,"src":127081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[19,127083,127084,127085,127088],{},"3️⃣给他们放在",[23,127086,127087],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[19,127090,127091],{},"4️⃣给软件执行权限",[231,127093,127095],{"className":122726,"code":127094,"language":122728,"meta":122729,"style":236},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[23,127096,127097,127102],{"__ignoreMap":236},[240,127098,127099],{"class":242,"line":243},[240,127100,127101],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[240,127103,127104],{"class":242,"line":250},[240,127105,127106],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[19,127108,127109],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[231,127111,127113],{"className":119206,"code":127112,"language":119208,"meta":236,"style":236},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[23,127114,127115,127122,127129,127135],{"__ignoreMap":236},[240,127116,127117,127119],{"class":242,"line":243},[240,127118,103187],{"class":264},[240,127120,127121],{"class":443}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[240,127123,127124,127126],{"class":242,"line":250},[240,127125,103194],{"class":436},[240,127127,127128],{"class":443}," .\u002Fqqmusic.desktop\n",[240,127130,127131,127133],{"class":242,"line":261},[240,127132,126177],{"class":436},[240,127134,127128],{"class":443},[240,127136,127137,127139,127141,127143],{"class":242,"line":277},[240,127138,26523],{"class":436},[240,127140,26526],{"class":443},[240,127142,125043],{"class":443},[240,127144,127128],{"class":443},[19,127146,127147,127149],{},[23,127148,103194],{},"：一个 Linux 命令，主要功能是：",[3100,127151,127152,127155],{},[1829,127153,127154],{},"如果文件不存在，就创建一个新的空文件",[1829,127156,127157],{},"如果文件已存在，就更新该文件的最后修改时间",[231,127159,127161],{"className":122726,"code":127160,"language":122728,"meta":122729,"style":236},"[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",[23,127162,127163,127167,127172,127177,127182,127186,127191],{"__ignoreMap":236},[240,127164,127165],{"class":242,"line":243},[240,127166,126928],{},[240,127168,127169],{"class":242,"line":250},[240,127170,127171],{},"Name=QQ音乐\n",[240,127173,127174],{"class":242,"line":261},[240,127175,127176],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[240,127178,127179],{"class":242,"line":277},[240,127180,127181],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[240,127183,127184],{"class":242,"line":294},[240,127185,126938],{},[240,127187,127188],{"class":242,"line":309},[240,127189,127190],{},"Categories=Audio;Music;Player;\n",[240,127192,127193],{"class":242,"line":529},[240,127194,127195],{},"Comment=QQ Music Client for Linux\n",[19,127197,127198],{},"将文件复制进去",[19,127200,127201],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[19,127203,127204],{},[219,127205],{"alt":236,"src":127206},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[19,127208,127209],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[19,127211,127212],{},[219,127213],{"alt":236,"src":127214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[19,127216,127217,127218,127221,127222,127225],{},"如果你用的不是KDE，那么也可以直接修改",[23,127219,127220],{},"qqmuic.desktop","：在exec的末尾加上",[23,127223,127224],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[231,127227,127229],{"className":122726,"code":127228,"language":122728,"meta":122729,"style":236},"[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",[23,127230,127231,127235,127239,127244,127248,127252,127256],{"__ignoreMap":236},[240,127232,127233],{"class":242,"line":243},[240,127234,126928],{},[240,127236,127237],{"class":242,"line":250},[240,127238,127171],{},[240,127240,127241],{"class":242,"line":261},[240,127242,127243],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[240,127245,127246],{"class":242,"line":277},[240,127247,127181],{},[240,127249,127250],{"class":242,"line":294},[240,127251,126938],{},[240,127253,127254],{"class":242,"line":309},[240,127255,127190],{},[240,127257,127258],{"class":242,"line":529},[240,127259,127195],{},[19,127261,127262],{},[219,127263],{"alt":236,"src":127264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[19,127266,127267],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[231,127269,127271],{"className":122726,"code":127270,"language":122728,"meta":122729,"style":236},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[23,127272,127273],{"__ignoreMap":236},[240,127274,127275],{"class":242,"line":243},[240,127276,127270],{},[1826,127278,127279],{"start":277},[1829,127280,127281],{},"去Flathub上安装软件",[19,127283,127284],{},[254,127285,127286],{"href":127286,"rel":127287},"https:\u002F\u002Fflathub.org\u002F",[25811],[19,127289,127290],{},"1️⃣去上面的官网搜索软件+下载软件",[19,127292,127293],{},[219,127294],{"alt":236,"src":127295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[231,127297,127299],{"className":122726,"code":127298,"language":122728,"meta":122729,"style":236},"flatpak install flathub com.obsproject.Studio\n",[23,127300,127301],{"__ignoreMap":236},[240,127302,127303],{"class":242,"line":243},[240,127304,127298],{},[19,127306,127307],{},[219,127308],{"alt":236,"src":127309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[19,127311,127312],{},"2️⃣运行软件",[19,127314,127315],{},"a.官方方式：",[19,127317,127318],{},[219,127319],{"alt":236,"src":127320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[231,127322,127323],{"className":122726,"code":127298,"language":122728,"meta":122729,"style":236},[23,127324,127325],{"__ignoreMap":236},[240,127326,127327],{"class":242,"line":243},[240,127328,127298],{},[19,127330,127331],{},"b.当普通软件运行：",[19,127333,127334],{},[219,127335],{"alt":236,"src":127336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[19,127338,127339],{},[219,127340],{"alt":236,"src":127341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[2019,127343,127344],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":236,"searchDepth":250,"depth":250,"links":127346},[127347,127348,127353,127354,127360,127361],{"id":124079,"depth":250,"text":124080},{"id":124421,"depth":250,"text":124422,"children":127349},[127350,127351,127352],{"id":124425,"depth":261,"text":124426},{"id":124492,"depth":261,"text":124493},{"id":124753,"depth":261,"text":124754},{"id":124906,"depth":250,"text":124907},{"id":125144,"depth":250,"text":125145,"children":127355},[127356,127357,127358,127359],{"id":125196,"depth":261,"text":125197},{"id":125482,"depth":261,"text":125483},{"id":125753,"depth":261,"text":125754},{"id":126012,"depth":261,"text":126013},{"id":126071,"depth":250,"text":126072},{"id":126372,"depth":250,"text":126373,"children":127362},[127363,127364,127365,127366,127367,127368,127369,127370],{"id":126376,"depth":261,"text":126377},{"id":126388,"depth":261,"text":126389},{"id":126600,"depth":261,"text":126601},{"id":126624,"depth":261,"text":126625},{"id":126690,"depth":261,"text":126691},{"id":126784,"depth":261,"text":126785},{"id":126791,"depth":261,"text":126792},{"id":126815,"depth":261,"text":126816},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":124071,"description":2048},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":127377,"title":127378,"body":127379,"description":2048,"extension":2049,"meta":127383,"navigation":2051,"path":127384,"seo":127385,"stem":127386,"__hash__":127387},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":127380,"toc":127381},[],{"title":236,"searchDepth":250,"depth":250,"links":127382},[],{"category":32209},"\u002Fwiki\u002F2025-01-27-linux",{"title":127378,"description":2048},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":127389,"title":127390,"body":127391,"description":127395,"extension":2049,"meta":127786,"navigation":2051,"path":127787,"seo":127788,"stem":127789,"__hash__":127790},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":127392,"toc":127784},[127393,127396,127400,127417,127420,127473,127477,127479,127519,127528,127532,127535,127776,127781],[19,127394,127395],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,127397,127399],{"id":127398},"_1ubuntu环境配置","1.Ubuntu环境配置",[1826,127401,127402,127405,127408,127411,127414],{},[1829,127403,127404],{},"ubuntu环境换源",[1829,127406,127407],{},"安装cuda",[1829,127409,127410],{},"安装miniconda",[1829,127412,127413],{},"安装pytorch",[1829,127415,127416],{},"安装genesis",[19,127418,127419],{},"参考链接：",[231,127421,127423],{"className":25768,"code":127422,"language":25770,"meta":236,"style":236},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[23,127424,127425],{"__ignoreMap":236},[240,127426,127427,127430,127433,127436,127438,127441,127444,127446,127449,127452,127454,127457,127460,127462,127465,127468,127470],{"class":242,"line":243},[240,127428,127429],{"class":436},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[240,127431,127432],{"class":443},"=blogdetail",[240,127434,127435],{"class":257},"&sharetype",[240,127437,440],{"class":288},[240,127439,127440],{"class":443},"blogdetail",[240,127442,127443],{"class":257},"&sharerId",[240,127445,440],{"class":288},[240,127447,127448],{"class":443},"144728092",[240,127450,127451],{"class":257},"&sharerefer",[240,127453,440],{"class":288},[240,127455,127456],{"class":443},"PC",[240,127458,127459],{"class":257},"&sharesource",[240,127461,440],{"class":288},[240,127463,127464],{"class":443},"qq_69379513",[240,127466,127467],{"class":257},"&sharefrom",[240,127469,440],{"class":288},[240,127471,127472],{"class":443},"from_link\n",[10,127474,127476],{"id":127475},"_2genesis-报错issue","2.Genesis 报错issue",[19,127478,127419],{},[231,127480,127481],{"className":25768,"code":127422,"language":25770,"meta":236,"style":236},[23,127482,127483],{"__ignoreMap":236},[240,127484,127485,127487,127489,127491,127493,127495,127497,127499,127501,127503,127505,127507,127509,127511,127513,127515,127517],{"class":242,"line":243},[240,127486,127429],{"class":436},[240,127488,127432],{"class":443},[240,127490,127435],{"class":257},[240,127492,440],{"class":288},[240,127494,127440],{"class":443},[240,127496,127443],{"class":257},[240,127498,440],{"class":288},[240,127500,127448],{"class":443},[240,127502,127451],{"class":257},[240,127504,440],{"class":288},[240,127506,127456],{"class":443},[240,127508,127459],{"class":257},[240,127510,440],{"class":288},[240,127512,127464],{"class":443},[240,127514,127467],{"class":257},[240,127516,440],{"class":288},[240,127518,127472],{"class":443},[231,127520,127522],{"className":25768,"code":127521,"language":25770,"meta":236,"style":236},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[23,127523,127524],{"__ignoreMap":236},[240,127525,127526],{"class":242,"line":243},[240,127527,127521],{"class":436},[10,127529,127531],{"id":127530},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[19,127533,127534],{},"hello_robot.py",[231,127536,127538],{"className":32324,"code":127537,"language":32326,"meta":236,"style":236},"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",[23,127539,127540,127546,127561,127565,127577,127589,127593,127606,127610,127629,127639,127649,127663,127667,127671,127676,127680,127690,127697,127711,127718,127728,127733,127737,127755,127760,127764,127771],{"__ignoreMap":236},[240,127541,127542,127544],{"class":242,"line":243},[240,127543,32338],{"class":288},[240,127545,47251],{"class":257},[240,127547,127548,127551,127554,127556,127558],{"class":242,"line":250},[240,127549,127550],{"class":257},"os.environ[",[240,127552,127553],{"class":443},"'PYOPENGL_PLATFORM'",[240,127555,6395],{"class":257},[240,127557,440],{"class":288},[240,127559,127560],{"class":443}," 'glx'\n",[240,127562,127563],{"class":242,"line":261},[240,127564,4353],{"emptyLinePlaceholder":2051},[240,127566,127567,127569,127572,127574],{"class":242,"line":277},[240,127568,32338],{"class":288},[240,127570,127571],{"class":257}," genesis ",[240,127573,33329],{"class":288},[240,127575,127576],{"class":257}," gs\n",[240,127578,127579,127581,127584,127586],{"class":242,"line":294},[240,127580,32683],{"class":288},[240,127582,127583],{"class":257}," pynput ",[240,127585,32338],{"class":288},[240,127587,127588],{"class":257}," keyboard\n",[240,127590,127591],{"class":242,"line":309},[240,127592,4353],{"emptyLinePlaceholder":2051},[240,127594,127595,127598,127601,127603],{"class":242,"line":529},[240,127596,127597],{"class":257},"gs.init(",[240,127599,127600],{"class":792},"backend",[240,127602,440],{"class":288},[240,127604,127605],{"class":257},"gs.gpu)\n",[240,127607,127608],{"class":242,"line":549},[240,127609,4353],{"emptyLinePlaceholder":2051},[240,127611,127612,127615,127617,127620,127623,127625,127627],{"class":242,"line":569},[240,127613,127614],{"class":257},"scene ",[240,127616,440],{"class":288},[240,127618,127619],{"class":257}," gs.Scene(",[240,127621,127622],{"class":792},"show_viewer",[240,127624,440],{"class":288},[240,127626,33422],{"class":264},[240,127628,2129],{"class":257},[240,127630,127631,127634,127636],{"class":242,"line":589},[240,127632,127633],{"class":257},"plane ",[240,127635,440],{"class":288},[240,127637,127638],{"class":257}," scene.add_entity(gs.morphs.Plane())\n",[240,127640,127641,127644,127646],{"class":242,"line":715},[240,127642,127643],{"class":257},"franka ",[240,127645,440],{"class":288},[240,127647,127648],{"class":257}," scene.add_entity(\n",[240,127650,127651,127654,127656,127658,127661],{"class":242,"line":727},[240,127652,127653],{"class":257},"    gs.morphs.MJCF(",[240,127655,47300],{"class":792},[240,127657,440],{"class":288},[240,127659,127660],{"class":443},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[240,127662,39993],{"class":257},[240,127664,127665],{"class":242,"line":1730},[240,127666,2129],{"class":257},[240,127668,127669],{"class":242,"line":3582},[240,127670,4353],{"emptyLinePlaceholder":2051},[240,127672,127673],{"class":242,"line":3596},[240,127674,127675],{"class":257},"scene.build()\n",[240,127677,127678],{"class":242,"line":3601},[240,127679,4353],{"emptyLinePlaceholder":2051},[240,127681,127682,127684,127687],{"class":242,"line":3607},[240,127683,33893],{"class":288},[240,127685,127686],{"class":436}," on_press",[240,127688,127689],{"class":257},"(key):\n",[240,127691,127692,127695],{"class":242,"line":3628},[240,127693,127694],{"class":288},"    try",[240,127696,5691],{"class":257},[240,127698,127699,127701,127704,127706,127709],{"class":242,"line":3633},[240,127700,4450],{"class":288},[240,127702,127703],{"class":257}," key.char ",[240,127705,4901],{"class":288},[240,127707,127708],{"class":443}," 'q'",[240,127710,5691],{"class":257},[240,127712,127713,127715],{"class":242,"line":3647},[240,127714,17680],{"class":288},[240,127716,127717],{"class":264}," False\n",[240,127719,127720,127723,127726],{"class":242,"line":3652},[240,127721,127722],{"class":288},"    except",[240,127724,127725],{"class":264}," AttributeError",[240,127727,5691],{"class":257},[240,127729,127730],{"class":242,"line":3681},[240,127731,127732],{"class":288},"        pass\n",[240,127734,127735],{"class":242,"line":3686},[240,127736,4353],{"emptyLinePlaceholder":2051},[240,127738,127739,127742,127744,127747,127750,127752],{"class":242,"line":3703},[240,127740,127741],{"class":257},"listener ",[240,127743,440],{"class":288},[240,127745,127746],{"class":257}," keyboard.Listener(",[240,127748,127749],{"class":792},"on_press",[240,127751,440],{"class":288},[240,127753,127754],{"class":257},"on_press)\n",[240,127756,127757],{"class":242,"line":3708},[240,127758,127759],{"class":257},"listener.start()\n",[240,127761,127762],{"class":242,"line":3713},[240,127763,4353],{"emptyLinePlaceholder":2051},[240,127765,127766,127768],{"class":242,"line":3718},[240,127767,110573],{"class":288},[240,127769,127770],{"class":257}," listener.running:\n",[240,127772,127773],{"class":242,"line":3732},[240,127774,127775],{"class":257},"    scene.step()\n",[19,127777,127778],{},[219,127779],{"alt":236,"src":127780},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[2019,127782,127783],{},"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":236,"searchDepth":250,"depth":250,"links":127785},[],{"category":25325},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":127390,"description":127395},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":127792,"title":127793,"body":127794,"description":2048,"extension":2049,"meta":127809,"navigation":2051,"path":127810,"seo":127811,"stem":127812,"__hash__":127813},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":127795,"toc":127806},[127796,127799,127803],[10,127797,127793],{"id":127798},"_1-基础知识",[14,127800,127802],{"id":127801},"_11-js的组成","1.1 js的组成",[19,127804,127805],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":236,"searchDepth":250,"depth":250,"links":127807},[127808],{"id":127801,"depth":250,"text":127802},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":127793,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":127815,"title":127816,"body":127817,"description":2048,"extension":2049,"meta":127956,"navigation":2051,"path":127957,"seo":127958,"stem":127959,"__hash__":127960},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":127818,"toc":127944},[127819,127822,127826,127829,127833,127843,127847,127850,127853,127856,127860,127867,127873,127877,127883,127894,127898,127901,127905,127908,127912,127915,127919,127922,127926,127929,127932,127935,127938,127941],[10,127820,127816],{"id":127821},"_2-vscode必备内容",[14,127823,127825],{"id":127824},"_21-标签分类","2.1 标签分类",[19,127827,127828],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[14,127830,127832],{"id":127831},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[19,127834,127835,127836,127838,127839,127842],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[23,127837,2331],{}," 然后按 ",[23,127840,127841],{},"Tab","，快速自动生成基本结构。",[14,127844,127846],{"id":127845},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[19,127848,127849],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[19,127851,127852],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[19,127854,127855],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[14,127857,127859],{"id":127858},"_24-视图缩放","2.4 视图缩放",[19,127861,127862,127863,127866],{},"缩放视图 ",[23,127864,127865],{},"ctrl+"," 可实现代码增大。",[19,127868,127869,127872],{},[23,127870,127871],{},"ctrl-"," 可实现代码减小。",[14,127874,127876],{"id":127875},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[19,127878,127879,127880,30331],{},"VSCode 新建文件快捷键为 ",[23,127881,127882],{},"ctrl+N",[19,127884,127885,127886,127889,127890,127893],{},"保存快捷键为 ",[23,127887,127888],{},"ctrl+S","，将文本保存为 ",[23,127891,127892],{},".html"," 文件。",[14,127895,127897],{"id":127896},"_26-auto-rename-tag","2.6 Auto Rename Tag",[19,127899,127900],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[14,127902,127904],{"id":127903},"_27-vscode-icons","2.7 vscode-icons",[19,127906,127907],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[14,127909,127911],{"id":127910},"_28-easy-less","2.8 Easy LESS",[19,127913,127914],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[14,127916,127918],{"id":127917},"_29-会了吧插件","2.9 会了吧插件",[19,127920,127921],{},"会了吧插件可以展示代码中英语单词的意思。",[14,127923,127925],{"id":127924},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[19,127927,127928],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[19,127930,127931],{},"②选定多个相同的单词:ctrl+D",[19,127933,127934],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[19,127936,127937],{},"④全局替换某些单词:ctrl+h",[19,127939,127940],{},"⑤快速定位到某一行:ctrl+g",[19,127942,127943],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":236,"searchDepth":250,"depth":250,"links":127945},[127946,127947,127948,127949,127950,127951,127952,127953,127954,127955],{"id":127824,"depth":250,"text":127825},{"id":127831,"depth":250,"text":127832},{"id":127845,"depth":250,"text":127846},{"id":127858,"depth":250,"text":127859},{"id":127875,"depth":250,"text":127876},{"id":127896,"depth":250,"text":127897},{"id":127903,"depth":250,"text":127904},{"id":127910,"depth":250,"text":127911},{"id":127917,"depth":250,"text":127918},{"id":127924,"depth":250,"text":127925},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":127816,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":127962,"title":127963,"body":127964,"description":2048,"extension":2049,"meta":128119,"navigation":2051,"path":128120,"seo":128121,"stem":128122,"__hash__":128123},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":127965,"toc":128111},[127966,127969,127973,127982,127988,127994,127998,128006,128010,128015,128018,128021,128025,128028,128038,128047,128056,128065,128073,128080,128085,128090,128103],[10,127967,127963],{"id":127968},"_3-html文本与容器标签",[14,127970,127972],{"id":127971},"_31-标题标签","3.1 标题标签",[19,127974,127975,127977,127978,127981],{},[23,127976,41],{},"我是一级标签",[23,127979,127980],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[19,127983,127984,127977,127986],{},[23,127985,41],{},[23,127987,127980],{},[19,127989,125245,127990,127993],{},[23,127991,127992],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[14,127995,127997],{"id":127996},"_32-段落标签","3.2 段落标签",[19,127999,128000,128002,128003],{},[23,128001,49],{},"....",[23,128004,128005],{},"\u003C\u002Fp>",[14,128007,128009],{"id":128008},"_33-换行标签","3.3 换行标签",[19,128011,128012],{},[23,128013,128014],{},"\u003Cbr \u002F>",[19,128016,128017],{},"具有强制换行的作用",[19,128019,128020],{},"单标签",[14,128022,128024],{"id":128023},"_34-文本格式化标签","3.4 文本格式化标签",[19,128026,128027],{},"提供粗体、斜体和下划线等效果",[19,128029,128030,128031,84453,128034,128037],{},"加粗：",[23,128032,128033],{},"\u003Cstrong>...\u003C\u002Fstrong>",[23,128035,128036],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[19,128039,128040,128041,84453,128044,128037],{},"斜体：",[23,128042,128043],{},"\u003Cem>...\u003C\u002Fem>",[23,128045,128046],{},"\u003Ci>...\u003C\u002Fi>",[19,128048,128049,128050,84453,128053,128037],{},"删除线：",[23,128051,128052],{},"\u003Cdel>...\u003C\u002Fdel>",[23,128054,128055],{},"\u003Cs>...\u003C\u002Fs>",[19,128057,128058,128059,84453,128062,128037],{},"下划线：",[23,128060,128061],{},"\u003Cins>...\u003C\u002Fins>",[23,128063,128064],{},"\u003Cu>...\u003C\u002Fu>",[14,128066,128068,128069,20357,128071,104604],{"id":128067},"_35-div和span标签","3.5 ",[23,128070,25],{},[23,128072,29],{},[19,128074,128075,102929,128077,128079],{},[23,128076,25],{},[23,128078,29],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[19,128081,128082],{},[23,128083,128084],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[19,128086,128087],{},[23,128088,128089],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[19,128091,128092,128093,128095,128096,128098,128099,128102],{},"两者特点：①",[23,128094,25],{}," 标签用来布局，但一行通常只放一个 ",[23,128097,25],{},"。可以理解为一个大盒子，独占一行，在 ",[23,128100,128101],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[19,128104,93,128105,128107,128108,128110],{},[23,128106,29],{}," 标签也可用于布局，一行可以放多个 ",[23,128109,29],{},"，可理解为小盒子。",{"title":236,"searchDepth":250,"depth":250,"links":128112},[128113,128114,128115,128116,128117],{"id":127971,"depth":250,"text":127972},{"id":127996,"depth":250,"text":127997},{"id":128008,"depth":250,"text":128009},{"id":128023,"depth":250,"text":128024},{"id":128067,"depth":250,"text":128118},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":127963,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":128125,"title":128126,"body":128127,"description":2048,"extension":2049,"meta":128322,"navigation":2051,"path":128323,"seo":128324,"stem":128325,"__hash__":128326},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":128128,"toc":128314},[128129,128132,128136,128139,128145,128152,128158,128164,128167,128170,128173,128176,128179,128182,128185,128189,128192,128195,128198,128204,128210,128216,128223,128227,128232,128238,128241,128244,128250,128256,128262,128265,128268,128272,128275,128285,128291,128295,128304,128308,128311],[10,128130,128126],{"id":128131},"_4-html图像与链接",[14,128133,128135],{"id":128134},"_41-图像标签","4.1 图像标签",[19,128137,128138],{},"（1）标签",[19,128140,128141,128144],{},[23,128142,128143],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[19,128146,128147,128148,128151],{},"src是",[23,128149,128150],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[19,128153,128154,128155],{},"alt:文本，替换文本。图像不能显示的文字 ",[23,128156,128157],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[19,128159,128160,128161],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[23,128162,128163],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[19,128165,128166],{},"width:像素，设置图像的宽度",[19,128168,128169],{},"height:像素，设置图像的高度",[19,128171,128172],{},"border：像素，设置图像的边框粗细",[19,128174,128175],{},"（2）图像标签属性的注意点：",[19,128177,128178],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[19,128180,128181],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[19,128183,128184],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[14,128186,128188],{"id":128187},"_42-路径注意要点","4.2 路径注意要点：",[19,128190,128191],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[19,128193,128194],{},"（2）根目录：就是打开文件夹的第一层根目录",[19,128196,128197],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[19,128199,128200,128201],{},"①同一级路径：图像文件位于HTML文件同一级，如",[23,128202,128203],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[19,128205,128206,128207],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[23,128208,128209],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[19,128211,128212,128213],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[23,128214,128215],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[19,128217,128218,128219,2355],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[254,128220,128221],{"href":128221,"rel":128222},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[25811],[14,128224,128226],{"id":128225},"_43-超链接标签","4.3 超链接标签",[19,128228,128229,128231],{},[23,128230,119],{},"标签用于定义超链接，作用是从一个页面链接到另一个页面",[19,128233,128234,128235],{},"①语法格式：",[23,128236,128237],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[19,128239,128240],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[19,128242,128243],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[19,128245,128246,128247],{},"③链接分类：外部链接：",[23,128248,128249],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[19,128251,128252,128253],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[23,128254,128255],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[19,128257,128258,128259],{},"空链接：如果当时没有确定链接目标时，",[23,128260,128261],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[19,128263,128264],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[19,128266,128267],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[14,128269,128271],{"id":128270},"_44-锚点链接","4.4 锚点链接",[19,128273,128274],{},"点我们点击链接，可以快速定位到页面中的某个位置",[19,128276,128277,128278,128281,128282],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[23,128279,128280],{},"\u003Ca href=\"#two\">","第二级",[23,128283,128284],{},"\u003C\u002Fa>",[19,128286,128287,128288],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[23,128289,128290],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[14,128292,128294],{"id":128293},"_45-注释标签","4.5 注释标签",[19,128296,128297,128300,128301],{},[23,128298,128299],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[23,128302,128303],{},"ctrl+\u002F",[14,128305,128307],{"id":128306},"_46-特殊字符","4.6 特殊字符",[19,128309,128310],{},"可以实现添加多个空格",[219,128312],{"style":221,"src":128313},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":236,"searchDepth":250,"depth":250,"links":128315},[128316,128317,128318,128319,128320,128321],{"id":128134,"depth":250,"text":128135},{"id":128187,"depth":250,"text":128188},{"id":128225,"depth":250,"text":128226},{"id":128270,"depth":250,"text":128271},{"id":128293,"depth":250,"text":128294},{"id":128306,"depth":250,"text":128307},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":128126,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":128328,"title":128329,"body":128330,"description":2048,"extension":2049,"meta":128621,"navigation":2051,"path":128622,"seo":128623,"stem":128624,"__hash__":128625},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":128331,"toc":128612},[128332,128335,128339,128342,128345,128348,128351,128354,128357,128360,128363,128366,128386,128392,128396,128399,128402,128405,128408,128411,128414,128418,128421,128424,128427,128430,128443,128448,128451,128454,128467,128470,128473,128476,128479,128482,128486,128489,128496,128499,128502,128505,128508,128511,128517,128520,128523,128529,128532,128535,128538,128544,128547,128550,128564,128571,128574,128577,128584,128593,128596,128599,128602,128606,128609],[10,128333,128329],{"id":128334},"_5-html表格列表与表单",[14,128336,128338],{"id":128337},"_51-表格标签","5.1 表格标签",[19,128340,128341],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[19,128343,128344],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[19,128346,128347],{},"②表格基本语法：",[219,128349],{"style":221,"src":128350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[19,128352,128353],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[219,128355],{"style":221,"src":128356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[19,128358,128359],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[219,128361],{"style":221,"src":128362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[19,128364,128365],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[19,128367,128368,128371,128372,128374,128375,128378,128379,128381,128382,128385],{},[23,128369,128370],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[23,128373,128370],{},"内部必须拥有",[23,128376,128377],{},"\u003Ctr>","标签，一般位于第一行，",[23,128380,128370],{},"比",[23,128383,128384],{},"\u003Cth>","范围广",[19,128387,128388,128391],{},[23,128389,128390],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[14,128393,128395],{"id":128394},"_52-合并单元格","5.2 合并单元格",[19,128397,128398],{},"（1）合并单元格方式：",[19,128400,128401],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[19,128403,128404],{},"②跨列合并：colspan=\"合并单元格的个数\"",[19,128406,128407],{},"（2）目标单元格：",[19,128409,128410],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[19,128412,128413],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[14,128415,128417],{"id":128416},"_53-列表标签","5.3 列表标签",[19,128419,128420],{},"（1）分类：无序列表、有序列表、自定义列表",[19,128422,128423],{},"①无序列表：",[219,128425],{"style":221,"src":128426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[19,128428,128429],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[19,128431,128432,128435,128436,128439,128440,128442],{},[23,128433,128434],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[23,128437,128438],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[23,128441,128434],{},"中输入其他标签或文字是不对的",[19,128444,128445,128447],{},[23,128446,128438],{},"之间相当于一个容器，可以容纳所有元素",[19,128449,128450],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[19,128452,128453],{},"在css中去除前边的小圆点采用如下代码:",[231,128455,128457],{"className":233,"code":128456,"language":235,"meta":236,"style":236},"list-style: none;\n",[23,128458,128459],{"__ignoreMap":236},[240,128460,128461,128464],{"class":242,"line":243},[240,128462,128463],{"class":253},"list-style",[240,128465,128466],{"class":257},": none;\n",[19,128468,128469],{},"②有序列表：",[219,128471],{"style":221,"src":128472},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[19,128474,128475],{},"③自定义列表：",[219,128477],{"style":221,"src":128478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[219,128480],{"style":221,"src":128481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[14,128483,128485],{"id":128484},"_54-表单标签","5.4 表单标签",[19,128487,128488],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[19,128490,128491,128492,128495],{},"（1）表单域：包含单元素的区域，",[23,128493,128494],{},"\u003Cform>","标签可以实现信息的收集和传递。",[219,128497],{"style":221,"src":128498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[19,128500,128501],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[19,128503,128504],{},"表单元素提交必须有name属性",[19,128506,128507],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[19,128509,128510],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[19,128512,79141,128513,128516],{},[23,128514,128515],{},"\u003Cinput>","输入表单元素",[219,128518],{"style":221,"src":128519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[219,128521],{"style":221,"src":128522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[19,128524,128525,128526],{},"单选按钮：",[23,128527,128528],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[219,128530],{"style":221,"src":128531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[19,128533,128534],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[219,128536],{"style":221,"src":128537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[19,128539,128540,128543],{},[68,128541,128542],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[19,128545,128546],{},"②select下拉表单元素：可以节约页面控件",[219,128548],{"style":221,"src":128549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[19,128551,128552,15744,128554,128557,128558,128560,128561,128563],{},[68,128553,87],{},[23,128555,128556],{},"\u003Cselect>","中至少包含一对",[23,128559,104624],{},"；在",[23,128562,104624],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[19,128565,128566,128567,128570],{},"③",[23,128568,128569],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[219,128572],{"style":221,"src":128573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[19,128575,128576],{},"3行20列",[14,128578,128580,128581,104604],{"id":128579},"_55-lable标签","5.5 ",[23,128582,128583],{},"\u003Clable>",[19,128585,128586,128587,128589,128590,128592],{},"它不是表单标签，但常常与表单标签搭配使用，",[23,128588,128583],{},"标签用于绑定一个表单标签，当点击",[23,128591,128583],{},"标签内的文本",[19,128594,128595],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[219,128597],{"style":221,"src":128598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[219,128600],{"style":221,"src":128601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[14,128603,128605],{"id":128604},"_56-实例","5.6 实例",[219,128607],{"style":221,"src":128608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[2019,128610,128611],{},"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":236,"searchDepth":250,"depth":250,"links":128613},[128614,128615,128616,128617,128618,128620],{"id":128337,"depth":250,"text":128338},{"id":128394,"depth":250,"text":128395},{"id":128416,"depth":250,"text":128417},{"id":128484,"depth":250,"text":128485},{"id":128579,"depth":250,"text":128619},"5.5 \u003Clable>标签",{"id":128604,"depth":250,"text":128605},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":128329,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":128627,"title":128628,"body":128629,"description":2048,"extension":2049,"meta":129177,"navigation":2051,"path":129178,"seo":129179,"stem":129180,"__hash__":129181},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":128630,"toc":129152},[128631,128634,128638,128641,128644,128648,128651,128654,128657,128660,128663,128666,128669,128673,128676,128680,128683,128686,128689,128693,128696,128699,128702,128708,128711,128714,128717,128720,128723,128726,128729,128762,128766,128769,128772,128775,128779,128782,128785,128788,128791,128794,128798,128801,128804,128807,128811,128814,128818,128821,128825,128828,128833,128837,128840,128844,128847,128850,128853,128856,128883,128886,128890,128893,128896,128901,128904,128907,128911,128914,128919,128922,128925,128928,128932,128935,128938,128941,128945,128948,128951,128954,128958,128962,128965,129005,129008,129012,129019,129022,129026,129029,129075,129079,129082,129085,129088,129116,129120,129123,129149],[10,128632,128628],{"id":128633},"_6-css语法与文本样式",[14,128635,128637],{"id":128636},"_61-css语法规范","6.1 css语法规范",[19,128639,128640],{},"由两部分组成，选择器及一条或多条声明",[219,128642],{"style":221,"src":128643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[19,128645,128646],{},[68,128647,87],{},[19,128649,128650],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[19,128652,128653],{},"②属性与属性值以“键值对”的形式出现",[19,128655,128656],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[19,128658,128659],{},"④属性和属性值之间用英文“;”分开",[219,128661],{"style":221,"src":128662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[219,128664],{"style":221,"src":128665},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[219,128667],{"style":221,"src":128668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[14,128670,128672],{"id":128671},"_62-css选择器","6.2 css选择器",[19,128674,128675],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[32,128677,128679],{"id":128678},"_621-标签选择器","6.2.1 标签选择器",[19,128681,128682],{},"①优点：能快速为页面中同类型的标签统一设置样式",[19,128684,128685],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[219,128687],{"style":221,"src":128688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[32,128690,128692],{"id":128691},"_622-类选择器","6.2.2 类选择器",[19,128694,128695],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[19,128697,128698],{},"②样例",[219,128700],{"style":221,"src":128701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[19,128703,128704,128705,128707],{},"③ ",[68,128706,128542],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[19,128709,128710],{},"可以理解为给这个标签起了个名字，来表示；",[19,128712,128713],{},"长名称或词组可以使用横线来为选择器命名；",[19,128715,128716],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[19,128718,128719],{},"命名要有意义；",[219,128721],{"style":221,"src":128722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[19,128724,128725],{},"类选择器也可以指定特殊的元素p.center{}",[19,128727,128728],{},"p.center和.center都对",[231,128730,128732],{"className":233,"code":128731,"language":235,"meta":236,"style":236},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[23,128733,128734,128739,128748,128758],{"__ignoreMap":236},[240,128735,128736],{"class":242,"line":243},[240,128737,128738],{"class":246},"\u002F* 类选择器指定特殊元素 *\u002F\n",[240,128740,128741,128743,128746],{"class":242,"line":250},[240,128742,19],{"class":253},[240,128744,128745],{"class":436},".center",[240,128747,258],{"class":257},[240,128749,128750,128752,128754,128756],{"class":242,"line":261},[240,128751,1597],{"class":264},[240,128753,268],{"class":257},[240,128755,971],{"class":264},[240,128757,274],{"class":257},[240,128759,128760],{"class":242,"line":277},[240,128761,312],{"class":257},[32,128763,128765],{"id":128764},"_623-多类名使用","6.2.3 多类名使用",[19,128767,128768],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[219,128770],{"style":221,"src":128771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[19,128773,128774],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[32,128776,128778],{"id":128777},"_624-id选择器","6.2.4 id选择器",[19,128780,128781],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[19,128783,128784],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[219,128786],{"style":221,"src":128787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[19,128789,128790],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[19,128792,128793],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[32,128795,128797],{"id":128796},"_625-通配符选择器","6.2.5 通配符选择器",[19,128799,128800],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[19,128802,128803],{},"* {",[19,128805,128806],{},"color=\"red\"}",[32,128808,128810],{"id":128809},"_626-总结","6.2.6 总结",[219,128812],{"style":221,"src":128813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[14,128815,128817],{"id":128816},"_63-css字体属性","6.3 css字体属性",[19,128819,128820],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[32,128822,128824],{"id":128823},"_631-字体系列","6.3.1 字体系列",[19,128826,128827],{},"font-family: '宋体';",[19,128829,128830,128832],{},[68,128831,87],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[32,128834,128836],{"id":128835},"_632-字体大小","6.3.2 字体大小",[19,128838,128839],{},"font-size: 20px",[19,128841,128842,28419],{},[68,128843,128542],{},[19,128845,128846],{},"①px（像素）大小是网页的最常用单位",[19,128848,128849],{},"②谷歌浏览器默认为16px",[19,128851,128852],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[19,128854,128855],{},"④可以给body指定整个页面的大小：会自动引用",[231,128857,128859],{"className":233,"code":128858,"language":235,"meta":236,"style":236},"body {\n  font-size: 16px;\n}\n",[23,128860,128861,128867,128879],{"__ignoreMap":236},[240,128862,128863,128865],{"class":242,"line":243},[240,128864,53738],{"class":253},[240,128866,258],{"class":257},[240,128868,128869,128871,128873,128875,128877],{"class":242,"line":250},[240,128870,72546],{"class":264},[240,128872,268],{"class":257},[240,128874,2700],{"class":264},[240,128876,289],{"class":288},[240,128878,274],{"class":257},[240,128880,128881],{"class":242,"line":261},[240,128882,312],{"class":257},[19,128884,128885],{},"⑤标题标签比较特殊，需要单独指定大小",[32,128887,128889],{"id":128888},"_633-字体粗细","6.3.3 字体粗细",[19,128891,128892],{},"font-weight: bold;",[19,128894,128895],{},"font-weight: 100；",[19,128897,128898,128900],{},[68,128899,87],{}," ①粗体文字变细：尽量别用normal，多用数字",[19,128902,128903],{},"font-weight= 400;",[19,128905,128906],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[32,128908,128910],{"id":128909},"_634-文字样式","6.3.4 文字样式",[19,128912,128913],{},"font-style: normal；",[19,128915,128916,28419],{},[68,128917,128918],{},"属性值",[19,128920,128921],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[19,128923,128924],{},"②italic：浏览器会显示斜体的字体样式",[219,128926],{"style":221,"src":128927},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[32,128929,128931],{"id":128930},"_635-字体符合属性","6.3.5 字体符合属性",[219,128933],{"style":221,"src":128934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[219,128936],{"style":221,"src":128937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[19,128939,128940],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[19,128942,128943,28419],{},[68,128944,128542],{},[19,128946,128947],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[19,128949,128950],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[19,128952,128953],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[14,128955,128957],{"id":128956},"_64-css-test文本属性","6.4 css test文本属性",[32,128959,128961],{"id":128960},"_641-文本颜色","6.4.1 文本颜色",[19,128963,128964],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[231,128966,128968],{"className":233,"code":128967,"language":235,"meta":236,"style":236},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[23,128969,128970,128975,128981,128991,128996,129001],{"__ignoreMap":236},[240,128971,128972],{"class":242,"line":243},[240,128973,128974],{"class":246},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[240,128976,128977,128979],{"class":242,"line":250},[240,128978,19],{"class":253},[240,128980,258],{"class":257},[240,128982,128983,128985,128987,128989],{"class":242,"line":261},[240,128984,678],{"class":264},[240,128986,268],{"class":257},[240,128988,1953],{"class":264},[240,128990,274],{"class":257},[240,128992,128993],{"class":242,"line":277},[240,128994,128995],{"class":246},"  \u002F* color: #ff0000; *\u002F\n",[240,128997,128998],{"class":242,"line":294},[240,128999,129000],{"class":246},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[240,129002,129003],{"class":242,"line":309},[240,129004,312],{"class":257},[219,129006],{"style":221,"src":129007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[32,129009,129011],{"id":129010},"_642-对齐文本","6.4.2 对齐文本",[19,129013,129014,129015,129018],{},"text-align属于用于设置元素内文本内容的 ",[68,129016,129017],{},"水平对齐"," 方式",[19,129020,129021],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[32,129023,129025],{"id":129024},"_643-装饰文本","6.4.3 装饰文本",[19,129027,129028],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[231,129030,129032],{"className":233,"code":129031,"language":235,"meta":236,"style":236},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[23,129033,129034,129040,129050,129054,129060,129071],{"__ignoreMap":236},[240,129035,129036,129038],{"class":242,"line":243},[240,129037,254],{"class":253},[240,129039,258],{"class":257},[240,129041,129042,129044,129046,129048],{"class":242,"line":250},[240,129043,72425],{"class":264},[240,129045,268],{"class":257},[240,129047,826],{"class":264},[240,129049,274],{"class":257},[240,129051,129052],{"class":242,"line":261},[240,129053,312],{"class":257},[240,129055,129056,129058],{"class":242,"line":277},[240,129057,19],{"class":253},[240,129059,258],{"class":257},[240,129061,129062,129064,129066,129069],{"class":242,"line":294},[240,129063,72425],{"class":264},[240,129065,268],{"class":257},[240,129067,129068],{"class":264},"underline",[240,129070,274],{"class":257},[240,129072,129073],{"class":242,"line":309},[240,129074,312],{"class":257},[32,129076,129078],{"id":129077},"_644-文本缩进","6.4.4 文本缩进",[19,129080,129081],{},"实现文本的第一行首行缩进自己指定的距离",[19,129083,129084],{},"20px往右边走；-20px往左边走",[19,129086,129087],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[231,129089,129091],{"className":233,"code":129090,"language":235,"meta":236,"style":236},"p {\n  text-indent: 2em;\n}\n",[23,129092,129093,129099,129112],{"__ignoreMap":236},[240,129094,129095,129097],{"class":242,"line":243},[240,129096,19],{"class":253},[240,129098,258],{"class":257},[240,129100,129101,129104,129106,129108,129110],{"class":242,"line":250},[240,129102,129103],{"class":264},"  text-indent",[240,129105,268],{"class":257},[240,129107,1668],{"class":264},[240,129109,25500],{"class":288},[240,129111,274],{"class":257},[240,129113,129114],{"class":242,"line":261},[240,129115,312],{"class":257},[32,129117,129119],{"id":129118},"_645-行间距","6.4.5 行间距",[19,129121,129122],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[231,129124,129126],{"className":233,"code":129125,"language":235,"meta":236,"style":236},"p {\n  line-height: 1.6;\n}\n",[23,129127,129128,129134,129145],{"__ignoreMap":236},[240,129129,129130,129132],{"class":242,"line":243},[240,129131,19],{"class":253},[240,129133,258],{"class":257},[240,129135,129136,129138,129140,129143],{"class":242,"line":250},[240,129137,652],{"class":264},[240,129139,268],{"class":257},[240,129141,129142],{"class":264},"1.6",[240,129144,274],{"class":257},[240,129146,129147],{"class":242,"line":261},[240,129148,312],{"class":257},[2019,129150,129151],{},"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":236,"searchDepth":250,"depth":250,"links":129153},[129154,129155,129163,129170],{"id":128636,"depth":250,"text":128637},{"id":128671,"depth":250,"text":128672,"children":129156},[129157,129158,129159,129160,129161,129162],{"id":128678,"depth":261,"text":128679},{"id":128691,"depth":261,"text":128692},{"id":128764,"depth":261,"text":128765},{"id":128777,"depth":261,"text":128778},{"id":128796,"depth":261,"text":128797},{"id":128809,"depth":261,"text":128810},{"id":128816,"depth":250,"text":128817,"children":129164},[129165,129166,129167,129168,129169],{"id":128823,"depth":261,"text":128824},{"id":128835,"depth":261,"text":128836},{"id":128888,"depth":261,"text":128889},{"id":128909,"depth":261,"text":128910},{"id":128930,"depth":261,"text":128931},{"id":128956,"depth":250,"text":128957,"children":129171},[129172,129173,129174,129175,129176],{"id":128960,"depth":261,"text":128961},{"id":129010,"depth":261,"text":129011},{"id":129024,"depth":261,"text":129025},{"id":129077,"depth":261,"text":129078},{"id":129118,"depth":261,"text":129119},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":128628,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":129183,"title":129184,"body":129185,"description":2048,"extension":2049,"meta":129832,"navigation":2051,"path":129833,"seo":129834,"stem":129835,"__hash__":129836},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":129186,"toc":129813},[129187,129190,129194,129198,129256,129260,129270,129273,129276,129280,129305,129309,129312,129315,129318,129321,129324,129328,129331,129334,129376,129379,129405,129411,129414,129418,129422,129428,129431,129434,129437,129440,129443,129446,129491,129495,129498,129501,129505,129509,129538,129541,129546,129549,129552,129555,129558,129562,129566,129569,129571,129574,129578,129581,129585,129588,129591,129594,129598,129602,129608,129618,129621,129624,129627,129630,129633,129756,129764,129772,129810],[10,129188,129184],{"id":129189},"_7-css引入方式与选择器进阶",[14,129191,129193],{"id":129192},"_71-css引入方式","7.1 css引入方式",[32,129195,129197],{"id":129196},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[231,129199,129201],{"className":417,"code":129200,"language":419,"meta":236,"style":236},"\u003Cstyle>\n  h1 {\n    color: blue;\n    font-size: 24px;\n  }\n\u003C\u002Fstyle>\n",[23,129202,129203,129211,129218,129230,129243,129248],{"__ignoreMap":236},[240,129204,129205,129207,129209],{"class":242,"line":243},[240,129206,431],{"class":257},[240,129208,2019],{"class":253},[240,129210,447],{"class":257},[240,129212,129213,129216],{"class":242,"line":250},[240,129214,129215],{"class":253},"  h1",[240,129217,258],{"class":257},[240,129219,129220,129223,129225,129228],{"class":242,"line":261},[240,129221,129222],{"class":264},"    color",[240,129224,268],{"class":257},[240,129226,129227],{"class":264},"blue",[240,129229,274],{"class":257},[240,129231,129232,129235,129237,129239,129241],{"class":242,"line":277},[240,129233,129234],{"class":264},"    font-size",[240,129236,268],{"class":257},[240,129238,2897],{"class":264},[240,129240,289],{"class":288},[240,129242,274],{"class":257},[240,129244,129245],{"class":242,"line":294},[240,129246,129247],{"class":257},"  }\n",[240,129249,129250,129252,129254],{"class":242,"line":309},[240,129251,592],{"class":257},[240,129253,2019],{"class":253},[240,129255,447],{"class":257},[19,129257,129258,28419],{},[68,129259,128542],{},[19,129261,79141,129262,129265,129266,129269],{},[23,129263,129264],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[23,129267,129268],{},"\u003Chead>","标签中",[19,129271,129272],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[19,129274,129275],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[32,129277,129279],{"id":129278},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[231,129281,129283],{"className":417,"code":129282,"language":419,"meta":236,"style":236},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[23,129284,129285],{"__ignoreMap":236},[240,129286,129287,129289,129291,129293,129295,129298,129301,129303],{"class":242,"line":243},[240,129288,431],{"class":257},[240,129290,19],{"class":253},[240,129292,64549],{"class":436},[240,129294,440],{"class":257},[240,129296,129297],{"class":443},"\"color: red; font-size: 16px;\"",[240,129299,129300],{"class":257},">这是一个段落\u003C\u002F",[240,129302,19],{"class":253},[240,129304,447],{"class":257},[19,129306,129307,28419],{},[68,129308,128542],{},[19,129310,129311],{},"①style其实就是标签的属性",[19,129313,129314],{},"②在双引号中间，写法要符合css规范",[19,129316,129317],{},"③可以控制当前的标签设置样式",[19,129319,129320],{},"④书写繁琐，简单时才用",[19,129322,129323],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[32,129325,129327],{"id":129326},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[19,129329,129330],{},"使用最多，单独建一个css文件，然后html引用",[19,129332,129333],{},"①css文件部分： style.css",[231,129335,129337],{"className":233,"code":129336,"language":235,"meta":236,"style":236},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[23,129338,129339,129344,129350,129360,129372],{"__ignoreMap":236},[240,129340,129341],{"class":242,"line":243},[240,129342,129343],{"class":246},"\u002F* style.css *\u002F\n",[240,129345,129346,129348],{"class":242,"line":250},[240,129347,10],{"class":253},[240,129349,258],{"class":257},[240,129351,129352,129354,129356,129358],{"class":242,"line":261},[240,129353,678],{"class":264},[240,129355,268],{"class":257},[240,129357,129227],{"class":264},[240,129359,274],{"class":257},[240,129361,129362,129364,129366,129368,129370],{"class":242,"line":277},[240,129363,72546],{"class":264},[240,129365,268],{"class":257},[240,129367,2897],{"class":264},[240,129369,289],{"class":288},[240,129371,274],{"class":257},[240,129373,129374],{"class":242,"line":294},[240,129375,312],{"class":257},[19,129377,129378],{},"②html部分",[231,129380,129382],{"className":417,"code":129381,"language":419,"meta":236,"style":236},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[23,129383,129384],{"__ignoreMap":236},[240,129385,129386,129388,129390,129392,129394,129396,129398,129400,129403],{"class":242,"line":243},[240,129387,431],{"class":257},[240,129389,70928],{"class":253},[240,129391,70931],{"class":436},[240,129393,440],{"class":257},[240,129395,70936],{"class":443},[240,129397,457],{"class":436},[240,129399,440],{"class":257},[240,129401,129402],{"class":443},"\"style.css\"",[240,129404,447],{"class":257},[19,129406,129407,129410],{},[23,129408,129409],{},"\u003Chr>","水平线标签（但是不常用！）",[19,129412,129413],{},"ctrl+0回到页面原来大小",[14,129415,129417],{"id":129416},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[32,129419,129421],{"id":129420},"_721-快速生成html","7.2.1 快速生成html",[19,129423,129424,129425],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[23,129426,129427],{},"\u003Cdiv>``\u003C\u002Fdiv>",[19,129429,129430],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[19,129432,129433],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[19,129435,129436],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[19,129438,129439],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[19,129441,129442],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[19,129444,129445],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[231,129447,129449],{"className":417,"code":129448,"language":419,"meta":236,"style":236},"\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",[23,129450,129451,129456,129461,129466,129471,129476,129481,129486],{"__ignoreMap":236},[240,129452,129453],{"class":242,"line":243},[240,129454,129455],{"class":246},"\u003C!-- Emmet 语法示例 -->\n",[240,129457,129458],{"class":242,"line":250},[240,129459,129460],{"class":246},"\u003C!-- div*3        → 生成3个div -->\n",[240,129462,129463],{"class":242,"line":261},[240,129464,129465],{"class":246},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[240,129467,129468],{"class":242,"line":277},[240,129469,129470],{"class":246},"\u003C!-- div+p        → 兄弟div和p -->\n",[240,129472,129473],{"class":242,"line":294},[240,129474,129475],{"class":246},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[240,129477,129478],{"class":242,"line":309},[240,129479,129480],{"class":246},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[240,129482,129483],{"class":242,"line":529},[240,129484,129485],{"class":246},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[240,129487,129488],{"class":242,"line":549},[240,129489,129490],{"class":246},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[32,129492,129494],{"id":129493},"_722-快速生成css","7.2.2 快速生成css",[19,129496,129497],{},"简写开头",[19,129499,129500],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[14,129502,129504],{"id":129503},"_73-css复合选择器","7.3 css复合选择器",[32,129506,129508],{"id":129507},"_731-后代选择器","7.3.1 后代选择器",[231,129510,129512],{"className":233,"code":129511,"language":235,"meta":236,"style":236},".parent .child {\n  color: blue;\n}\n",[23,129513,129514,129524,129534],{"__ignoreMap":236},[240,129515,129516,129519,129522],{"class":242,"line":243},[240,129517,129518],{"class":436},".parent",[240,129520,129521],{"class":436}," .child",[240,129523,258],{"class":257},[240,129525,129526,129528,129530,129532],{"class":242,"line":250},[240,129527,678],{"class":264},[240,129529,268],{"class":257},[240,129531,129227],{"class":264},[240,129533,274],{"class":257},[240,129535,129536],{"class":242,"line":261},[240,129537,312],{"class":257},[19,129539,129540],{},"元素1 元素2 {样式声明}",[19,129542,129543],{},[68,129544,129545],{},"注意点:",[19,129547,129548],{},"①元素1和元素2中间用空格隔开",[19,129550,129551],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[19,129553,129554],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[19,129556,129557],{},"④元素1和元素2可以是任意基础选择器",[32,129559,129561],{"id":129560},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[19,129563,129564],{},[68,129565,129545],{},[19,129567,129568],{},"①元素1和元素2中间用大于号隔开",[19,129570,129551],{},[19,129572,129573],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[32,129575,129577],{"id":129576},"_733-并集选择器","7.3.3 并集选择器",[19,129579,129580],{},"元素1，元素2 {样式声明}",[19,129582,129583],{},[68,129584,129545],{},[19,129586,129587],{},"①元素1和元素2中间用逗号隔开",[19,129589,129590],{},"②逗号可以理解为和的意思",[19,129592,129593],{},"③并集选择器通常用于集体声明",[32,129595,129597],{"id":129596},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[19,129599,129600],{},[68,129601,129545],{},[19,129603,129604,129605,129607],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[70928,129606],{},"－:visited－:hover－:active。",[19,129609,129610,129611,129614,129615,27687],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[129612,129613],"hover",{}," 、 ",[129616,129617],"first-child",{},[19,129619,129620],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[19,129622,129623],{},"link对没访问的进行设置",[19,129625,129626],{},"vistied对已访问的进行改变",[19,129628,129629],{},"hover鼠标经过就会变",[19,129631,129632],{},"active常按(点)就会变",[231,129634,129636],{"className":233,"code":129635,"language":235,"meta":236,"style":236},"\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",[23,129637,129638,129643,129652,129662,129672,129676,129685,129696,129700,129708,129718,129728,129732,129741,129752],{"__ignoreMap":236},[240,129639,129640],{"class":242,"line":243},[240,129641,129642],{"class":246},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[240,129644,129645,129647,129650],{"class":242,"line":250},[240,129646,254],{"class":253},[240,129648,129649],{"class":436},":link",[240,129651,258],{"class":257},[240,129653,129654,129656,129658,129660],{"class":242,"line":261},[240,129655,678],{"class":264},[240,129657,268],{"class":257},[240,129659,1799],{"class":264},[240,129661,274],{"class":257},[240,129663,129664,129666,129668,129670],{"class":242,"line":277},[240,129665,72425],{"class":264},[240,129667,268],{"class":257},[240,129669,826],{"class":264},[240,129671,274],{"class":257},[240,129673,129674],{"class":242,"line":294},[240,129675,312],{"class":257},[240,129677,129678,129680,129683],{"class":242,"line":309},[240,129679,254],{"class":253},[240,129681,129682],{"class":436},":visited",[240,129684,258],{"class":257},[240,129686,129687,129689,129691,129694],{"class":242,"line":529},[240,129688,678],{"class":264},[240,129690,268],{"class":257},[240,129692,129693],{"class":264},"purple",[240,129695,274],{"class":257},[240,129697,129698],{"class":242,"line":549},[240,129699,312],{"class":257},[240,129701,129702,129704,129706],{"class":242,"line":569},[240,129703,254],{"class":253},[240,129705,710],{"class":436},[240,129707,258],{"class":257},[240,129709,129710,129712,129714,129716],{"class":242,"line":589},[240,129711,678],{"class":264},[240,129713,268],{"class":257},[240,129715,56823],{"class":264},[240,129717,274],{"class":257},[240,129719,129720,129722,129724,129726],{"class":242,"line":715},[240,129721,72425],{"class":264},[240,129723,268],{"class":257},[240,129725,129068],{"class":264},[240,129727,274],{"class":257},[240,129729,129730],{"class":242,"line":727},[240,129731,312],{"class":257},[240,129733,129734,129736,129739],{"class":242,"line":1730},[240,129735,254],{"class":253},[240,129737,129738],{"class":436},":active",[240,129740,258],{"class":257},[240,129742,129743,129745,129747,129750],{"class":242,"line":3582},[240,129744,678],{"class":264},[240,129746,268],{"class":257},[240,129748,129749],{"class":264},"green",[240,129751,274],{"class":257},[240,129753,129754],{"class":242,"line":3596},[240,129755,312],{"class":257},[32,129757,129759,129760,129763],{"id":129758},"_735-伪类选择器","7.3.5 ",[129761,129762],"focus",{},"伪类选择器",[19,129765,129766,129768,129769,129771],{},[129761,129767],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[23,129770,128515],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[231,129773,129775],{"className":233,"code":129774,"language":235,"meta":236,"style":236},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[23,129776,129777,129785,129796,129806],{"__ignoreMap":236},[240,129778,129779,129781,129783],{"class":242,"line":243},[240,129780,55756],{"class":253},[240,129782,63824],{"class":436},[240,129784,258],{"class":257},[240,129786,129787,129790,129792,129794],{"class":242,"line":250},[240,129788,129789],{"class":264},"  border-color",[240,129791,268],{"class":257},[240,129793,56823],{"class":264},[240,129795,274],{"class":257},[240,129797,129798,129800,129802,129804],{"class":242,"line":261},[240,129799,72717],{"class":264},[240,129801,268],{"class":257},[240,129803,826],{"class":264},[240,129805,274],{"class":257},[240,129807,129808],{"class":242,"line":277},[240,129809,312],{"class":257},[2019,129811,129812],{},"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":236,"searchDepth":250,"depth":250,"links":129814},[129815,129820,129824],{"id":129192,"depth":250,"text":129193,"children":129816},[129817,129818,129819],{"id":129196,"depth":261,"text":129197},{"id":129278,"depth":261,"text":129279},{"id":129326,"depth":261,"text":129327},{"id":129416,"depth":250,"text":129417,"children":129821},[129822,129823],{"id":129420,"depth":261,"text":129421},{"id":129493,"depth":261,"text":129494},{"id":129503,"depth":250,"text":129504,"children":129825},[129826,129827,129828,129829,129830],{"id":129507,"depth":261,"text":129508},{"id":129560,"depth":261,"text":129561},{"id":129576,"depth":261,"text":129577},{"id":129596,"depth":261,"text":129597},{"id":129758,"depth":261,"text":129831},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":129184,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":4,"title":5,"body":129838,"description":2048,"extension":2049,"meta":131492,"navigation":2051,"path":2052,"seo":131493,"stem":2054,"__hash__":2055},{"type":7,"value":129839,"toc":131466},[129840,129842,129844,129850,129852,129870,129874,129876,129878,129880,129882,129886,129888,129896,129902,129904,129928,129932,129934,129936,129938,129940,129944,129946,129952,129954,129962,129966,129968,129970,129972,129974,129976,129978,129980,130032,130034,130062,130064,130116,130118,130120,130276,130394,130396,130398,130400,130402,130404,130406,130408,130410,130412,130414,130416,130444,130468,130496,130498,130500,130524,130560,130562,130650,130652,130676,130678,130680,130682,130684,130686,130688,130690,130692,130694,130696,130748,130772,130774,130818,130820,130860,130862,130864,130866,130868,130870,130872,130942,130944,130946,130948,130950,131066,131258,131260,131262,131264,131266,131268,131270,131272,131274,131298,131300,131302,131304,131306,131308,131310,131316,131364,131366,131420,131422,131424,131426,131428,131430,131432,131434,131464],[10,129841,5],{"id":12},[14,129843,17],{"id":16},[19,129845,21,129846,26,129848,30],{},[23,129847,25],{},[23,129849,29],{},[32,129851,35],{"id":34},[19,129853,38,129854,42,129856,46,129858,46,129860,46,129862,46,129864,46,129866,61,129868,64],{},[23,129855,41],{},[23,129857,45],{},[23,129859,49],{},[23,129861,25],{},[23,129863,54],{},[23,129865,57],{},[23,129867,60],{},[23,129869,25],{},[19,129871,129872],{},[68,129873,70],{},[19,129875,73],{},[19,129877,76],{},[19,129879,79],{},[19,129881,82],{},[19,129883,129884],{},[68,129885,87],{},[19,129887,90],{},[19,129889,93,129890,96,129892,99,129894],{},[23,129891,49],{},[23,129893,49],{},[23,129895,25],{},[19,129897,104,129898,42,129900,109],{},[23,129899,41],{},[23,129901,45],{},[32,129903,113],{"id":112},[19,129905,116,129906,46,129908,46,129910,46,129912,46,129914,46,129916,46,129918,46,129920,46,129922,46,129924,146,129926,149],{},[23,129907,119],{},[23,129909,122],{},[23,129911,125],{},[23,129913,128],{},[23,129915,131],{},[23,129917,134],{},[23,129919,137],{},[23,129921,140],{},[23,129923,143],{},[23,129925,29],{},[23,129927,29],{},[19,129929,129930],{},[68,129931,154],{},[19,129933,157],{},[19,129935,160],{},[19,129937,163],{},[19,129939,166],{},[19,129941,129942],{},[68,129943,87],{},[19,129945,173],{},[19,129947,176,129948,179,129950,182],{},[23,129949,119],{},[23,129951,119],{},[32,129953,186],{"id":185},[19,129955,189,129956,46,129958,46,129960,199],{},[23,129957,192],{},[23,129959,195],{},[23,129961,198],{},[19,129963,129964],{},[68,129965,204],{},[19,129967,207],{},[19,129969,210],{},[19,129971,213],{},[32,129973,217],{"id":216},[219,129975],{"style":221,"src":222},[32,129977,226],{"id":225},[19,129979,229],{},[231,129981,129982],{"className":233,"code":234,"language":235,"meta":236,"style":236},[23,129983,129984,129988,129994,130004,130016,130028],{"__ignoreMap":236},[240,129985,129986],{"class":242,"line":243},[240,129987,247],{"class":246},[240,129989,129990,129992],{"class":242,"line":250},[240,129991,254],{"class":253},[240,129993,258],{"class":257},[240,129995,129996,129998,130000,130002],{"class":242,"line":261},[240,129997,265],{"class":264},[240,129999,268],{"class":257},[240,130001,271],{"class":264},[240,130003,274],{"class":257},[240,130005,130006,130008,130010,130012,130014],{"class":242,"line":277},[240,130007,280],{"class":264},[240,130009,268],{"class":257},[240,130011,285],{"class":264},[240,130013,289],{"class":288},[240,130015,274],{"class":257},[240,130017,130018,130020,130022,130024,130026],{"class":242,"line":294},[240,130019,297],{"class":264},[240,130021,268],{"class":257},[240,130023,302],{"class":264},[240,130025,289],{"class":288},[240,130027,274],{"class":257},[240,130029,130030],{"class":242,"line":309},[240,130031,312],{"class":257},[19,130033,315],{},[231,130035,130036],{"className":233,"code":318,"language":235,"meta":236,"style":236},[23,130037,130038,130042,130048,130058],{"__ignoreMap":236},[240,130039,130040],{"class":242,"line":243},[240,130041,325],{"class":246},[240,130043,130044,130046],{"class":242,"line":250},[240,130045,330],{"class":253},[240,130047,258],{"class":257},[240,130049,130050,130052,130054,130056],{"class":242,"line":261},[240,130051,265],{"class":264},[240,130053,268],{"class":257},[240,130055,341],{"class":264},[240,130057,274],{"class":257},[240,130059,130060],{"class":242,"line":277},[240,130061,312],{"class":257},[19,130063,350],{},[231,130065,130066],{"className":233,"code":353,"language":235,"meta":236,"style":236},[23,130067,130068,130072,130078,130088,130100,130112],{"__ignoreMap":236},[240,130069,130070],{"class":242,"line":243},[240,130071,360],{"class":246},[240,130073,130074,130076],{"class":242,"line":250},[240,130075,240],{"class":253},[240,130077,258],{"class":257},[240,130079,130080,130082,130084,130086],{"class":242,"line":261},[240,130081,265],{"class":264},[240,130083,268],{"class":257},[240,130085,375],{"class":264},[240,130087,274],{"class":257},[240,130089,130090,130092,130094,130096,130098],{"class":242,"line":277},[240,130091,280],{"class":264},[240,130093,268],{"class":257},[240,130095,386],{"class":264},[240,130097,289],{"class":288},[240,130099,274],{"class":257},[240,130101,130102,130104,130106,130108,130110],{"class":242,"line":294},[240,130103,297],{"class":264},[240,130105,268],{"class":257},[240,130107,399],{"class":264},[240,130109,289],{"class":288},[240,130111,274],{"class":257},[240,130113,130114],{"class":242,"line":309},[240,130115,312],{"class":257},[32,130117,411],{"id":410},[219,130119],{"style":221,"src":414},[231,130121,130122],{"className":417,"code":418,"language":419,"meta":236,"style":236},[23,130123,130124,130128,130142,130160,130178,130196,130214,130232,130250,130268],{"__ignoreMap":236},[240,130125,130126],{"class":242,"line":243},[240,130127,426],{"class":246},[240,130129,130130,130132,130134,130136,130138,130140],{"class":242,"line":250},[240,130131,431],{"class":257},[240,130133,330],{"class":253},[240,130135,437],{"class":436},[240,130137,440],{"class":257},[240,130139,444],{"class":443},[240,130141,447],{"class":257},[240,130143,130144,130146,130148,130150,130152,130154,130156,130158],{"class":242,"line":261},[240,130145,452],{"class":257},[240,130147,254],{"class":253},[240,130149,457],{"class":436},[240,130151,440],{"class":257},[240,130153,462],{"class":443},[240,130155,465],{"class":257},[240,130157,254],{"class":253},[240,130159,447],{"class":257},[240,130161,130162,130164,130166,130168,130170,130172,130174,130176],{"class":242,"line":277},[240,130163,452],{"class":257},[240,130165,254],{"class":253},[240,130167,457],{"class":436},[240,130169,440],{"class":257},[240,130171,462],{"class":443},[240,130173,484],{"class":257},[240,130175,254],{"class":253},[240,130177,447],{"class":257},[240,130179,130180,130182,130184,130186,130188,130190,130192,130194],{"class":242,"line":294},[240,130181,452],{"class":257},[240,130183,254],{"class":253},[240,130185,457],{"class":436},[240,130187,440],{"class":257},[240,130189,462],{"class":443},[240,130191,503],{"class":257},[240,130193,254],{"class":253},[240,130195,447],{"class":257},[240,130197,130198,130200,130202,130204,130206,130208,130210,130212],{"class":242,"line":309},[240,130199,452],{"class":257},[240,130201,254],{"class":253},[240,130203,457],{"class":436},[240,130205,440],{"class":257},[240,130207,462],{"class":443},[240,130209,522],{"class":257},[240,130211,254],{"class":253},[240,130213,447],{"class":257},[240,130215,130216,130218,130220,130222,130224,130226,130228,130230],{"class":242,"line":529},[240,130217,452],{"class":257},[240,130219,254],{"class":253},[240,130221,457],{"class":436},[240,130223,440],{"class":257},[240,130225,462],{"class":443},[240,130227,542],{"class":257},[240,130229,254],{"class":253},[240,130231,447],{"class":257},[240,130233,130234,130236,130238,130240,130242,130244,130246,130248],{"class":242,"line":549},[240,130235,452],{"class":257},[240,130237,254],{"class":253},[240,130239,457],{"class":436},[240,130241,440],{"class":257},[240,130243,462],{"class":443},[240,130245,562],{"class":257},[240,130247,254],{"class":253},[240,130249,447],{"class":257},[240,130251,130252,130254,130256,130258,130260,130262,130264,130266],{"class":242,"line":569},[240,130253,452],{"class":257},[240,130255,254],{"class":253},[240,130257,457],{"class":436},[240,130259,440],{"class":257},[240,130261,462],{"class":443},[240,130263,582],{"class":257},[240,130265,254],{"class":253},[240,130267,447],{"class":257},[240,130269,130270,130272,130274],{"class":242,"line":589},[240,130271,592],{"class":257},[240,130273,330],{"class":253},[240,130275,447],{"class":257},[231,130277,130278],{"className":233,"code":599,"language":235,"meta":236,"style":236},[23,130279,130280,130288,130298,130310,130322,130334,130346,130356,130366,130370,130380,130390],{"__ignoreMap":236},[240,130281,130282,130284,130286],{"class":242,"line":243},[240,130283,606],{"class":436},[240,130285,609],{"class":253},[240,130287,258],{"class":257},[240,130289,130290,130292,130294,130296],{"class":242,"line":250},[240,130291,265],{"class":264},[240,130293,268],{"class":257},[240,130295,271],{"class":264},[240,130297,274],{"class":257},[240,130299,130300,130302,130304,130306,130308],{"class":242,"line":261},[240,130301,280],{"class":264},[240,130303,268],{"class":257},[240,130305,630],{"class":264},[240,130307,289],{"class":288},[240,130309,274],{"class":257},[240,130311,130312,130314,130316,130318,130320],{"class":242,"line":277},[240,130313,297],{"class":264},[240,130315,268],{"class":257},[240,130317,643],{"class":264},[240,130319,289],{"class":288},[240,130321,274],{"class":257},[240,130323,130324,130326,130328,130330,130332],{"class":242,"line":294},[240,130325,652],{"class":264},[240,130327,268],{"class":257},[240,130329,643],{"class":264},[240,130331,289],{"class":288},[240,130333,274],{"class":257},[240,130335,130336,130338,130340,130342,130344],{"class":242,"line":309},[240,130337,665],{"class":264},[240,130339,268],{"class":257},[240,130341,399],{"class":264},[240,130343,289],{"class":288},[240,130345,274],{"class":257},[240,130347,130348,130350,130352,130354],{"class":242,"line":529},[240,130349,678],{"class":264},[240,130351,268],{"class":257},[240,130353,683],{"class":264},[240,130355,274],{"class":257},[240,130357,130358,130360,130362,130364],{"class":242,"line":549},[240,130359,690],{"class":264},[240,130361,268],{"class":257},[240,130363,695],{"class":264},[240,130365,274],{"class":257},[240,130367,130368],{"class":242,"line":569},[240,130369,312],{"class":257},[240,130371,130372,130374,130376,130378],{"class":242,"line":589},[240,130373,606],{"class":436},[240,130375,609],{"class":253},[240,130377,710],{"class":436},[240,130379,258],{"class":257},[240,130381,130382,130384,130386,130388],{"class":242,"line":715},[240,130383,690],{"class":264},[240,130385,268],{"class":257},[240,130387,722],{"class":264},[240,130389,274],{"class":257},[240,130391,130392],{"class":242,"line":727},[240,130393,312],{"class":257},[219,130395],{"style":221,"src":732},[19,130397,735],{},[19,130399,738],{},[219,130401],{"style":221,"src":741},[14,130403,745],{"id":744},[19,130405,748],{},[32,130407,752],{"id":751},[19,130409,755],{},[19,130411,758],{},[32,130413,762],{"id":761},[19,130415,765],{},[231,130417,130418],{"className":233,"code":768,"language":235,"meta":236,"style":236},[23,130419,130420,130426,130440],{"__ignoreMap":236},[240,130421,130422,130424],{"class":242,"line":243},[240,130423,330],{"class":253},[240,130425,258],{"class":257},[240,130427,130428,130430,130432,130434,130436,130438],{"class":242,"line":250},[240,130429,781],{"class":264},[240,130431,268],{"class":257},[240,130433,786],{"class":264},[240,130435,789],{"class":257},[240,130437,793],{"class":792},[240,130439,796],{"class":257},[240,130441,130442],{"class":242,"line":261},[240,130443,312],{"class":257},[802,130445,130446,130454],{},[805,130447,130448],{},[808,130449,130450,130452],{},[811,130451,814],{"align":813},[811,130453,817],{"align":813},[819,130455,130456,130462],{},[808,130457,130458,130460],{},[824,130459,826],{"align":813},[824,130461,829],{"align":813},[808,130463,130464,130466],{},[824,130465,786],{"align":813},[824,130467,836],{"align":813},[231,130469,130470],{"className":233,"code":768,"language":235,"meta":236,"style":236},[23,130471,130472,130478,130492],{"__ignoreMap":236},[240,130473,130474,130476],{"class":242,"line":243},[240,130475,330],{"class":253},[240,130477,258],{"class":257},[240,130479,130480,130482,130484,130486,130488,130490],{"class":242,"line":250},[240,130481,781],{"class":264},[240,130483,268],{"class":257},[240,130485,786],{"class":264},[240,130487,789],{"class":257},[240,130489,793],{"class":792},[240,130491,796],{"class":257},[240,130493,130494],{"class":242,"line":261},[240,130495,312],{"class":257},[19,130497,867],{},[32,130499,871],{"id":870},[231,130501,130502],{"className":233,"code":874,"language":235,"meta":236,"style":236},[23,130503,130504,130510,130520],{"__ignoreMap":236},[240,130505,130506,130508],{"class":242,"line":243},[240,130507,330],{"class":253},[240,130509,258],{"class":257},[240,130511,130512,130514,130516,130518],{"class":242,"line":250},[240,130513,887],{"class":264},[240,130515,268],{"class":257},[240,130517,892],{"class":264},[240,130519,274],{"class":257},[240,130521,130522],{"class":242,"line":261},[240,130523,312],{"class":257},[802,130525,130526,130534],{},[805,130527,130528],{},[808,130529,130530,130532],{},[811,130531,814],{"align":813},[811,130533,817],{"align":813},[819,130535,130536,130542,130548,130554],{},[808,130537,130538,130540],{},[824,130539,915],{"align":813},[824,130541,918],{"align":813},[808,130543,130544,130546],{},[824,130545,892],{"align":813},[824,130547,925],{"align":813},[808,130549,130550,130552],{},[824,130551,930],{"align":813},[824,130553,933],{"align":813},[808,130555,130556,130558],{},[824,130557,938],{"align":813},[824,130559,941],{"align":813},[32,130561,945],{"id":944},[231,130563,130564],{"className":233,"code":948,"language":235,"meta":236,"style":236},[23,130565,130566,130570,130576,130588,130592,130596,130602,130618,130622,130626,130632,130646],{"__ignoreMap":236},[240,130567,130568],{"class":242,"line":243},[240,130569,955],{"class":246},[240,130571,130572,130574],{"class":242,"line":250},[240,130573,330],{"class":253},[240,130575,258],{"class":257},[240,130577,130578,130580,130582,130584,130586],{"class":242,"line":261},[240,130579,966],{"class":264},[240,130581,268],{"class":257},[240,130583,971],{"class":264},[240,130585,974],{"class":264},[240,130587,274],{"class":257},[240,130589,130590],{"class":242,"line":277},[240,130591,312],{"class":257},[240,130593,130594],{"class":242,"line":294},[240,130595,985],{"class":246},[240,130597,130598,130600],{"class":242,"line":309},[240,130599,330],{"class":253},[240,130601,258],{"class":257},[240,130603,130604,130606,130608,130610,130612,130614,130616],{"class":242,"line":529},[240,130605,966],{"class":264},[240,130607,268],{"class":257},[240,130609,1000],{"class":264},[240,130611,289],{"class":288},[240,130613,1005],{"class":264},[240,130615,289],{"class":288},[240,130617,274],{"class":257},[240,130619,130620],{"class":242,"line":549},[240,130621,312],{"class":257},[240,130623,130624],{"class":242,"line":569},[240,130625,1018],{"class":246},[240,130627,130628,130630],{"class":242,"line":589},[240,130629,330],{"class":253},[240,130631,258],{"class":257},[240,130633,130634,130636,130638,130640,130642,130644],{"class":242,"line":715},[240,130635,966],{"class":264},[240,130637,268],{"class":257},[240,130639,1000],{"class":264},[240,130641,289],{"class":288},[240,130643,1037],{"class":264},[240,130645,274],{"class":257},[240,130647,130648],{"class":242,"line":727},[240,130649,312],{"class":257},[19,130651,1046],{},[802,130653,130654,130662],{},[805,130655,130656],{},[808,130657,130658,130660],{},[811,130659,814],{"align":813},[811,130661,1057],{"align":813},[819,130663,130664,130670],{},[808,130665,130666,130668],{},[824,130667,1064],{"align":813},[824,130669,1067],{"align":813},[808,130671,130672,130674],{},[824,130673,1072],{"align":813},[824,130675,1075],{"align":813},[19,130677,1078],{},[19,130679,1081],{},[19,130681,1084],{},[19,130683,1087],{},[19,130685,1090],{},[19,130687,1093],{},[19,130689,1096],{},[19,130691,1099],{},[19,130693,1102],{},[32,130695,1106],{"id":1105},[231,130697,130698],{"className":233,"code":1109,"language":235,"meta":236,"style":236},[23,130699,130700,130704,130710,130720,130724,130728,130734,130744],{"__ignoreMap":236},[240,130701,130702],{"class":242,"line":243},[240,130703,1116],{"class":246},[240,130705,130706,130708],{"class":242,"line":250},[240,130707,330],{"class":253},[240,130709,258],{"class":257},[240,130711,130712,130714,130716,130718],{"class":242,"line":261},[240,130713,1127],{"class":264},[240,130715,268],{"class":257},[240,130717,1132],{"class":264},[240,130719,274],{"class":257},[240,130721,130722],{"class":242,"line":277},[240,130723,312],{"class":257},[240,130725,130726],{"class":242,"line":294},[240,130727,1143],{"class":246},[240,130729,130730,130732],{"class":242,"line":309},[240,130731,330],{"class":253},[240,130733,258],{"class":257},[240,130735,130736,130738,130740,130742],{"class":242,"line":529},[240,130737,1127],{"class":264},[240,130739,268],{"class":257},[240,130741,1158],{"class":264},[240,130743,274],{"class":257},[240,130745,130746],{"class":242,"line":549},[240,130747,312],{"class":257},[802,130749,130750,130758],{},[805,130751,130752],{},[808,130753,130754,130756],{},[811,130755,1173],{"align":813},[811,130757,817],{"align":813},[819,130759,130760,130766],{},[808,130761,130762,130764],{},[824,130763,1132],{"align":813},[824,130765,1184],{"align":813},[808,130767,130768,130770],{},[824,130769,1158],{"align":813},[824,130771,1191],{"align":813},[32,130773,1195],{"id":1194},[231,130775,130776],{"className":233,"code":1198,"language":235,"meta":236,"style":236},[23,130777,130778,130782,130788,130814],{"__ignoreMap":236},[240,130779,130780],{"class":242,"line":243},[240,130781,1205],{"class":246},[240,130783,130784,130786],{"class":242,"line":250},[240,130785,330],{"class":253},[240,130787,258],{"class":257},[240,130789,130790,130792,130794,130796,130798,130800,130802,130804,130806,130808,130810,130812],{"class":242,"line":261},[240,130791,1216],{"class":264},[240,130793,268],{"class":257},[240,130795,683],{"class":264},[240,130797,1223],{"class":264},[240,130799,789],{"class":257},[240,130801,793],{"class":792},[240,130803,1230],{"class":257},[240,130805,892],{"class":264},[240,130807,1235],{"class":264},[240,130809,1037],{"class":264},[240,130811,974],{"class":264},[240,130813,274],{"class":257},[240,130815,130816],{"class":242,"line":277},[240,130817,312],{"class":257},[32,130819,1249],{"id":1248},[231,130821,130822],{"className":233,"code":1252,"language":235,"meta":236,"style":236},[23,130823,130824,130830,130856],{"__ignoreMap":236},[240,130825,130826,130828],{"class":242,"line":243},[240,130827,330],{"class":253},[240,130829,258],{"class":257},[240,130831,130832,130834,130836,130838,130840,130842,130844,130846,130848,130850,130852,130854],{"class":242,"line":250},[240,130833,1216],{"class":264},[240,130835,268],{"class":257},[240,130837,1269],{"class":264},[240,130839,789],{"class":257},[240,130841,1274],{"class":264},[240,130843,1277],{"class":257},[240,130845,1274],{"class":264},[240,130847,1277],{"class":257},[240,130849,1274],{"class":264},[240,130851,1277],{"class":257},[240,130853,1288],{"class":264},[240,130855,796],{"class":257},[240,130857,130858],{"class":242,"line":261},[240,130859,312],{"class":257},[19,130861,1297],{},[19,130863,1300],{},[19,130865,1303],{},[19,130867,1306],{},[19,130869,1309],{},[32,130871,1313],{"id":1312},[802,130873,130874,130884],{},[805,130875,130876],{},[808,130877,130878,130880,130882],{},[811,130879,1322],{"align":813},[811,130881,817],{"align":813},[811,130883,1327],{"align":813},[819,130885,130886,130894,130902,130910,130918,130926,130934],{},[808,130887,130888,130890,130892],{},[824,130889,1334],{"align":813},[824,130891,1337],{"align":813},[824,130893,1340],{"align":813},[808,130895,130896,130898,130900],{},[824,130897,1345],{"align":813},[824,130899,1348],{"align":813},[824,130901,1351],{"align":813},[808,130903,130904,130906,130908],{},[824,130905,1356],{"align":813},[824,130907,1359],{"align":813},[824,130909,1362],{"align":813},[808,130911,130912,130914,130916],{},[824,130913,1367],{"align":813},[824,130915,1370],{"align":813},[824,130917,1373],{"align":813},[808,130919,130920,130922,130924],{},[824,130921,1378],{"align":813},[824,130923,1381],{"align":813},[824,130925,1384],{"align":813},[808,130927,130928,130930,130932],{},[824,130929,1389],{"align":813},[824,130931,1392],{"align":813},[824,130933,1395],{"align":813},[808,130935,130936,130938,130940],{},[824,130937,1400],{"align":813},[824,130939,1403],{"align":813},[824,130941,1406],{"align":813},[19,130943,1409],{},[219,130945],{"style":221,"src":1412},[219,130947],{"style":221,"src":1415},[32,130949,1419],{"id":1418},[231,130951,130952],{"className":417,"code":1422,"language":419,"meta":236,"style":236},[23,130953,130954,130968,130986,131004,131022,131040,131058],{"__ignoreMap":236},[240,130955,130956,130958,130960,130962,130964,130966],{"class":242,"line":243},[240,130957,431],{"class":257},[240,130959,330],{"class":253},[240,130961,437],{"class":436},[240,130963,440],{"class":257},[240,130965,1437],{"class":443},[240,130967,447],{"class":257},[240,130969,130970,130972,130974,130976,130978,130980,130982,130984],{"class":242,"line":250},[240,130971,452],{"class":257},[240,130973,254],{"class":253},[240,130975,457],{"class":436},[240,130977,440],{"class":257},[240,130979,462],{"class":443},[240,130981,1454],{"class":257},[240,130983,254],{"class":253},[240,130985,447],{"class":257},[240,130987,130988,130990,130992,130994,130996,130998,131000,131002],{"class":242,"line":261},[240,130989,452],{"class":257},[240,130991,254],{"class":253},[240,130993,457],{"class":436},[240,130995,440],{"class":257},[240,130997,462],{"class":443},[240,130999,1473],{"class":257},[240,131001,254],{"class":253},[240,131003,447],{"class":257},[240,131005,131006,131008,131010,131012,131014,131016,131018,131020],{"class":242,"line":277},[240,131007,452],{"class":257},[240,131009,254],{"class":253},[240,131011,457],{"class":436},[240,131013,440],{"class":257},[240,131015,462],{"class":443},[240,131017,1492],{"class":257},[240,131019,254],{"class":253},[240,131021,447],{"class":257},[240,131023,131024,131026,131028,131030,131032,131034,131036,131038],{"class":242,"line":294},[240,131025,452],{"class":257},[240,131027,254],{"class":253},[240,131029,457],{"class":436},[240,131031,440],{"class":257},[240,131033,462],{"class":443},[240,131035,1511],{"class":257},[240,131037,254],{"class":253},[240,131039,447],{"class":257},[240,131041,131042,131044,131046,131048,131050,131052,131054,131056],{"class":242,"line":309},[240,131043,452],{"class":257},[240,131045,254],{"class":253},[240,131047,457],{"class":436},[240,131049,440],{"class":257},[240,131051,462],{"class":443},[240,131053,1530],{"class":257},[240,131055,254],{"class":253},[240,131057,447],{"class":257},[240,131059,131060,131062,131064],{"class":242,"line":529},[240,131061,592],{"class":257},[240,131063,330],{"class":253},[240,131065,447],{"class":257},[231,131067,131068],{"className":233,"code":1545,"language":235,"meta":236,"style":236},[23,131069,131070,131078,131088,131100,131112,131122,131134,131144,131148,131170,131192,131214,131236],{"__ignoreMap":236},[240,131071,131072,131074,131076],{"class":242,"line":243},[240,131073,1552],{"class":436},[240,131075,609],{"class":253},[240,131077,258],{"class":257},[240,131079,131080,131082,131084,131086],{"class":242,"line":250},[240,131081,265],{"class":264},[240,131083,268],{"class":257},[240,131085,375],{"class":264},[240,131087,274],{"class":257},[240,131089,131090,131092,131094,131096,131098],{"class":242,"line":261},[240,131091,280],{"class":264},[240,131093,268],{"class":257},[240,131095,1575],{"class":264},[240,131097,289],{"class":288},[240,131099,274],{"class":257},[240,131101,131102,131104,131106,131108,131110],{"class":242,"line":277},[240,131103,297],{"class":264},[240,131105,268],{"class":257},[240,131107,1588],{"class":264},[240,131109,289],{"class":288},[240,131111,274],{"class":257},[240,131113,131114,131116,131118,131120],{"class":242,"line":294},[240,131115,1597],{"class":264},[240,131117,268],{"class":257},[240,131119,971],{"class":264},[240,131121,274],{"class":257},[240,131123,131124,131126,131128,131130,131132],{"class":242,"line":309},[240,131125,652],{"class":264},[240,131127,268],{"class":257},[240,131129,1588],{"class":264},[240,131131,289],{"class":288},[240,131133,274],{"class":257},[240,131135,131136,131138,131140,131142],{"class":242,"line":529},[240,131137,678],{"class":264},[240,131139,268],{"class":257},[240,131141,683],{"class":264},[240,131143,274],{"class":257},[240,131145,131146],{"class":242,"line":549},[240,131147,312],{"class":257},[240,131149,131150,131152,131154,131156,131158,131160,131162,131164,131166,131168],{"class":242,"line":569},[240,131151,1552],{"class":436},[240,131153,609],{"class":253},[240,131155,1638],{"class":436},[240,131157,789],{"class":257},[240,131159,1643],{"class":264},[240,131161,1646],{"class":257},[240,131163,1334],{"class":264},[240,131165,268],{"class":257},[240,131167,722],{"class":264},[240,131169,1655],{"class":257},[240,131171,131172,131174,131176,131178,131180,131182,131184,131186,131188,131190],{"class":242,"line":589},[240,131173,1552],{"class":436},[240,131175,609],{"class":253},[240,131177,1638],{"class":436},[240,131179,789],{"class":257},[240,131181,1668],{"class":264},[240,131183,1646],{"class":257},[240,131185,1334],{"class":264},[240,131187,268],{"class":257},[240,131189,1677],{"class":264},[240,131191,1655],{"class":257},[240,131193,131194,131196,131198,131200,131202,131204,131206,131208,131210,131212],{"class":242,"line":715},[240,131195,1552],{"class":436},[240,131197,609],{"class":253},[240,131199,1638],{"class":436},[240,131201,789],{"class":257},[240,131203,1692],{"class":264},[240,131205,1646],{"class":257},[240,131207,1334],{"class":264},[240,131209,268],{"class":257},[240,131211,1701],{"class":264},[240,131213,1655],{"class":257},[240,131215,131216,131218,131220,131222,131224,131226,131228,131230,131232,131234],{"class":242,"line":727},[240,131217,1552],{"class":436},[240,131219,609],{"class":253},[240,131221,1638],{"class":436},[240,131223,789],{"class":257},[240,131225,1716],{"class":264},[240,131227,1646],{"class":257},[240,131229,1334],{"class":264},[240,131231,268],{"class":257},[240,131233,1725],{"class":264},[240,131235,1655],{"class":257},[240,131237,131238,131240,131242,131244,131246,131248,131250,131252,131254,131256],{"class":242,"line":1730},[240,131239,1552],{"class":436},[240,131241,609],{"class":253},[240,131243,1638],{"class":436},[240,131245,789],{"class":257},[240,131247,1741],{"class":264},[240,131249,1646],{"class":257},[240,131251,1334],{"class":264},[240,131253,268],{"class":257},[240,131255,1750],{"class":264},[240,131257,1655],{"class":257},[14,131259,1756],{"id":1755},[32,131261,1760],{"id":1759},[19,131263,1763],{},[19,131265,1766],{},[19,131267,1769],{},[32,131269,1773],{"id":1772},[19,131271,1776],{},[19,131273,1779],{},[231,131275,131276],{"className":233,"code":1782,"language":235,"meta":236,"style":236},[23,131277,131278,131284,131294],{"__ignoreMap":236},[240,131279,131280,131282],{"class":242,"line":243},[240,131281,19],{"class":253},[240,131283,258],{"class":257},[240,131285,131286,131288,131290,131292],{"class":242,"line":250},[240,131287,678],{"class":264},[240,131289,268],{"class":257},[240,131291,1799],{"class":264},[240,131293,274],{"class":257},[240,131295,131296],{"class":242,"line":261},[240,131297,312],{"class":257},[219,131299],{"style":221,"src":1808},[19,131301,1811],{},[19,131303,1814],{},[19,131305,1817],{},[19,131307,1820],{},[32,131309,1824],{"id":1823},[1826,131311,131312,131314],{},[1829,131313,1831],{},[1829,131315,1834],{},[802,131317,131318,131326],{},[805,131319,131320],{},[808,131321,131322,131324],{},[811,131323,1843],{"align":813},[811,131325,1846],{"align":813},[819,131327,131328,131334,131340,131346,131352,131358],{},[808,131329,131330,131332],{},[824,131331,1853],{"align":813},[824,131333,1856],{"align":813},[808,131335,131336,131338],{},[824,131337,1861],{"align":813},[824,131339,1864],{"align":813},[808,131341,131342,131344],{},[824,131343,1869],{"align":813},[824,131345,1872],{"align":813},[808,131347,131348,131350],{},[824,131349,1877],{"align":813},[824,131351,1880],{"align":813},[808,131353,131354,131356],{},[824,131355,1885],{"align":813},[824,131357,1888],{"align":813},[808,131359,131360,131362],{},[824,131361,1893],{"align":813},[824,131363,1896],{"align":813},[19,131365,1899],{},[231,131367,131368],{"className":233,"code":1902,"language":235,"meta":236,"style":236},[23,131369,131370,131374,131380,131392,131396,131400,131406,131416],{"__ignoreMap":236},[240,131371,131372],{"class":242,"line":243},[240,131373,1909],{"class":246},[240,131375,131376,131378],{"class":242,"line":250},[240,131377,330],{"class":253},[240,131379,258],{"class":257},[240,131381,131382,131384,131386,131388,131390],{"class":242,"line":261},[240,131383,678],{"class":264},[240,131385,268],{"class":257},[240,131387,1924],{"class":264},[240,131389,1927],{"class":288},[240,131391,274],{"class":257},[240,131393,131394],{"class":242,"line":277},[240,131395,312],{"class":257},[240,131397,131398],{"class":242,"line":294},[240,131399,1938],{"class":246},[240,131401,131402,131404],{"class":242,"line":309},[240,131403,330],{"class":253},[240,131405,258],{"class":257},[240,131407,131408,131410,131412,131414],{"class":242,"line":529},[240,131409,678],{"class":264},[240,131411,268],{"class":257},[240,131413,1953],{"class":264},[240,131415,274],{"class":257},[240,131417,131418],{"class":242,"line":549},[240,131419,312],{"class":257},[19,131421,1962],{},[19,131423,1965],{},[19,131425,1968],{},[19,131427,1971],{},[19,131429,1974],{},[19,131431,1977],{},[19,131433,1980],{},[802,131435,131436,131444],{},[805,131437,131438],{},[808,131439,131440,131442],{},[811,131441,1989],{"align":813},[811,131443,1992],{"align":813},[819,131445,131446,131452,131458],{},[808,131447,131448,131450],{},[824,131449,1999],{"align":813},[824,131451,2002],{"align":813},[808,131453,131454,131456],{},[824,131455,2007],{"align":813},[824,131457,2010],{"align":813},[808,131459,131460,131462],{},[824,131461,2015],{"align":813},[824,131463,2010],{"align":813},[2019,131465,2021],{},{"title":236,"searchDepth":250,"depth":250,"links":131467},[131468,131476,131487],{"id":16,"depth":250,"text":17,"children":131469},[131470,131471,131472,131473,131474,131475],{"id":34,"depth":261,"text":35},{"id":112,"depth":261,"text":113},{"id":185,"depth":261,"text":186},{"id":216,"depth":261,"text":217},{"id":225,"depth":261,"text":226},{"id":410,"depth":261,"text":411},{"id":744,"depth":250,"text":745,"children":131477},[131478,131479,131480,131481,131482,131483,131484,131485,131486],{"id":751,"depth":261,"text":752},{"id":761,"depth":261,"text":762},{"id":870,"depth":261,"text":871},{"id":944,"depth":261,"text":945},{"id":1105,"depth":261,"text":1106},{"id":1194,"depth":261,"text":1195},{"id":1248,"depth":261,"text":1249},{"id":1312,"depth":261,"text":1313},{"id":1418,"depth":261,"text":1419},{"id":1755,"depth":250,"text":1756,"children":131488},[131489,131490,131491],{"id":1759,"depth":261,"text":1760},{"id":1772,"depth":261,"text":1773},{"id":1823,"depth":261,"text":1824},{},{"title":5,"description":2048},{"id":131495,"title":131496,"body":131497,"description":2048,"extension":2049,"meta":133087,"navigation":2051,"path":133088,"seo":133089,"stem":133090,"__hash__":133091},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":131498,"toc":133066},[131499,131502,131506,131509,131512,131515,131518,131521,131524,131527,131531,131539,131576,131612,131615,131629,131634,131668,131671,131764,131769,131772,131802,131805,131810,131818,131822,131829,131875,131919,131924,131927,131930,131933,131936,131939,131942,131944,131947,131951,131956,132000,132005,132008,132011,132048,132053,132056,132059,132062,132065,132097,132100,132103,132106,132138,132141,132144,132147,132151,132154,132186,132189,132193,132213,132216,132224,132227,132231,132236,132239,132271,132276,132279,132317,132321,132326,132329,132332,132363,132366,132383,132388,132440,132500,132505,132559,132597,132601,132605,132608,132612,132620,132623,132625,132636,132641,132689,132723,132726,132729,132732,132735,132779,132782,132785,132788,132791,132794,132797,132841,132844,132847,132850,132853,132856,132859,132865,132868,132912,132915,132918,132921,132924,132927,132971,132974,132976,132979,132983,132987,133025,133029,133032,133035,133039,133047,133051,133054,133057,133060,133063],[10,131500,131496],{"id":131501},"_9-css盒模型浮动与切图",[14,131503,131505],{"id":131504},"_91-盒子模型","9.1 盒子模型",[19,131507,131508],{},"利用盒子来设计网页",[19,131510,131511],{},"盒子包含：边框、外边距、内边距、实际内容",[19,131513,131514],{},"网页布局设置：",[19,131516,131517],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[19,131519,131520],{},"②利用css设置好盒子样式，然后摆放到相应位置",[19,131522,131523],{},"③往盒子里装内容",[219,131525],{"style":221,"src":131526},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[32,131528,131530],{"id":131529},"_911-边框border","9.1.1 边框（border）",[1826,131532,131533,131536],{},[1829,131534,131535],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[1829,131537,131538],{},"语法",[231,131540,131542],{"className":233,"code":131541,"language":235,"meta":236,"style":236},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[23,131543,131544,131549,131555,131572],{"__ignoreMap":236},[240,131545,131546],{"class":242,"line":243},[240,131547,131548],{"class":246},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[240,131550,131551,131553],{"class":242,"line":250},[240,131552,330],{"class":253},[240,131554,258],{"class":257},[240,131556,131557,131559,131561,131563,131565,131567,131570],{"class":242,"line":261},[240,131558,72813],{"class":264},[240,131560,268],{"class":257},[240,131562,1643],{"class":264},[240,131564,289],{"class":288},[240,131566,53463],{"class":264},[240,131568,131569],{"class":264}," #ccc",[240,131571,274],{"class":257},[240,131573,131574],{"class":242,"line":277},[240,131575,312],{"class":257},[802,131577,131578,131586],{},[805,131579,131580],{},[808,131581,131582,131584],{},[811,131583,1322],{"align":813},[811,131585,817],{"align":813},[819,131587,131588,131596,131604],{},[808,131589,131590,131593],{},[824,131591,131592],{"align":813},"border-width",[824,131594,131595],{"align":813},"定义边框粗细，单位是px",[808,131597,131598,131601],{},[824,131599,131600],{"align":813},"border-style",[824,131602,131603],{"align":813},"边框的样式",[808,131605,131606,131609],{},[824,131607,131608],{"align":813},"border-color",[824,131610,131611],{"align":813},"边框的颜色",[19,131613,131614],{},"边框样式 border-style 可以设置如下值：",[3100,131616,131617,131620,131623,131626],{},[1829,131618,131619],{},"none：没有边框即忽略所有边框的宽度（默认值）",[1829,131621,131622],{},"solid：边框为单实线(最为常用的)",[1829,131624,131625],{},"dashed：边框为虚线",[1829,131627,131628],{},"dotted：边框为点线",[1826,131630,131631],{"start":261},[1829,131632,131633],{},"边框的合写分写",[231,131635,131636],{"className":233,"code":131541,"language":235,"meta":236,"style":236},[23,131637,131638,131642,131648,131664],{"__ignoreMap":236},[240,131639,131640],{"class":242,"line":243},[240,131641,131548],{"class":246},[240,131643,131644,131646],{"class":242,"line":250},[240,131645,330],{"class":253},[240,131647,258],{"class":257},[240,131649,131650,131652,131654,131656,131658,131660,131662],{"class":242,"line":261},[240,131651,72813],{"class":264},[240,131653,268],{"class":257},[240,131655,1643],{"class":264},[240,131657,289],{"class":288},[240,131659,53463],{"class":264},[240,131661,131569],{"class":264},[240,131663,274],{"class":257},[240,131665,131666],{"class":242,"line":277},[240,131667,312],{"class":257},[19,131669,131670],{},"边框分开写法：",[231,131672,131674],{"className":233,"code":131673,"language":235,"meta":236,"style":236},"\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",[23,131675,131676,131681,131687,131705,131723,131742,131760],{"__ignoreMap":236},[240,131677,131678],{"class":242,"line":243},[240,131679,131680],{"class":246},"\u002F* 边框分开写法 *\u002F\n",[240,131682,131683,131685],{"class":242,"line":250},[240,131684,330],{"class":253},[240,131686,258],{"class":257},[240,131688,131689,131692,131694,131696,131698,131700,131703],{"class":242,"line":261},[240,131690,131691],{"class":264},"  border-top",[240,131693,268],{"class":257},[240,131695,1643],{"class":264},[240,131697,289],{"class":288},[240,131699,53463],{"class":264},[240,131701,131702],{"class":264}," #000",[240,131704,274],{"class":257},[240,131706,131707,131710,131712,131714,131716,131718,131721],{"class":242,"line":277},[240,131708,131709],{"class":264},"  border-right",[240,131711,268],{"class":257},[240,131713,1668],{"class":264},[240,131715,289],{"class":288},[240,131717,64165],{"class":264},[240,131719,131720],{"class":264}," #333",[240,131722,274],{"class":257},[240,131724,131725,131728,131730,131732,131734,131737,131740],{"class":242,"line":294},[240,131726,131727],{"class":264},"  border-bottom",[240,131729,268],{"class":257},[240,131731,1692],{"class":264},[240,131733,289],{"class":288},[240,131735,131736],{"class":264}," dotted",[240,131738,131739],{"class":264}," #666",[240,131741,274],{"class":257},[240,131743,131744,131747,131749,131751,131753,131755,131758],{"class":242,"line":309},[240,131745,131746],{"class":264},"  border-left",[240,131748,268],{"class":257},[240,131750,1643],{"class":264},[240,131752,289],{"class":288},[240,131754,53463],{"class":264},[240,131756,131757],{"class":264}," #999",[240,131759,274],{"class":257},[240,131761,131762],{"class":242,"line":529},[240,131763,312],{"class":257},[1826,131765,131766],{"start":277},[1829,131767,131768],{},"表格的细线边框",[19,131770,131771],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[231,131773,131775],{"className":233,"code":131774,"language":235,"meta":236,"style":236},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[23,131776,131777,131782,131788,131798],{"__ignoreMap":236},[240,131778,131779],{"class":242,"line":243},[240,131780,131781],{"class":246},"\u002F* 表格细线边框合并 *\u002F\n",[240,131783,131784,131786],{"class":242,"line":250},[240,131785,802],{"class":253},[240,131787,258],{"class":257},[240,131789,131790,131792,131794,131796],{"class":242,"line":261},[240,131791,72499],{"class":264},[240,131793,268],{"class":257},[240,131795,66958],{"class":264},[240,131797,274],{"class":257},[240,131799,131800],{"class":242,"line":277},[240,131801,312],{"class":257},[19,131803,131804],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[1826,131806,131807],{"start":294},[1829,131808,131809],{},"解决边框额外增加盒子的实际大小的方法：",[3100,131811,131812,131815],{},[1829,131813,131814],{},"测量盒子大小的时候,不量边框",[1829,131816,131817],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[32,131819,131821],{"id":131820},"_912-内边距","9.1.2 内边距",[1826,131823,131824,131827],{},[1829,131825,131826],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[1829,131828,131538],{},[802,131830,131831,131841],{},[805,131832,131833],{},[808,131834,131835,131838],{},[811,131836,131837],{"align":813},"值的个数",[811,131839,131840],{"align":813},"表达意思",[819,131842,131843,131851,131859,131867],{},[808,131844,131845,131848],{},[824,131846,131847],{"align":813},"padding: 5px;",[824,131849,131850],{"align":813},"1个值，代表上下左右都有5个元素",[808,131852,131853,131856],{},[824,131854,131855],{"align":813},"padding: 5px 10px;",[824,131857,131858],{"align":813},"2个值，代表上下内边距为5像素，左右内边距为10像素",[808,131860,131861,131864],{},[824,131862,131863],{"align":813},"padding: 5px 10px 20px;",[824,131865,131866],{"align":813},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[808,131868,131869,131872],{},[824,131870,131871],{"align":813},"padding: 5px 10px 20px 30px;",[824,131873,131874],{"align":813},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[802,131876,131877,131885],{},[805,131878,131879],{},[808,131880,131881,131883],{},[811,131882,1322],{"align":813},[811,131884,817],{"align":813},[819,131886,131887,131895,131903,131911],{},[808,131888,131889,131892],{},[824,131890,131891],{"align":813},"padding-left",[824,131893,131894],{"align":813},"左内边距",[808,131896,131897,131900],{},[824,131898,131899],{"align":813},"padding-right",[824,131901,131902],{"align":813},"右内边距",[808,131904,131905,131908],{},[824,131906,131907],{"align":813},"padding-top",[824,131909,131910],{"align":813},"上内边距",[808,131912,131913,131916],{},[824,131914,131915],{"align":813},"padding-bottom",[824,131917,131918],{"align":813},"下内边距",[1826,131920,131921],{"start":261},[1829,131922,131923],{},"内边距会影响盒子的实际大小",[19,131925,131926],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[19,131928,131929],{},"①内容和边框有了距离，添加了内边距",[19,131931,131932],{},"②padding影响了盒子实际大小",[19,131934,131935],{},"内边距对盒子大小的影响：",[19,131937,131938],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[19,131940,131941],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[19,131943,97133],{},[19,131945,131946],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[32,131948,131950],{"id":131949},"_913-外边距","9.1.3 外边距",[1826,131952,131953],{},[1829,131954,131955],{},"控制盒子与盒子之间的距离",[802,131957,131958,131966],{},[805,131959,131960],{},[808,131961,131962,131964],{},[811,131963,1322],{"align":813},[811,131965,817],{"align":813},[819,131967,131968,131976,131984,131992],{},[808,131969,131970,131973],{},[824,131971,131972],{"align":813},"margin-left",[824,131974,131975],{"align":813},"左外边距",[808,131977,131978,131981],{},[824,131979,131980],{"align":813},"margin-right",[824,131982,131983],{"align":813},"右外边距",[808,131985,131986,131989],{},[824,131987,131988],{"align":813},"margin-top",[824,131990,131991],{"align":813},"上外边距",[808,131993,131994,131997],{},[824,131995,131996],{"align":813},"margin-bottom",[824,131998,131999],{"align":813},"下外边距",[1826,132001,132002],{"start":250},[1829,132003,132004],{},"外边距可以让块级盒子水平居中的两个条件：",[19,132006,132007],{},"①盒子必须指定了宽度（width）",[19,132009,132010],{},"②盒子左右的外边距都设置为 auto",[231,132012,132014],{"className":233,"code":132013,"language":235,"meta":236,"style":236},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[23,132015,132016,132021,132028,132044],{"__ignoreMap":236},[240,132017,132018],{"class":242,"line":243},[240,132019,132020],{"class":246},"\u002F* margin 复合写法（同上） *\u002F\n",[240,132022,132023,132026],{"class":242,"line":250},[240,132024,132025],{"class":436},".box",[240,132027,258],{"class":257},[240,132029,132030,132032,132034,132036,132038,132041],{"class":242,"line":261},[240,132031,72393],{"class":264},[240,132033,268],{"class":257},[240,132035,1274],{"class":264},[240,132037,53498],{"class":264},[240,132039,132040],{"class":257},";  ",[240,132042,132043],{"class":246},"\u002F* 块级盒子水平居中 *\u002F\n",[240,132045,132046],{"class":242,"line":277},[240,132047,312],{"class":257},[1826,132049,132050],{"start":261},[1829,132051,132052],{},"外边距塌陷问题",[19,132054,132055],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[219,132057],{"style":221,"src":132058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[19,132060,132061],{},"解决方案：",[19,132063,132064],{},"①可以为父亲元素定义上边距",[231,132066,132067],{"className":233,"code":132013,"language":235,"meta":236,"style":236},[23,132068,132069,132073,132079,132093],{"__ignoreMap":236},[240,132070,132071],{"class":242,"line":243},[240,132072,132020],{"class":246},[240,132074,132075,132077],{"class":242,"line":250},[240,132076,132025],{"class":436},[240,132078,258],{"class":257},[240,132080,132081,132083,132085,132087,132089,132091],{"class":242,"line":261},[240,132082,72393],{"class":264},[240,132084,268],{"class":257},[240,132086,1274],{"class":264},[240,132088,53498],{"class":264},[240,132090,132040],{"class":257},[240,132092,132043],{"class":246},[240,132094,132095],{"class":242,"line":277},[240,132096,312],{"class":257},[19,132098,132099],{},"②可以为父亲元素定义上内边距",[19,132101,132102],{},"③可以为父亲元素添加overflow:hidden",[219,132104],{"style":221,"src":132105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[231,132107,132108],{"className":233,"code":132013,"language":235,"meta":236,"style":236},[23,132109,132110,132114,132120,132134],{"__ignoreMap":236},[240,132111,132112],{"class":242,"line":243},[240,132113,132020],{"class":246},[240,132115,132116,132118],{"class":242,"line":250},[240,132117,132025],{"class":436},[240,132119,258],{"class":257},[240,132121,132122,132124,132126,132128,132130,132132],{"class":242,"line":261},[240,132123,72393],{"class":264},[240,132125,268],{"class":257},[240,132127,1274],{"class":264},[240,132129,53498],{"class":264},[240,132131,132040],{"class":257},[240,132133,132043],{"class":246},[240,132135,132136],{"class":242,"line":277},[240,132137,312],{"class":257},[219,132139],{"style":221,"src":132140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[19,132142,132143],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[19,132145,132146],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[32,132148,132150],{"id":132149},"_914-清除内外边距","9.1.4 清除内外边距",[19,132152,132153],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[231,132155,132156],{"className":233,"code":132013,"language":235,"meta":236,"style":236},[23,132157,132158,132162,132168,132182],{"__ignoreMap":236},[240,132159,132160],{"class":242,"line":243},[240,132161,132020],{"class":246},[240,132163,132164,132166],{"class":242,"line":250},[240,132165,132025],{"class":436},[240,132167,258],{"class":257},[240,132169,132170,132172,132174,132176,132178,132180],{"class":242,"line":261},[240,132171,72393],{"class":264},[240,132173,268],{"class":257},[240,132175,1274],{"class":264},[240,132177,53498],{"class":264},[240,132179,132040],{"class":257},[240,132181,132043],{"class":246},[240,132183,132184],{"class":242,"line":277},[240,132185,312],{"class":257},[19,132187,132188],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[32,132190,132192],{"id":132191},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[3100,132194,132195,132198,132201,132204,132207,132210],{},[1829,132196,132197],{},"文件→打开 ：可以打开我们要测量的图片",[1829,132199,132200],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[1829,132202,132203],{},"右击标尺，把里面的单位改为像素",[1829,132205,132206],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[1829,132208,132209],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[1829,132211,132212],{},"用选区拖动 可以测量大小",[219,132214],{"style":221,"src":132215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[3100,132217,132218,132221],{},[1829,132219,132220],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[1829,132222,132223],{},"吸管取色工具",[219,132225],{"style":221,"src":132226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[32,132228,132230],{"id":132229},"_916-案例","9.1.6 案例",[1826,132232,132233],{},[1829,132234,132235],{},"小米商品",[219,132237],{"style":221,"src":132238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[231,132240,132241],{"className":233,"code":132013,"language":235,"meta":236,"style":236},[23,132242,132243,132247,132253,132267],{"__ignoreMap":236},[240,132244,132245],{"class":242,"line":243},[240,132246,132020],{"class":246},[240,132248,132249,132251],{"class":242,"line":250},[240,132250,132025],{"class":436},[240,132252,258],{"class":257},[240,132254,132255,132257,132259,132261,132263,132265],{"class":242,"line":261},[240,132256,72393],{"class":264},[240,132258,268],{"class":257},[240,132260,1274],{"class":264},[240,132262,53498],{"class":264},[240,132264,132040],{"class":257},[240,132266,132043],{"class":246},[240,132268,132269],{"class":242,"line":277},[240,132270,312],{"class":257},[1826,132272,132273],{"start":250},[1829,132274,132275],{},"快报模块",[219,132277],{"style":221,"src":132278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[231,132280,132282],{"className":417,"code":132281,"language":419,"meta":236,"style":236},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[23,132283,132284,132289,132304,132309],{"__ignoreMap":236},[240,132285,132286],{"class":242,"line":243},[240,132287,132288],{"class":246},"\u003C!-- HTML 代码示例 -->\n",[240,132290,132291,132293,132295,132297,132299,132302],{"class":242,"line":250},[240,132292,431],{"class":257},[240,132294,330],{"class":253},[240,132296,437],{"class":436},[240,132298,440],{"class":257},[240,132300,132301],{"class":443},"\"example\"",[240,132303,447],{"class":257},[240,132305,132306],{"class":242,"line":261},[240,132307,132308],{"class":257},"  示例内容\n",[240,132310,132311,132313,132315],{"class":242,"line":277},[240,132312,592],{"class":257},[240,132314,330],{"class":253},[240,132316,447],{"class":257},[32,132318,132320],{"id":132319},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[1826,132322,132323],{},[1829,132324,132325],{},"圆角边框",[19,132327,132328],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[219,132330],{"style":221,"src":132331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[231,132333,132335],{"className":233,"code":132334,"language":235,"meta":236,"style":236},"div {\n  border: 1px solid #ccc;\n}\n",[23,132336,132337,132343,132359],{"__ignoreMap":236},[240,132338,132339,132341],{"class":242,"line":243},[240,132340,330],{"class":253},[240,132342,258],{"class":257},[240,132344,132345,132347,132349,132351,132353,132355,132357],{"class":242,"line":250},[240,132346,72813],{"class":264},[240,132348,268],{"class":257},[240,132350,1643],{"class":264},[240,132352,289],{"class":288},[240,132354,53463],{"class":264},[240,132356,131569],{"class":264},[240,132358,274],{"class":257},[240,132360,132361],{"class":242,"line":261},[240,132362,312],{"class":257},[19,132364,132365],{},"解释:",[3100,132367,132368,132371,132374,132377,132380],{},[1829,132369,132370],{},"参数值可以为数值或百分比的形式",[1829,132372,132373],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[1829,132375,132376],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[1829,132378,132379],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[1829,132381,132382],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[1826,132384,132385],{"start":250},[1829,132386,132387],{},"盒子阴影",[231,132389,132391],{"className":233,"code":132390,"language":235,"meta":236,"style":236},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[23,132392,132393,132399,132436],{"__ignoreMap":236},[240,132394,132395,132397],{"class":242,"line":243},[240,132396,330],{"class":253},[240,132398,258],{"class":257},[240,132400,132401,132404,132406,132408,132410,132412,132414,132416,132418,132420,132422,132424,132426,132428,132430,132432,132434],{"class":242,"line":250},[240,132402,132403],{"class":264},"  box-shadow",[240,132405,268],{"class":257},[240,132407,1274],{"class":264},[240,132409,16704],{"class":264},[240,132411,289],{"class":288},[240,132413,3991],{"class":264},[240,132415,289],{"class":288},[240,132417,80681],{"class":264},[240,132419,789],{"class":257},[240,132421,1274],{"class":264},[240,132423,1277],{"class":257},[240,132425,1274],{"class":264},[240,132427,1277],{"class":257},[240,132429,1274],{"class":264},[240,132431,1277],{"class":257},[240,132433,88124],{"class":264},[240,132435,796],{"class":257},[240,132437,132438],{"class":242,"line":261},[240,132439,312],{"class":257},[802,132441,132442,132450],{},[805,132443,132444],{},[808,132445,132446,132448],{},[811,132447,1327],{"align":813},[811,132449,29435],{"align":813},[819,132451,132452,132460,132468,132476,132484,132492],{},[808,132453,132454,132457],{},[824,132455,132456],{"align":813},"h-shadow",[824,132458,132459],{"align":813},"必需,水平阴影的位置,允许负值",[808,132461,132462,132465],{},[824,132463,132464],{"align":813},"v-shadow",[824,132466,132467],{"align":813},"必需,垂直阴影的位置,允许负值",[808,132469,132470,132473],{},[824,132471,132472],{"align":813},"blur",[824,132474,132475],{"align":813},"可选,模糊距离,就是影子的虚实",[808,132477,132478,132481],{},[824,132479,132480],{"align":813},"spread",[824,132482,132483],{"align":813},"可选,阴影尺寸",[808,132485,132486,132489],{},[824,132487,132488],{"align":813},"color",[824,132490,132491],{"align":813},"可选,阴影的颜色",[808,132493,132494,132497],{},[824,132495,132496],{"align":813},"inset",[824,132498,132499],{"align":813},"可选,将外部阴影(outset)改为内部阴影",[1826,132501,132502],{"start":261},[1829,132503,132504],{},"文字阴影",[231,132506,132508],{"className":233,"code":132507,"language":235,"meta":236,"style":236},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[23,132509,132510,132516,132555],{"__ignoreMap":236},[240,132511,132512,132514],{"class":242,"line":243},[240,132513,19],{"class":253},[240,132515,258],{"class":257},[240,132517,132518,132521,132523,132525,132527,132529,132531,132533,132535,132537,132539,132541,132543,132545,132547,132549,132551,132553],{"class":242,"line":250},[240,132519,132520],{"class":264},"  text-shadow",[240,132522,268],{"class":257},[240,132524,1643],{"class":264},[240,132526,289],{"class":288},[240,132528,27065],{"class":264},[240,132530,289],{"class":288},[240,132532,16704],{"class":264},[240,132534,289],{"class":288},[240,132536,80681],{"class":264},[240,132538,789],{"class":257},[240,132540,1274],{"class":264},[240,132542,1277],{"class":257},[240,132544,1274],{"class":264},[240,132546,1277],{"class":257},[240,132548,1274],{"class":264},[240,132550,1277],{"class":257},[240,132552,1288],{"class":264},[240,132554,796],{"class":257},[240,132556,132557],{"class":242,"line":261},[240,132558,312],{"class":257},[802,132560,132561,132569],{},[805,132562,132563],{},[808,132564,132565,132567],{},[811,132566,1327],{"align":813},[811,132568,29435],{"align":813},[819,132570,132571,132577,132584,132591],{},[808,132572,132573,132575],{},[824,132574,132456],{"align":813},[824,132576,132459],{"align":813},[808,132578,132579,132581],{},[824,132580,132464],{"align":813},[824,132582,132583],{"align":813},"必需,垂直阴影位置,允许负值",[808,132585,132586,132588],{},[824,132587,132472],{"align":813},[824,132589,132590],{"align":813},"可选,模糊的距离",[808,132592,132593,132595],{},[824,132594,132488],{"align":813},[824,132596,132491],{"align":813},[14,132598,132600],{"id":132599},"_92-浮动","9.2 浮动",[32,132602,132604],{"id":132603},"_921-浮动介绍","9.2.1 浮动介绍",[19,132606,132607],{},"在16.2中详细介绍",[32,132609,132611],{"id":132610},"_922-清除浮动","9.2.2 清除浮动",[1826,132613,132614,132617],{},[1829,132615,132616],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[1829,132618,132619],{},"清除浮动的本质",[19,132621,132622],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[19,132624,10976],{},[3100,132626,132627,132630,132633],{},[1829,132628,132629],{},"如果父盒子本身有高度，则不需要清除浮动",[1829,132631,132632],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[1829,132634,132635],{},"父级有了高度，就不会影响下面的标准流了",[1826,132637,132638],{"start":261},[1829,132639,132640],{},"清除浮动样式",[231,132642,132644],{"className":233,"code":132643,"language":235,"meta":236,"style":236},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[23,132645,132646,132653,132664,132668,132675,132685],{"__ignoreMap":236},[240,132647,132648,132651],{"class":242,"line":243},[240,132649,132650],{"class":436},".left",[240,132652,258],{"class":257},[240,132654,132655,132658,132660,132662],{"class":242,"line":250},[240,132656,132657],{"class":264},"  float",[240,132659,268],{"class":257},[240,132661,813],{"class":264},[240,132663,274],{"class":257},[240,132665,132666],{"class":242,"line":261},[240,132667,312],{"class":257},[240,132669,132670,132673],{"class":242,"line":277},[240,132671,132672],{"class":436},".right",[240,132674,258],{"class":257},[240,132676,132677,132679,132681,132683],{"class":242,"line":294},[240,132678,132657],{"class":264},[240,132680,268],{"class":257},[240,132682,74437],{"class":264},[240,132684,274],{"class":257},[240,132686,132687],{"class":242,"line":309},[240,132688,312],{"class":257},[802,132690,132691,132699],{},[805,132692,132693],{},[808,132694,132695,132697],{},[811,132696,128918],{"align":813},[811,132698,29435],{"align":813},[819,132700,132701,132708,132715],{},[808,132702,132703,132705],{},[824,132704,813],{"align":813},[824,132706,132707],{"align":813},"不允许左侧有浮动元素（清除左侧浮动的影响）",[808,132709,132710,132712],{},[824,132711,74437],{"align":813},[824,132713,132714],{"align":813},"不允许右侧有浮动元素（清除右侧浮动的影响）",[808,132716,132717,132720],{},[824,132718,132719],{"align":813},"both",[824,132721,132722],{"align":813},"同时清除左右侧浮动的影响",[19,132724,132725],{},"法一",[19,132727,132728],{},"额外标签法也称为隔墙法",[19,132730,132731],{},"使用方式：",[19,132733,132734],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[231,132736,132737],{"className":233,"code":132643,"language":235,"meta":236,"style":236},[23,132738,132739,132745,132755,132759,132765,132775],{"__ignoreMap":236},[240,132740,132741,132743],{"class":242,"line":243},[240,132742,132650],{"class":436},[240,132744,258],{"class":257},[240,132746,132747,132749,132751,132753],{"class":242,"line":250},[240,132748,132657],{"class":264},[240,132750,268],{"class":257},[240,132752,813],{"class":264},[240,132754,274],{"class":257},[240,132756,132757],{"class":242,"line":261},[240,132758,312],{"class":257},[240,132760,132761,132763],{"class":242,"line":277},[240,132762,132672],{"class":436},[240,132764,258],{"class":257},[240,132766,132767,132769,132771,132773],{"class":242,"line":294},[240,132768,132657],{"class":264},[240,132770,268],{"class":257},[240,132772,74437],{"class":264},[240,132774,274],{"class":257},[240,132776,132777],{"class":242,"line":309},[240,132778,312],{"class":257},[19,132780,132781],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[19,132783,132784],{},"优点： 通俗易懂，书写方便",[19,132786,132787],{},"缺点： 添加许多无意义的标签，结构化较差",[19,132789,132790],{},"注意： 要求这个新的空标签必须是块级元素。",[19,132792,132793],{},"法二",[19,132795,132796],{},"父级添加overflow属性",[231,132798,132799],{"className":233,"code":132643,"language":235,"meta":236,"style":236},[23,132800,132801,132807,132817,132821,132827,132837],{"__ignoreMap":236},[240,132802,132803,132805],{"class":242,"line":243},[240,132804,132650],{"class":436},[240,132806,258],{"class":257},[240,132808,132809,132811,132813,132815],{"class":242,"line":250},[240,132810,132657],{"class":264},[240,132812,268],{"class":257},[240,132814,813],{"class":264},[240,132816,274],{"class":257},[240,132818,132819],{"class":242,"line":261},[240,132820,312],{"class":257},[240,132822,132823,132825],{"class":242,"line":277},[240,132824,132672],{"class":436},[240,132826,258],{"class":257},[240,132828,132829,132831,132833,132835],{"class":242,"line":294},[240,132830,132657],{"class":264},[240,132832,268],{"class":257},[240,132834,74437],{"class":264},[240,132836,274],{"class":257},[240,132838,132839],{"class":242,"line":309},[240,132840,312],{"class":257},[19,132842,132843],{},"overflow: hidden;",[19,132845,132846],{},"优点：代码简洁",[19,132848,132849],{},"缺点：无法显示溢出的部分",[19,132851,132852],{},"注意：是给父元素添加代码",[19,132854,132855],{},"法三",[19,132857,132858],{},"父级添加after伪元素",[19,132860,132861,132864],{},[132862,132863],"after",{}," 方式是额外标签法的升级版",[19,132866,132867],{},"使用的时候复制就可以",[231,132869,132870],{"className":233,"code":132643,"language":235,"meta":236,"style":236},[23,132871,132872,132878,132888,132892,132898,132908],{"__ignoreMap":236},[240,132873,132874,132876],{"class":242,"line":243},[240,132875,132650],{"class":436},[240,132877,258],{"class":257},[240,132879,132880,132882,132884,132886],{"class":242,"line":250},[240,132881,132657],{"class":264},[240,132883,268],{"class":257},[240,132885,813],{"class":264},[240,132887,274],{"class":257},[240,132889,132890],{"class":242,"line":261},[240,132891,312],{"class":257},[240,132893,132894,132896],{"class":242,"line":277},[240,132895,132672],{"class":436},[240,132897,258],{"class":257},[240,132899,132900,132902,132904,132906],{"class":242,"line":294},[240,132901,132657],{"class":264},[240,132903,268],{"class":257},[240,132905,74437],{"class":264},[240,132907,274],{"class":257},[240,132909,132910],{"class":242,"line":309},[240,132911,312],{"class":257},[19,132913,132914],{},"优点：没有增加标签，结构更简单",[19,132916,132917],{},"缺点：照顾低版本浏览器",[19,132919,132920],{},"代表网站： 百度、淘宝网、网易等",[19,132922,132923],{},"法四",[19,132925,132926],{},"父级添加双伪元素",[231,132928,132929],{"className":233,"code":132643,"language":235,"meta":236,"style":236},[23,132930,132931,132937,132947,132951,132957,132967],{"__ignoreMap":236},[240,132932,132933,132935],{"class":242,"line":243},[240,132934,132650],{"class":436},[240,132936,258],{"class":257},[240,132938,132939,132941,132943,132945],{"class":242,"line":250},[240,132940,132657],{"class":264},[240,132942,268],{"class":257},[240,132944,813],{"class":264},[240,132946,274],{"class":257},[240,132948,132949],{"class":242,"line":261},[240,132950,312],{"class":257},[240,132952,132953,132955],{"class":242,"line":277},[240,132954,132672],{"class":436},[240,132956,258],{"class":257},[240,132958,132959,132961,132963,132965],{"class":242,"line":294},[240,132960,132657],{"class":264},[240,132962,268],{"class":257},[240,132964,74437],{"class":264},[240,132966,274],{"class":257},[240,132968,132969],{"class":242,"line":309},[240,132970,312],{"class":257},[19,132972,132973],{},"优点：代码更简洁",[19,132975,132917],{},[19,132977,132978],{},"代表网站：小米、腾讯等",[14,132980,132982],{"id":132981},"_93-ps切图","9.3 PS切图",[32,132984,132986],{"id":132985},"_931-常见图片格式","9.3.1 常见图片格式",[802,132988,132989,132999],{},[805,132990,132991],{},[808,132992,132993,132996],{},[811,132994,132995],{"align":813},"jpg图像格式",[811,132997,132998],{"align":813},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[819,133000,133001,133009,133017],{},[808,133002,133003,133006],{},[824,133004,133005],{"align":813},"gif图像格式",[824,133007,133008],{"align":813},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[808,133010,133011,133014],{},[824,133012,133013],{"align":813},"png图像格式",[824,133015,133016],{"align":813},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[808,133018,133019,133022],{},[824,133020,133021],{"align":813},"PSD图像格式",[824,133023,133024],{"align":813},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[32,133026,133028],{"id":133027},"_932-图层切图","9.3.2 图层切图",[19,133030,133031],{},"最简单的切图方式：右击图层 → 导出 → 切片",[19,133033,133034],{},"按住shift选中两个图层->图层菜单->合并图层",[32,133036,133038],{"id":133037},"_933-切片切图","9.3.3 切片切图",[3100,133040,133041,133044],{},[1829,133042,133043],{},"利用切片工具手动划出",[1829,133045,133046],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[32,133048,133050],{"id":133049},"_934-切图步骤","9.3.4 切图步骤",[19,133052,133053],{},"用切片工具选中：",[219,133055],{"style":221,"src":133056},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[19,133058,133059],{},"文件 -> 导出",[219,133061],{"style":221,"src":133062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[2019,133064,133065],{},"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":236,"searchDepth":250,"depth":250,"links":133067},[133068,133077,133081],{"id":131504,"depth":250,"text":131505,"children":133069},[133070,133071,133072,133073,133074,133075,133076],{"id":131529,"depth":261,"text":131530},{"id":131820,"depth":261,"text":131821},{"id":131949,"depth":261,"text":131950},{"id":132149,"depth":261,"text":132150},{"id":132191,"depth":261,"text":132192},{"id":132229,"depth":261,"text":132230},{"id":132319,"depth":261,"text":132320},{"id":132599,"depth":250,"text":132600,"children":133078},[133079,133080],{"id":132603,"depth":261,"text":132604},{"id":132610,"depth":261,"text":132611},{"id":132981,"depth":250,"text":132982,"children":133082},[133083,133084,133085,133086],{"id":132985,"depth":261,"text":132986},{"id":133027,"depth":261,"text":133028},{"id":133037,"depth":261,"text":133038},{"id":133049,"depth":261,"text":133050},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":131496,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":133093,"title":133094,"body":133095,"description":2048,"extension":2049,"meta":133736,"navigation":2051,"path":133737,"seo":133738,"stem":133739,"__hash__":133740},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":133096,"toc":133724},[133097,133100,133104,133130,133164,133168,133172,133175,133217,133224,133234,133242,133244,133247,133250,133253,133260,133274,133278,133281,133310,133314,133317,133331,133335,133338,133366,133370,133373,133399,133403,133408,133441,133446,133474,133478,133495,133541,133546,133590,133607,133714,133722],[10,133098,133094],{"id":133099},"_10-css规范与学成在线案例",[14,133101,133103],{"id":133102},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[1826,133105,133106,133112,133118,133124],{},[1829,133107,133108,133111],{},[68,133109,133110],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[1829,133113,133114,133117],{},[68,133115,133116],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[1829,133119,133120,133123],{},[68,133121,133122],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[1829,133125,133126,133129],{},[68,133127,133128],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[231,133131,133132],{"className":233,"code":131541,"language":235,"meta":236,"style":236},[23,133133,133134,133138,133144,133160],{"__ignoreMap":236},[240,133135,133136],{"class":242,"line":243},[240,133137,131548],{"class":246},[240,133139,133140,133142],{"class":242,"line":250},[240,133141,330],{"class":253},[240,133143,258],{"class":257},[240,133145,133146,133148,133150,133152,133154,133156,133158],{"class":242,"line":261},[240,133147,72813],{"class":264},[240,133149,268],{"class":257},[240,133151,1643],{"class":264},[240,133153,289],{"class":288},[240,133155,53463],{"class":264},[240,133157,131569],{"class":264},[240,133159,274],{"class":257},[240,133161,133162],{"class":242,"line":277},[240,133163,312],{"class":257},[14,133165,133167],{"id":133166},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[32,133169,133171],{"id":133170},"_1021-header头部制作","10.2.1 header头部制作",[219,133173],{"style":221,"src":133174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[3100,133176,133177,133184,133191,133197,133204,133211],{},[1829,133178,133179,133180,133183],{},"1号是版心盒子 ",[68,133181,133182],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[1829,133185,133186,133187,133190],{},"版心盒子 里面包含 2号盒子 ",[68,133188,133189],{},"logo"," 图标",[1829,133192,133193,133194,133196],{},"版心盒子 里面包含 3号盒子 ",[68,133195,55648],{}," 导航栏",[1829,133198,133199,133200,133203],{},"版心盒子 里面包含 4号盒子 ",[68,133201,133202],{},"search"," 搜索框",[1829,133205,133206,133207,133210],{},"版心盒子 里面包含 5号盒子 ",[68,133208,133209],{},"user"," 个人信息",[1829,133212,133213,133214],{},"注意，要求里面的 ",[68,133215,133216],{},"4个子盒子 必须都浮动",[1826,133218,133219],{},[1829,133220,133221],{},[68,133222,133223],{},"导航栏注意点:",[19,133225,133226,133227,133230,133231],{},"实际开发中， ",[68,133228,133229],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[68,133232,133233],{},"用 li 包含链接(li+a)的做法",[3100,133235,133236,133239],{},[1829,133237,133238],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[1829,133240,133241],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[19,133243,10976],{},[19,133245,133246],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[19,133248,133249],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[19,133251,133252],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[1826,133254,133255],{"start":250},[1829,133256,133257],{},[68,133258,133259],{},"4号盒子search的细节：",[3100,133261,133262,133265,133268],{},[1829,133263,133264],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[1829,133266,133267],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[1829,133269,133270,133273],{},[23,133271,133272],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[32,133275,133277],{"id":133276},"_1022-banner制作","10.2.2 banner制作",[219,133279],{"style":221,"src":133280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[3100,133282,133283,133290,133296,133303],{},[1829,133284,133285,133286,133289],{},"1号盒子是通栏的大盒子 ",[68,133287,133288],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[1829,133291,133292,133293,133295],{},"2号盒子是版心 ",[68,133294,2892],{}," ， 要水平居中对齐",[1829,133297,133298,133299,133302],{},"3号盒子版心内，左对齐 ",[68,133300,133301],{},"subnav"," 侧导航栏",[1829,133304,133305,133306,133309],{},"4号盒子版心内，右对齐 ",[68,133307,133308],{},"course"," 课程",[32,133311,133313],{"id":133312},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[219,133315],{"style":221,"src":133316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[3100,133318,133319,133322,133325,133328],{},[1829,133320,133321],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[1829,133323,133324],{},"1号盒子是标题 H3 左侧浮动",[1829,133326,133327],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[1829,133329,133330],{},"3号盒子 右浮动 mod 修改",[32,133332,133334],{"id":133333},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[219,133336],{"style":221,"src":133337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[3100,133339,133340,133346,133353,133360,133363],{},[1829,133341,133342,133343,133345],{},"1号盒子为最大的盒子 ",[68,133344,55649],{}," 版心水平居中对齐",[1829,133347,133348,133349,133352],{},"2号盒子为上面部分 ",[68,133350,133351],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[1829,133354,133355,133356,133359],{},"3号盒子为底下部分 ",[68,133357,133358],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[1829,133361,133362],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[1829,133364,133365],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[32,133367,133369],{"id":133368},"_1025-底部模块制作","10.2.5 底部模块制作",[219,133371],{"style":221,"src":133372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[3100,133374,133375,133382,133385,133392],{},[1829,133376,133377,133378,133381],{},"1号盒子通栏大盒子 底部 ",[68,133379,133380],{},"footer"," 给高度 底色是白色",[1829,133383,133384],{},"2号盒子版心水平居中",[1829,133386,133387,133388,133391],{},"3号盒子版权 ",[68,133389,133390],{},"copyright"," 左对齐",[1829,133393,133394,133395,133398],{},"4号盒子 链接组 ",[68,133396,133397],{},"links"," 右对齐",[32,133400,133402],{"id":133401},"_1026-代码模块","10.2.6 代码模块",[1826,133404,133405],{},[1829,133406,133407],{},"html部分",[231,133409,133411],{"className":417,"code":133410,"language":419,"meta":236,"style":236},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[23,133412,133413],{"__ignoreMap":236},[240,133414,133415,133417,133419,133421,133423,133426,133429,133431,133434,133437,133439],{"class":242,"line":243},[240,133416,431],{"class":257},[240,133418,254],{"class":253},[240,133420,457],{"class":436},[240,133422,440],{"class":257},[240,133424,133425],{"class":443},"\"https:\u002F\u002Fexample.com\"",[240,133427,133428],{"class":436}," target",[240,133430,440],{"class":257},[240,133432,133433],{"class":443},"\"_blank\"",[240,133435,133436],{"class":257},">链接文字\u003C\u002F",[240,133438,254],{"class":253},[240,133440,447],{"class":257},[1826,133442,133443],{"start":250},[1829,133444,133445],{},"css部分",[231,133447,133448],{"className":417,"code":133410,"language":419,"meta":236,"style":236},[23,133449,133450],{"__ignoreMap":236},[240,133451,133452,133454,133456,133458,133460,133462,133464,133466,133468,133470,133472],{"class":242,"line":243},[240,133453,431],{"class":257},[240,133455,254],{"class":253},[240,133457,457],{"class":436},[240,133459,440],{"class":257},[240,133461,133425],{"class":443},[240,133463,133428],{"class":436},[240,133465,440],{"class":257},[240,133467,133433],{"class":443},[240,133469,133436],{"class":257},[240,133471,254],{"class":253},[240,133473,447],{"class":257},[32,133475,133477],{"id":133476},"_1027-收获","10.2.7 收获",[1826,133479,133480,133483,133486,133489,133492],{},[1829,133481,133482],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[1829,133484,133485],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[1829,133487,133488],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[1829,133490,133491],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[1829,133493,133494],{},"遗忘代码",[231,133496,133498],{"className":233,"code":133497,"language":235,"meta":236,"style":236},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[23,133499,133500,133522,133527,133537],{"__ignoreMap":236},[240,133501,133502,133504,133506,133508,133510,133512,133514,133516,133518,133520],{"class":242,"line":243},[240,133503,330],{"class":253},[240,133505,1277],{"class":257},[240,133507,19],{"class":253},[240,133509,1277],{"class":257},[240,133511,10],{"class":253},[240,133513,1277],{"class":257},[240,133515,3100],{"class":253},[240,133517,1277],{"class":257},[240,133519,1829],{"class":253},[240,133521,258],{"class":257},[240,133523,133524],{"class":242,"line":250},[240,133525,133526],{"class":246},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[240,133528,133529,133531,133533,133535],{"class":242,"line":261},[240,133530,265],{"class":264},[240,133532,268],{"class":257},[240,133534,271],{"class":264},[240,133536,274],{"class":257},[240,133538,133539],{"class":242,"line":277},[240,133540,312],{"class":257},[1826,133542,133543],{"start":309},[1829,133544,133545],{},"html引css的程序",[231,133547,133548],{"className":233,"code":133497,"language":235,"meta":236,"style":236},[23,133549,133550,133572,133576,133586],{"__ignoreMap":236},[240,133551,133552,133554,133556,133558,133560,133562,133564,133566,133568,133570],{"class":242,"line":243},[240,133553,330],{"class":253},[240,133555,1277],{"class":257},[240,133557,19],{"class":253},[240,133559,1277],{"class":257},[240,133561,10],{"class":253},[240,133563,1277],{"class":257},[240,133565,3100],{"class":253},[240,133567,1277],{"class":257},[240,133569,1829],{"class":253},[240,133571,258],{"class":257},[240,133573,133574],{"class":242,"line":250},[240,133575,133526],{"class":246},[240,133577,133578,133580,133582,133584],{"class":242,"line":261},[240,133579,265],{"class":264},[240,133581,268],{"class":257},[240,133583,271],{"class":264},[240,133585,274],{"class":257},[240,133587,133588],{"class":242,"line":277},[240,133589,312],{"class":257},[1826,133591,133592,133595,133598,133601,133604],{"start":529},[1829,133593,133594],{},"浮动的盒子不会有外边距合并问题",[1829,133596,133597],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[1829,133599,133600],{},"ctrl+g快速定位行；shift+alt多个光标",[1829,133602,133603],{},"学习上方各个模块的选择器起名方法，以后就这样用",[1829,133605,133606],{},"在写选择器时尽量写全一些，例如",[231,133608,133610],{"className":233,"code":133609,"language":235,"meta":236,"style":236},"\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",[23,133611,133612,133617,133633,133638,133653,133658,133673,133678,133693,133698],{"__ignoreMap":236},[240,133613,133614],{"class":242,"line":243},[240,133615,133616],{"class":246},"\u002F* 静态定位（默认） *\u002F\n",[240,133618,133619,133622,133624,133626,133628,133631],{"class":242,"line":250},[240,133620,133621],{"class":436},".static",[240,133623,81721],{"class":257},[240,133625,1072],{"class":264},[240,133627,268],{"class":257},[240,133629,133630],{"class":264},"static",[240,133632,1655],{"class":257},[240,133634,133635],{"class":242,"line":261},[240,133636,133637],{"class":246},"\u002F* 相对定位 *\u002F\n",[240,133639,133640,133643,133645,133647,133649,133651],{"class":242,"line":277},[240,133641,133642],{"class":436},".relative",[240,133644,81721],{"class":257},[240,133646,1072],{"class":264},[240,133648,268],{"class":257},[240,133650,56698],{"class":264},[240,133652,1655],{"class":257},[240,133654,133655],{"class":242,"line":294},[240,133656,133657],{"class":246},"\u002F* 绝对定位 *\u002F\n",[240,133659,133660,133663,133665,133667,133669,133671],{"class":242,"line":309},[240,133661,133662],{"class":436},".absolute",[240,133664,81721],{"class":257},[240,133666,1072],{"class":264},[240,133668,268],{"class":257},[240,133670,56765],{"class":264},[240,133672,1655],{"class":257},[240,133674,133675],{"class":242,"line":529},[240,133676,133677],{"class":246},"\u002F* 固定定位 *\u002F\n",[240,133679,133680,133683,133685,133687,133689,133691],{"class":242,"line":549},[240,133681,133682],{"class":436},".fixed",[240,133684,81721],{"class":257},[240,133686,1072],{"class":264},[240,133688,268],{"class":257},[240,133690,1158],{"class":264},[240,133692,1655],{"class":257},[240,133694,133695],{"class":242,"line":569},[240,133696,133697],{"class":246},"\u002F* 粘性定位 *\u002F\n",[240,133699,133700,133703,133705,133707,133709,133712],{"class":242,"line":589},[240,133701,133702],{"class":436},".sticky",[240,133704,81721],{"class":257},[240,133706,1072],{"class":264},[240,133708,268],{"class":257},[240,133710,133711],{"class":264},"sticky",[240,133713,1655],{"class":257},[1826,133715,133716,133719],{"start":727},[1829,133717,133718],{},"一定要用好注释",[1829,133720,133721],{},"浮动的盒子不会有外边距合并的问题",[2019,133723,133065],{},{"title":236,"searchDepth":250,"depth":250,"links":133725},[133726,133727],{"id":133102,"depth":250,"text":133103},{"id":133166,"depth":250,"text":133167,"children":133728},[133729,133730,133731,133732,133733,133734,133735],{"id":133170,"depth":261,"text":133171},{"id":133276,"depth":261,"text":133277},{"id":133312,"depth":261,"text":133313},{"id":133333,"depth":261,"text":133334},{"id":133368,"depth":261,"text":133369},{"id":133401,"depth":261,"text":133402},{"id":133476,"depth":261,"text":133477},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":133094,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":133742,"title":133743,"body":133744,"description":2048,"extension":2049,"meta":135230,"navigation":2051,"path":135231,"seo":135232,"stem":135233,"__hash__":135234},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":133745,"toc":135222},[133746,133749,133753,133757,133768,133772,133789,133833,133866,133869,133886,133889,133892,133936,133940,133944,133947,133950,133954,133957,133968,134031,134072,134075,134090,134144,134152,134155,134166,134220,134246,134249,134262,134316,134348,134402,134425,134479,134482,134485,134492,134546,134567,134621,134624,134627,134712,134720,134777,134800,134804,134807,134825,134829,134848,134902,134940,134944,134947,134950,134972,134976,134984,134987,134992,135003,135006,135010,135024,135068,135071,135075,135078,135083,135109,135114,135191,135194,135198,135201,135204,135207,135210,135213,135216,135219],[10,133747,133743],{"id":133748},"_11-传统布局与定位体系",[14,133750,133752],{"id":133751},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[32,133754,133756],{"id":133755},"_1111-普通流标准流","11.1.1 普通流（标准流）",[3100,133758,133759,133762,133765],{},[1829,133760,133761],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[1829,133763,133764],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[1829,133766,133767],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[32,133769,133771],{"id":133770},"_1112-浮动","11.1.2 浮动",[3100,133773,133774,133777,133780,133783,133786],{},[1829,133775,133776],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[1829,133778,133779],{},"浮动可以改变元素标签默认的排列方式",[1829,133781,133782],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[1829,133784,133785],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[1829,133787,133788],{},"在使用行内块转换时盒子之间是有空隙的",[231,133790,133791],{"className":233,"code":132643,"language":235,"meta":236,"style":236},[23,133792,133793,133799,133809,133813,133819,133829],{"__ignoreMap":236},[240,133794,133795,133797],{"class":242,"line":243},[240,133796,132650],{"class":436},[240,133798,258],{"class":257},[240,133800,133801,133803,133805,133807],{"class":242,"line":250},[240,133802,132657],{"class":264},[240,133804,268],{"class":257},[240,133806,813],{"class":264},[240,133808,274],{"class":257},[240,133810,133811],{"class":242,"line":261},[240,133812,312],{"class":257},[240,133814,133815,133817],{"class":242,"line":277},[240,133816,132672],{"class":436},[240,133818,258],{"class":257},[240,133820,133821,133823,133825,133827],{"class":242,"line":294},[240,133822,132657],{"class":264},[240,133824,268],{"class":257},[240,133826,74437],{"class":264},[240,133828,274],{"class":257},[240,133830,133831],{"class":242,"line":309},[240,133832,312],{"class":257},[802,133834,133835,133843],{},[805,133836,133837],{},[808,133838,133839,133841],{},[811,133840,128918],{"align":813},[811,133842,29435],{"align":813},[819,133844,133845,133852,133859],{},[808,133846,133847,133849],{},[824,133848,826],{"align":813},[824,133850,133851],{"align":813},"元素不浮动（默认值）",[808,133853,133854,133856],{},[824,133855,813],{"align":813},[824,133857,133858],{"align":813},"元素向左浮动",[808,133860,133861,133863],{},[824,133862,74437],{"align":813},[824,133864,133865],{"align":813},"元素向右浮动",[19,133867,133868],{},"浮动重点：",[3100,133870,133871,133874,133877,133880,133883],{},[1829,133872,133873],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[1829,133875,133876],{},"浮动的元素会一行内显示并且元素顶部对齐",[1829,133878,133879],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[1829,133881,133882],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[1829,133884,133885],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[19,133887,133888],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[19,133890,133891],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[231,133893,133894],{"className":233,"code":132643,"language":235,"meta":236,"style":236},[23,133895,133896,133902,133912,133916,133922,133932],{"__ignoreMap":236},[240,133897,133898,133900],{"class":242,"line":243},[240,133899,132650],{"class":436},[240,133901,258],{"class":257},[240,133903,133904,133906,133908,133910],{"class":242,"line":250},[240,133905,132657],{"class":264},[240,133907,268],{"class":257},[240,133909,813],{"class":264},[240,133911,274],{"class":257},[240,133913,133914],{"class":242,"line":261},[240,133915,312],{"class":257},[240,133917,133918,133920],{"class":242,"line":277},[240,133919,132672],{"class":436},[240,133921,258],{"class":257},[240,133923,133924,133926,133928,133930],{"class":242,"line":294},[240,133925,132657],{"class":264},[240,133927,268],{"class":257},[240,133929,74437],{"class":264},[240,133931,274],{"class":257},[240,133933,133934],{"class":242,"line":309},[240,133935,312],{"class":257},[32,133937,133939],{"id":133938},"_1113-定位","11.1.3 定位",[23945,133941,133943],{"id":133942},"_11131-使用场景","11.1.3.1 使用场景",[19,133945,133946],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[19,133948,133949],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[23945,133951,133953],{"id":133952},"_11132-定位组成","11.1.3.2 定位组成",[19,133955,133956],{},"定位 = 定位模式 + 边偏移",[1826,133958,133959],{},[1829,133960,133961,133964,133965],{},[68,133962,133963],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[68,133966,133967],{},"定位模式",[231,133969,133971],{"className":233,"code":133970,"language":235,"meta":236,"style":236},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[23,133972,133973,133979,133993,134010,134027],{"__ignoreMap":236},[240,133974,133975,133977],{"class":242,"line":243},[240,133976,132025],{"class":436},[240,133978,258],{"class":257},[240,133980,133981,133984,133986,133988,133990],{"class":242,"line":250},[240,133982,133983],{"class":264},"  position",[240,133985,268],{"class":257},[240,133987,56698],{"class":264},[240,133989,132040],{"class":257},[240,133991,133992],{"class":246},"\u002F* 定位模式 *\u002F\n",[240,133994,133995,133998,134000,134002,134004,134007],{"class":242,"line":261},[240,133996,133997],{"class":264},"  top",[240,133999,268],{"class":257},[240,134001,2546],{"class":264},[240,134003,289],{"class":288},[240,134005,134006],{"class":257},";           ",[240,134008,134009],{"class":246},"\u002F* 边偏移：上 *\u002F\n",[240,134011,134012,134015,134017,134019,134021,134024],{"class":242,"line":277},[240,134013,134014],{"class":264},"  left",[240,134016,268],{"class":257},[240,134018,1000],{"class":264},[240,134020,289],{"class":288},[240,134022,134023],{"class":257},";          ",[240,134025,134026],{"class":246},"\u002F* 边偏移：左 *\u002F\n",[240,134028,134029],{"class":242,"line":294},[240,134030,312],{"class":257},[802,134032,134033,134042],{},[805,134034,134035],{},[808,134036,134037,134039],{},[811,134038,1327],{"align":813},[811,134040,134041],{"align":813},"语义",[819,134043,134044,134051,134058,134065],{},[808,134045,134046,134048],{},[824,134047,133630],{"align":813},[824,134049,134050],{"align":813},"静态定位",[808,134052,134053,134055],{},[824,134054,56698],{"align":813},[824,134056,134057],{"align":813},"相对定位",[808,134059,134060,134062],{},[824,134061,56765],{"align":813},[824,134063,134064],{"align":813},"绝对定位",[808,134066,134067,134069],{},[824,134068,1158],{"align":813},[824,134070,134071],{"align":813},"固定定位",[19,134073,134074],{},"（1）静态定位：",[3100,134076,134077,134088],{},[1829,134078,134079,134080,134083,134084,134087],{},"静态定位是元素的 ",[68,134081,134082],{},"默认定位方式"," ， ",[68,134085,134086],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[1829,134089,7133],{},[231,134091,134092],{"className":233,"code":133970,"language":235,"meta":236,"style":236},[23,134093,134094,134100,134112,134126,134140],{"__ignoreMap":236},[240,134095,134096,134098],{"class":242,"line":243},[240,134097,132025],{"class":436},[240,134099,258],{"class":257},[240,134101,134102,134104,134106,134108,134110],{"class":242,"line":250},[240,134103,133983],{"class":264},[240,134105,268],{"class":257},[240,134107,56698],{"class":264},[240,134109,132040],{"class":257},[240,134111,133992],{"class":246},[240,134113,134114,134116,134118,134120,134122,134124],{"class":242,"line":261},[240,134115,133997],{"class":264},[240,134117,268],{"class":257},[240,134119,2546],{"class":264},[240,134121,289],{"class":288},[240,134123,134006],{"class":257},[240,134125,134009],{"class":246},[240,134127,134128,134130,134132,134134,134136,134138],{"class":242,"line":277},[240,134129,134014],{"class":264},[240,134131,268],{"class":257},[240,134133,1000],{"class":264},[240,134135,289],{"class":288},[240,134137,134023],{"class":257},[240,134139,134026],{"class":246},[240,134141,134142],{"class":242,"line":294},[240,134143,312],{"class":257},[3100,134145,134146,134149],{},[1829,134147,134148],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[1829,134150,134151],{},"静态定位在布局时我们几乎不用的",[19,134153,134154],{},"（2）相对定位",[3100,134156,134157,134164],{},[1829,134158,134159,134160,134163],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[68,134161,134162],{},"原来的位置"," 来说的（自恋型）",[1829,134165,7133],{},[231,134167,134168],{"className":233,"code":133970,"language":235,"meta":236,"style":236},[23,134169,134170,134176,134188,134202,134216],{"__ignoreMap":236},[240,134171,134172,134174],{"class":242,"line":243},[240,134173,132025],{"class":436},[240,134175,258],{"class":257},[240,134177,134178,134180,134182,134184,134186],{"class":242,"line":250},[240,134179,133983],{"class":264},[240,134181,268],{"class":257},[240,134183,56698],{"class":264},[240,134185,132040],{"class":257},[240,134187,133992],{"class":246},[240,134189,134190,134192,134194,134196,134198,134200],{"class":242,"line":261},[240,134191,133997],{"class":264},[240,134193,268],{"class":257},[240,134195,2546],{"class":264},[240,134197,289],{"class":288},[240,134199,134006],{"class":257},[240,134201,134009],{"class":246},[240,134203,134204,134206,134208,134210,134212,134214],{"class":242,"line":277},[240,134205,134014],{"class":264},[240,134207,268],{"class":257},[240,134209,1000],{"class":264},[240,134211,289],{"class":288},[240,134213,134023],{"class":257},[240,134215,134026],{"class":246},[240,134217,134218],{"class":242,"line":294},[240,134219,312],{"class":257},[3100,134221,134222],{},[1829,134223,134224,134225,134227,134228,134230,134231,134234,134235,134238,134239,134241,134242,134245],{},"相对定位的特点：",[55651,134226],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[55651,134229],{},"  ② ",[68,134232,134233],{},"原来"," 在标准流的 ",[68,134236,134237],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[55651,134240],{},"  ③因此， ",[68,134243,134244],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[19,134247,134248],{},"（3）绝对定位",[3100,134250,134251,134260],{},[1829,134252,134253,134255,134256,134259],{},[68,134254,134064],{}," 是元素在移动位置的时候，是相对于它 ",[68,134257,134258],{},"祖先元素"," 来说的（拼爹型）",[1829,134261,7133],{},[231,134263,134264],{"className":233,"code":133970,"language":235,"meta":236,"style":236},[23,134265,134266,134272,134284,134298,134312],{"__ignoreMap":236},[240,134267,134268,134270],{"class":242,"line":243},[240,134269,132025],{"class":436},[240,134271,258],{"class":257},[240,134273,134274,134276,134278,134280,134282],{"class":242,"line":250},[240,134275,133983],{"class":264},[240,134277,268],{"class":257},[240,134279,56698],{"class":264},[240,134281,132040],{"class":257},[240,134283,133992],{"class":246},[240,134285,134286,134288,134290,134292,134294,134296],{"class":242,"line":261},[240,134287,133997],{"class":264},[240,134289,268],{"class":257},[240,134291,2546],{"class":264},[240,134293,289],{"class":288},[240,134295,134006],{"class":257},[240,134297,134009],{"class":246},[240,134299,134300,134302,134304,134306,134308,134310],{"class":242,"line":277},[240,134301,134014],{"class":264},[240,134303,268],{"class":257},[240,134305,1000],{"class":264},[240,134307,289],{"class":288},[240,134309,134023],{"class":257},[240,134311,134026],{"class":246},[240,134313,134314],{"class":242,"line":294},[240,134315,312],{"class":257},[3100,134317,134318,134333,134342,134345],{},[1829,134319,134320,134321,134323,134324,134326,134327,134329,134330,134332],{},"绝对定位的特点：",[55651,134322],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[55651,134325],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[55651,134328],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[55651,134331],{},"  (4)固定定位",[1829,134334,134335,134337,134338,134341],{},[68,134336,134071],{}," 是元素 ",[68,134339,134340],{},"固定于浏览器可视区的位置"," 。（认死理型）",[1829,134343,134344],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[1829,134346,134347],{},"语法:",[231,134349,134350],{"className":233,"code":133970,"language":235,"meta":236,"style":236},[23,134351,134352,134358,134370,134384,134398],{"__ignoreMap":236},[240,134353,134354,134356],{"class":242,"line":243},[240,134355,132025],{"class":436},[240,134357,258],{"class":257},[240,134359,134360,134362,134364,134366,134368],{"class":242,"line":250},[240,134361,133983],{"class":264},[240,134363,268],{"class":257},[240,134365,56698],{"class":264},[240,134367,132040],{"class":257},[240,134369,133992],{"class":246},[240,134371,134372,134374,134376,134378,134380,134382],{"class":242,"line":261},[240,134373,133997],{"class":264},[240,134375,268],{"class":257},[240,134377,2546],{"class":264},[240,134379,289],{"class":288},[240,134381,134006],{"class":257},[240,134383,134009],{"class":246},[240,134385,134386,134388,134390,134392,134394,134396],{"class":242,"line":277},[240,134387,134014],{"class":264},[240,134389,268],{"class":257},[240,134391,1000],{"class":264},[240,134393,289],{"class":288},[240,134395,134023],{"class":257},[240,134397,134026],{"class":246},[240,134399,134400],{"class":242,"line":294},[240,134401,312],{"class":257},[3100,134403,134404,134413],{},[1829,134405,134406,134407,134409,134410,134412],{},"特点:",[55651,134408],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[55651,134411],{},"  ②固定定位不再占有原先的位置,完全脱标",[1829,134414,134415,134416,134418,134419,134421,134422,134424],{},"固定在版心位置的方法:",[55651,134417],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[55651,134420],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[55651,134423],{},"  实例：",[231,134426,134427],{"className":233,"code":133970,"language":235,"meta":236,"style":236},[23,134428,134429,134435,134447,134461,134475],{"__ignoreMap":236},[240,134430,134431,134433],{"class":242,"line":243},[240,134432,132025],{"class":436},[240,134434,258],{"class":257},[240,134436,134437,134439,134441,134443,134445],{"class":242,"line":250},[240,134438,133983],{"class":264},[240,134440,268],{"class":257},[240,134442,56698],{"class":264},[240,134444,132040],{"class":257},[240,134446,133992],{"class":246},[240,134448,134449,134451,134453,134455,134457,134459],{"class":242,"line":261},[240,134450,133997],{"class":264},[240,134452,268],{"class":257},[240,134454,2546],{"class":264},[240,134456,289],{"class":288},[240,134458,134006],{"class":257},[240,134460,134009],{"class":246},[240,134462,134463,134465,134467,134469,134471,134473],{"class":242,"line":277},[240,134464,134014],{"class":264},[240,134466,268],{"class":257},[240,134468,1000],{"class":264},[240,134470,289],{"class":288},[240,134472,134023],{"class":257},[240,134474,134026],{"class":246},[240,134476,134477],{"class":242,"line":294},[240,134478,312],{"class":257},[219,134480],{"style":221,"src":134481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[19,134483,134484],{},"(5)粘性定位",[3100,134486,134487,134490],{},[1829,134488,134489],{},"粘性定位可以被认为是相对定位和固定定位的混合",[1829,134491,7133],{},[231,134493,134494],{"className":233,"code":133970,"language":235,"meta":236,"style":236},[23,134495,134496,134502,134514,134528,134542],{"__ignoreMap":236},[240,134497,134498,134500],{"class":242,"line":243},[240,134499,132025],{"class":436},[240,134501,258],{"class":257},[240,134503,134504,134506,134508,134510,134512],{"class":242,"line":250},[240,134505,133983],{"class":264},[240,134507,268],{"class":257},[240,134509,56698],{"class":264},[240,134511,132040],{"class":257},[240,134513,133992],{"class":246},[240,134515,134516,134518,134520,134522,134524,134526],{"class":242,"line":261},[240,134517,133997],{"class":264},[240,134519,268],{"class":257},[240,134521,2546],{"class":264},[240,134523,289],{"class":288},[240,134525,134006],{"class":257},[240,134527,134009],{"class":246},[240,134529,134530,134532,134534,134536,134538,134540],{"class":242,"line":277},[240,134531,134014],{"class":264},[240,134533,268],{"class":257},[240,134535,1000],{"class":264},[240,134537,289],{"class":288},[240,134539,134023],{"class":257},[240,134541,134026],{"class":246},[240,134543,134544],{"class":242,"line":294},[240,134545,312],{"class":257},[3100,134547,134548],{},[1829,134549,134550,134551,134553,134554,134556,134557,134559,134560,134563,134564,134566],{},"粘性定位的特点：",[55651,134552],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[55651,134555],{},"  ②粘性定位占有原先的位置（相对定位特点）",[55651,134558],{},"  ③必须添加 top 、left、right、bottom ",[68,134561,134562],{},"其中一个"," 才有效",[55651,134565],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[231,134568,134569],{"className":233,"code":133970,"language":235,"meta":236,"style":236},[23,134570,134571,134577,134589,134603,134617],{"__ignoreMap":236},[240,134572,134573,134575],{"class":242,"line":243},[240,134574,132025],{"class":436},[240,134576,258],{"class":257},[240,134578,134579,134581,134583,134585,134587],{"class":242,"line":250},[240,134580,133983],{"class":264},[240,134582,268],{"class":257},[240,134584,56698],{"class":264},[240,134586,132040],{"class":257},[240,134588,133992],{"class":246},[240,134590,134591,134593,134595,134597,134599,134601],{"class":242,"line":261},[240,134592,133997],{"class":264},[240,134594,268],{"class":257},[240,134596,2546],{"class":264},[240,134598,289],{"class":288},[240,134600,134006],{"class":257},[240,134602,134009],{"class":246},[240,134604,134605,134607,134609,134611,134613,134615],{"class":242,"line":277},[240,134606,134014],{"class":264},[240,134608,268],{"class":257},[240,134610,1000],{"class":264},[240,134612,289],{"class":288},[240,134614,134023],{"class":257},[240,134616,134026],{"class":246},[240,134618,134619],{"class":242,"line":294},[240,134620,312],{"class":257},[219,134622],{"style":221,"src":134623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[19,134625,134626],{},"(6)总结",[802,134628,134629,134644],{},[805,134630,134631],{},[808,134632,134633,134635,134638,134641],{},[811,134634,133967],{"align":813},[811,134636,134637],{"align":813},"是否脱标",[811,134639,134640],{"align":813},"移动位置",[811,134642,134643],{"align":813},"是否常用",[819,134645,134646,134659,134673,134687,134700],{},[808,134647,134648,134651,134653,134656],{},[824,134649,134650],{"align":813},"Static 静态定位",[824,134652,106588],{"align":813},[824,134654,134655],{"align":813},"不能使用边偏移",[824,134657,134658],{"align":813},"很少",[808,134660,134661,134664,134667,134670],{},[824,134662,134663],{"align":813},"Relative 相对定位",[824,134665,134666],{"align":813},"否(占有位置)",[824,134668,134669],{"align":813},"相对于自身位置移动",[824,134671,134672],{"align":813},"基本单独使用",[808,134674,134675,134678,134681,134684],{},[824,134676,134677],{"align":813},"Absolute 绝对定位",[824,134679,134680],{"align":813},"是(不占有位置)",[824,134682,134683],{"align":813},"带有定位的父级",[824,134685,134686],{"align":813},"要和定位父级元素搭配使用",[808,134688,134689,134692,134694,134697],{},[824,134690,134691],{"align":813},"Fixed 固定定位",[824,134693,134680],{"align":813},[824,134695,134696],{"align":813},"浏览器可视区",[824,134698,134699],{"align":813},"单独使用,不需要父级",[808,134701,134702,134705,134707,134709],{},[824,134703,134704],{"align":813},"Sticky 粘性定位",[824,134706,134666],{"align":813},[824,134708,134696],{"align":813},[824,134710,134711],{"align":813},"当前阶段少",[1826,134713,134714],{"start":250},[1829,134715,134716,134719],{},[68,134717,134718],{},"边偏移"," 则决定了该元素的最终位置",[802,134721,134722,134733],{},[805,134723,134724],{},[808,134725,134726,134729,134731],{},[811,134727,134728],{"align":813},"边偏移属性",[811,134730,29438],{"align":813},[811,134732,29435],{"align":813},[819,134734,134735,134746,134757,134767],{},[808,134736,134737,134740,134743],{},[824,134738,134739],{"align":813},"top",[824,134741,134742],{"align":813},"top: 80px;",[824,134744,134745],{"align":813},"顶端偏移量，定义元素相对于父元素上边线的距离",[808,134747,134748,134751,134754],{},[824,134749,134750],{"align":813},"bottom",[824,134752,134753],{"align":813},"bottom: 80px ;",[824,134755,134756],{"align":813},"底部偏移量，定义元素相对于其父元素下边线的距离",[808,134758,134759,134761,134764],{},[824,134760,813],{"align":813},[824,134762,134763],{"align":813},"left: 80px ;",[824,134765,134766],{"align":813},"左侧偏移量，定义元素相对于其父元素左边线的距离",[808,134768,134769,134771,134774],{},[824,134770,74437],{"align":813},[824,134772,134773],{"align":813},"right: 80px ;",[824,134775,134776],{"align":813},"右侧偏移量，定义元素相对于其父元素右边线的距离",[3100,134778,134779],{},[1829,134780,10976,134781,134783,134784,134786,134787,134789,134790,134793,134794,134796,134797,134799],{},[55651,134782],{},"  ① ",[68,134785,134718],{}," 需要和 ",[68,134788,133967],{}," 联合使用， ",[68,134791,134792],{},"单独使用无效"," ；",[55651,134795],{},"  ②top和bottom不要同时使用",[55651,134798],{},"  ③left和right不要同时使用",[23945,134801,134803],{"id":134802},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[19,134805,134806],{},"子级是绝对定位的话，父级要用相对定位",[3100,134808,134809,134812,134815,134818],{},[1829,134810,134811],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[1829,134813,134814],{},"父盒子需要加定位限制子盒子在父盒子内显示",[1829,134816,134817],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[1829,134819,134820,134821,134824],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[68,134822,134823],{},"子绝父绝"," 也会遇到",[23945,134826,134828],{"id":134827},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[3100,134830,134831,134846],{},[1829,134832,134833,134834,134837,134838,134841,134842,134845],{},"在使用 ",[68,134835,134836],{},"定位"," 布局时，可能会 ",[68,134839,134840],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[68,134843,134844],{},"z-index"," 来控制盒子的前后次序 (z轴)",[1829,134847,7133],{},[231,134849,134850],{"className":233,"code":133970,"language":235,"meta":236,"style":236},[23,134851,134852,134858,134870,134884,134898],{"__ignoreMap":236},[240,134853,134854,134856],{"class":242,"line":243},[240,134855,132025],{"class":436},[240,134857,258],{"class":257},[240,134859,134860,134862,134864,134866,134868],{"class":242,"line":250},[240,134861,133983],{"class":264},[240,134863,268],{"class":257},[240,134865,56698],{"class":264},[240,134867,132040],{"class":257},[240,134869,133992],{"class":246},[240,134871,134872,134874,134876,134878,134880,134882],{"class":242,"line":261},[240,134873,133997],{"class":264},[240,134875,268],{"class":257},[240,134877,2546],{"class":264},[240,134879,289],{"class":288},[240,134881,134006],{"class":257},[240,134883,134009],{"class":246},[240,134885,134886,134888,134890,134892,134894,134896],{"class":242,"line":277},[240,134887,134014],{"class":264},[240,134889,268],{"class":257},[240,134891,1000],{"class":264},[240,134893,289],{"class":288},[240,134895,134023],{"class":257},[240,134897,134026],{"class":246},[240,134899,134900],{"class":242,"line":294},[240,134901,312],{"class":257},[3100,134903,134904],{},[1829,134905,134906,134907,134783,134909,134911,134912,129614,134915,84453,134918,134920,134921,134923,134924,134927,134928,134793,134931,134933,134934,134937,134939],{},"z-index的特性",[55651,134908],{},[68,134910,128918],{}," ： ",[68,134913,134914],{},"正整数",[68,134916,134917],{},"负整数",[68,134919,1274],{}," ，默认值是 0，数值越大，盒子越靠上；",[55651,134922],{},"  ②如果 ",[68,134925,134926],{},"属性值相同"," ，则按照书写顺序， ",[68,134929,134930],{},"后来居上",[55651,134932],{},"  ③数字后面 ",[68,134935,134936],{},"不能加单位",[55651,134938],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[23945,134941,134943],{"id":134942},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[19,134945,134946],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[19,134948,134949],{},"方法:",[3100,134951,134952,134962],{},[1829,134953,134954,134955,134958,134959],{},"left: 50%; 让 ",[68,134956,134957],{},"盒子的左侧"," 移动到 ",[68,134960,134961],{},"父级元素的水平中心位置",[1829,134963,134964,134965,134968,134969],{},"margin-left: -100px; 让盒子 ",[68,134966,134967],{},"向左"," 移动 ",[68,134970,134971],{},"自身宽度的一半",[23945,134973,134975],{"id":134974},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[1826,134977,134978,134981],{},[1829,134979,134980],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[1829,134982,134983],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[19,134985,134986],{},"也就是说绝对定位和固定定位和浮动类似",[1826,134988,134989],{"start":261},[1829,134990,134991],{},"display 是显示模式， 可以改变显示模式有以下方式:",[3100,134993,134994,134997,135000],{},[1829,134995,134996],{},"可以用inline-block 转换为行内块",[1829,134998,134999],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[1829,135001,135002],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[19,135004,135005],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[23945,135007,135009],{"id":135008},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[1826,135011,135012,135015,135018,135021],{},[1829,135013,135014],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[1829,135016,135017],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[1829,135019,135020],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[1829,135022,135023],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[231,135025,135026],{"className":233,"code":132643,"language":235,"meta":236,"style":236},[23,135027,135028,135034,135044,135048,135054,135064],{"__ignoreMap":236},[240,135029,135030,135032],{"class":242,"line":243},[240,135031,132650],{"class":436},[240,135033,258],{"class":257},[240,135035,135036,135038,135040,135042],{"class":242,"line":250},[240,135037,132657],{"class":264},[240,135039,268],{"class":257},[240,135041,813],{"class":264},[240,135043,274],{"class":257},[240,135045,135046],{"class":242,"line":261},[240,135047,312],{"class":257},[240,135049,135050,135052],{"class":242,"line":277},[240,135051,132672],{"class":436},[240,135053,258],{"class":257},[240,135055,135056,135058,135060,135062],{"class":242,"line":294},[240,135057,132657],{"class":264},[240,135059,268],{"class":257},[240,135061,74437],{"class":264},[240,135063,274],{"class":257},[240,135065,135066],{"class":242,"line":309},[240,135067,312],{"class":257},[219,135069],{"style":221,"src":135070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[23945,135072,135074],{"id":135073},"_11138-轮播图","11.1.3.8 轮播图",[219,135076],{"style":221,"src":135077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[1826,135079,135080],{},[1829,135081,135082],{},"制作顺序:",[3100,135084,135085,135088,135091,135100],{},[1829,135086,135087],{},"大盒子我们类名为： tb-promo 淘宝广告",[1829,135089,135090],{},"里面先放一张图片",[1829,135092,135093,135094,135096,135097,135099],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[55651,135095],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[55651,135098],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[1829,135101,135102,135103,135105,135106,135108],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[55651,135104],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[55651,135107],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[1826,135110,135111],{"start":250},[1829,135112,135113],{},"代码模块",[231,135115,135117],{"className":233,"code":135116,"language":235,"meta":236,"style":236},"\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",[23,135118,135119,135124,135131,135141,135151,135161,135165,135170,135177,135187],{"__ignoreMap":236},[240,135120,135121],{"class":242,"line":243},[240,135122,135123],{"class":246},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[240,135125,135126,135129],{"class":242,"line":250},[240,135127,135128],{"class":436},".son",[240,135130,258],{"class":257},[240,135132,135133,135135,135137,135139],{"class":242,"line":261},[240,135134,133983],{"class":264},[240,135136,268],{"class":257},[240,135138,56765],{"class":264},[240,135140,274],{"class":257},[240,135142,135143,135145,135147,135149],{"class":242,"line":277},[240,135144,133997],{"class":264},[240,135146,268],{"class":257},[240,135148,1274],{"class":264},[240,135150,274],{"class":257},[240,135152,135153,135155,135157,135159],{"class":242,"line":294},[240,135154,134014],{"class":264},[240,135156,268],{"class":257},[240,135158,1274],{"class":264},[240,135160,274],{"class":257},[240,135162,135163],{"class":242,"line":309},[240,135164,312],{"class":257},[240,135166,135167],{"class":242,"line":529},[240,135168,135169],{"class":246},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[240,135171,135172,135175],{"class":242,"line":549},[240,135173,135174],{"class":436},".father",[240,135176,258],{"class":257},[240,135178,135179,135181,135183,135185],{"class":242,"line":569},[240,135180,133983],{"class":264},[240,135182,268],{"class":257},[240,135184,56698],{"class":264},[240,135186,274],{"class":257},[240,135188,135189],{"class":242,"line":589},[240,135190,312],{"class":257},[19,135192,135193],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[32,135195,135197],{"id":135196},"_1114-定位数值的移动","11.1.4 定位数值的移动",[219,135199],{"style":221,"src":135200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[19,135202,135203],{},"✨ 黄金口诀：",[19,135205,135206],{},"\"TOP正下负上，LEFT正右负左\"",[19,135208,135209],{},"\"RIGHT正左负右，BOTTOM正上负下",[19,135211,135212],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[19,135214,135215],{},"✨ 简单记：",[19,135217,135218],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[2019,135220,135221],{},"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":236,"searchDepth":250,"depth":250,"links":135223},[135224],{"id":133751,"depth":250,"text":133752,"children":135225},[135226,135227,135228,135229],{"id":133755,"depth":261,"text":133756},{"id":133770,"depth":261,"text":133771},{"id":133938,"depth":261,"text":133939},{"id":135196,"depth":261,"text":135197},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":133743,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":135236,"title":135237,"body":135238,"description":2048,"extension":2049,"meta":136661,"navigation":2051,"path":136662,"seo":136663,"stem":136664,"__hash__":136665},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":135239,"toc":136640},[135240,135243,135247,135255,135259,135264,135272,135284,135288,135293,135301,135312,135316,135321,135362,135370,135374,135377,135380,135383,135477,135480,135574,135577,135671,135674,135677,135712,135715,135718,135748,135751,135754,135757,135760,135763,135766,135769,135839,135842,135846,135850,135891,135895,135901,135904,135907,135911,135914,135917,135920,136001,136004,136007,136011,136015,136018,136021,136024,136027,136030,136036,136045,136049,136068,136072,136082,136085,136088,136091,136094,136097,136100,136103,136106,136115,136119,136128,136131,136136,136189,136194,136360,136363,136366,136371,136374,136377,136380,136383,136388,136536,136539,136542,136547,136550,136555,136589,136592,136595,136599,136602,136609,136612,136615,136618,136621,136624,136627,136630,136634,136637],[10,135241,135237],{"id":135242},"_12-显示隐藏与图形资源",[14,135244,135246],{"id":135245},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[3100,135248,135249,135252],{},[1829,135250,135251],{},"目的:让一个元素在页面中消失或者显示出来",[1829,135253,135254],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[32,135256,135258],{"id":135257},"_1211-display-显示","12.1.1 display 显示",[1826,135260,135261],{},[1829,135262,135263],{},"display 设置或检索对象是否及如何显示",[3100,135265,135266,135269],{},[1829,135267,135268],{},"display: none;隐藏对象",[1829,135270,135271],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[1826,135273,135274,135281],{"start":250},[1829,135275,135276,135277,135280],{},"特点： display 隐藏元素后， ",[68,135278,135279],{},"不再占"," 有原来的位置",[1829,135282,135283],{},"在js中使用非常的广泛",[32,135285,135287],{"id":135286},"_1212-visibility可见性","12.1.2 visibility可见性",[1826,135289,135290],{},[1829,135291,135292],{},"visibility 属性用于指定一个元素应可见还是隐藏",[3100,135294,135295,135298],{},[1829,135296,135297],{},"visibility： visible；元素可见",[1829,135299,135300],{},"visibility：hidden；元素隐藏",[1826,135302,135303,135306,135309],{"start":250},[1829,135304,135305],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[1829,135307,135308],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[1829,135310,135311],{},"隐藏后继续占有原有位置",[32,135313,135315],{"id":135314},"_1213-overflow溢出","12.1.3 overflow溢出",[3100,135317,135318],{},[1829,135319,135320],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[802,135322,135323,135331],{},[805,135324,135325],{},[808,135326,135327,135329],{},[811,135328,128918],{"align":813},[811,135330,29435],{"align":813},[819,135332,135333,135341,135348,135355],{},[808,135334,135335,135338],{},[824,135336,135337],{"align":813},"visible",[824,135339,135340],{"align":813},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[808,135342,135343,135345],{},[824,135344,63640],{"align":813},[824,135346,135347],{"align":813},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[808,135349,135350,135352],{},[824,135351,1132],{"align":813},[824,135353,135354],{"align":813},"不管超出内容否，总是显示滚动条",[808,135356,135357,135359],{},[824,135358,74578],{"align":813},[824,135360,135361],{"align":813},"超出自动显示滚动条，不超出不显示滚动条",[3100,135363,135364,135367],{},[1829,135365,135366],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[1829,135368,135369],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[32,135371,135373],{"id":135372},"_1214-案例收获","12.1.4 案例收获",[219,135375],{"style":221,"src":135376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[19,135378,135379],{},"问题：没做出来动态效果，使用hover没实现",[19,135381,135382],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[231,135384,135385],{"className":233,"code":133609,"language":235,"meta":236,"style":236},[23,135386,135387,135391,135405,135409,135423,135427,135441,135445,135459,135463],{"__ignoreMap":236},[240,135388,135389],{"class":242,"line":243},[240,135390,133616],{"class":246},[240,135392,135393,135395,135397,135399,135401,135403],{"class":242,"line":250},[240,135394,133621],{"class":436},[240,135396,81721],{"class":257},[240,135398,1072],{"class":264},[240,135400,268],{"class":257},[240,135402,133630],{"class":264},[240,135404,1655],{"class":257},[240,135406,135407],{"class":242,"line":261},[240,135408,133637],{"class":246},[240,135410,135411,135413,135415,135417,135419,135421],{"class":242,"line":277},[240,135412,133642],{"class":436},[240,135414,81721],{"class":257},[240,135416,1072],{"class":264},[240,135418,268],{"class":257},[240,135420,56698],{"class":264},[240,135422,1655],{"class":257},[240,135424,135425],{"class":242,"line":294},[240,135426,133657],{"class":246},[240,135428,135429,135431,135433,135435,135437,135439],{"class":242,"line":309},[240,135430,133662],{"class":436},[240,135432,81721],{"class":257},[240,135434,1072],{"class":264},[240,135436,268],{"class":257},[240,135438,56765],{"class":264},[240,135440,1655],{"class":257},[240,135442,135443],{"class":242,"line":529},[240,135444,133677],{"class":246},[240,135446,135447,135449,135451,135453,135455,135457],{"class":242,"line":549},[240,135448,133682],{"class":436},[240,135450,81721],{"class":257},[240,135452,1072],{"class":264},[240,135454,268],{"class":257},[240,135456,1158],{"class":264},[240,135458,1655],{"class":257},[240,135460,135461],{"class":242,"line":569},[240,135462,133697],{"class":246},[240,135464,135465,135467,135469,135471,135473,135475],{"class":242,"line":589},[240,135466,133702],{"class":436},[240,135468,81721],{"class":257},[240,135470,1072],{"class":264},[240,135472,268],{"class":257},[240,135474,133711],{"class":264},[240,135476,1655],{"class":257},[19,135478,135479],{},"完整代码：",[231,135481,135482],{"className":233,"code":133609,"language":235,"meta":236,"style":236},[23,135483,135484,135488,135502,135506,135520,135524,135538,135542,135556,135560],{"__ignoreMap":236},[240,135485,135486],{"class":242,"line":243},[240,135487,133616],{"class":246},[240,135489,135490,135492,135494,135496,135498,135500],{"class":242,"line":250},[240,135491,133621],{"class":436},[240,135493,81721],{"class":257},[240,135495,1072],{"class":264},[240,135497,268],{"class":257},[240,135499,133630],{"class":264},[240,135501,1655],{"class":257},[240,135503,135504],{"class":242,"line":261},[240,135505,133637],{"class":246},[240,135507,135508,135510,135512,135514,135516,135518],{"class":242,"line":277},[240,135509,133642],{"class":436},[240,135511,81721],{"class":257},[240,135513,1072],{"class":264},[240,135515,268],{"class":257},[240,135517,56698],{"class":264},[240,135519,1655],{"class":257},[240,135521,135522],{"class":242,"line":294},[240,135523,133657],{"class":246},[240,135525,135526,135528,135530,135532,135534,135536],{"class":242,"line":309},[240,135527,133662],{"class":436},[240,135529,81721],{"class":257},[240,135531,1072],{"class":264},[240,135533,268],{"class":257},[240,135535,56765],{"class":264},[240,135537,1655],{"class":257},[240,135539,135540],{"class":242,"line":529},[240,135541,133677],{"class":246},[240,135543,135544,135546,135548,135550,135552,135554],{"class":242,"line":549},[240,135545,133682],{"class":436},[240,135547,81721],{"class":257},[240,135549,1072],{"class":264},[240,135551,268],{"class":257},[240,135553,1158],{"class":264},[240,135555,1655],{"class":257},[240,135557,135558],{"class":242,"line":569},[240,135559,133697],{"class":246},[240,135561,135562,135564,135566,135568,135570,135572],{"class":242,"line":589},[240,135563,133702],{"class":436},[240,135565,81721],{"class":257},[240,135567,1072],{"class":264},[240,135569,268],{"class":257},[240,135571,133711],{"class":264},[240,135573,1655],{"class":257},[19,135575,135576],{},"分布思路重点详解：",[231,135578,135579],{"className":233,"code":133609,"language":235,"meta":236,"style":236},[23,135580,135581,135585,135599,135603,135617,135621,135635,135639,135653,135657],{"__ignoreMap":236},[240,135582,135583],{"class":242,"line":243},[240,135584,133616],{"class":246},[240,135586,135587,135589,135591,135593,135595,135597],{"class":242,"line":250},[240,135588,133621],{"class":436},[240,135590,81721],{"class":257},[240,135592,1072],{"class":264},[240,135594,268],{"class":257},[240,135596,133630],{"class":264},[240,135598,1655],{"class":257},[240,135600,135601],{"class":242,"line":261},[240,135602,133637],{"class":246},[240,135604,135605,135607,135609,135611,135613,135615],{"class":242,"line":277},[240,135606,133642],{"class":436},[240,135608,81721],{"class":257},[240,135610,1072],{"class":264},[240,135612,268],{"class":257},[240,135614,56698],{"class":264},[240,135616,1655],{"class":257},[240,135618,135619],{"class":242,"line":294},[240,135620,133657],{"class":246},[240,135622,135623,135625,135627,135629,135631,135633],{"class":242,"line":309},[240,135624,133662],{"class":436},[240,135626,81721],{"class":257},[240,135628,1072],{"class":264},[240,135630,268],{"class":257},[240,135632,56765],{"class":264},[240,135634,1655],{"class":257},[240,135636,135637],{"class":242,"line":529},[240,135638,133677],{"class":246},[240,135640,135641,135643,135645,135647,135649,135651],{"class":242,"line":549},[240,135642,133682],{"class":436},[240,135644,81721],{"class":257},[240,135646,1072],{"class":264},[240,135648,268],{"class":257},[240,135650,1158],{"class":264},[240,135652,1655],{"class":257},[240,135654,135655],{"class":242,"line":569},[240,135656,133697],{"class":246},[240,135658,135659,135661,135663,135665,135667,135669],{"class":242,"line":589},[240,135660,133702],{"class":436},[240,135662,81721],{"class":257},[240,135664,1072],{"class":264},[240,135666,268],{"class":257},[240,135668,133711],{"class":264},[240,135670,1655],{"class":257},[219,135672],{"style":221,"src":135673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[19,135675,135676],{},"图片太大，盒子太小，此时需要修改图片的大小",[231,135678,135680],{"className":417,"code":135679,"language":419,"meta":236,"style":236},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[23,135681,135682],{"__ignoreMap":236},[240,135683,135684,135686,135688,135690,135692,135695,135697,135699,135702,135705,135707,135710],{"class":242,"line":243},[240,135685,431],{"class":257},[240,135687,219],{"class":253},[240,135689,57172],{"class":436},[240,135691,440],{"class":257},[240,135693,135694],{"class":443},"\"images\u002Fpic.jpg\"",[240,135696,57180],{"class":436},[240,135698,440],{"class":257},[240,135700,135701],{"class":443},"\"描述文字\"",[240,135703,135704],{"class":436}," title",[240,135706,440],{"class":257},[240,135708,135709],{"class":443},"\"悬停提示\"",[240,135711,447],{"class":257},[219,135713],{"style":221,"src":135714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[19,135716,135717],{},"制造遮罩层",[231,135719,135720],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,135721,135722],{"__ignoreMap":236},[240,135723,135724,135726,135728,135730,135732,135734,135736,135738,135740,135742,135744,135746],{"class":242,"line":243},[240,135725,431],{"class":257},[240,135727,219],{"class":253},[240,135729,57172],{"class":436},[240,135731,440],{"class":257},[240,135733,135694],{"class":443},[240,135735,57180],{"class":436},[240,135737,440],{"class":257},[240,135739,135701],{"class":443},[240,135741,135704],{"class":436},[240,135743,440],{"class":257},[240,135745,135709],{"class":443},[240,135747,447],{"class":257},[19,135749,135750],{},"此时是这样的为标准流",[219,135752],{"style":221,"src":135753},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[19,135755,135756],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[19,135758,135759],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[19,135761,135762],{},"让他在中间，用center(background-position)",[19,135764,135765],{},"将需要变的尽可能放到一个盒子中",[19,135767,135768],{},"放大盒子上内部盒子发生变化",[231,135770,135772],{"className":233,"code":135771,"language":235,"meta":236,"style":236},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[23,135773,135774,135780,135790,135794,135801,135811,135823,135835],{"__ignoreMap":236},[240,135775,135776,135778],{"class":242,"line":243},[240,135777,129518],{"class":436},[240,135779,258],{"class":257},[240,135781,135782,135784,135786,135788],{"class":242,"line":250},[240,135783,133983],{"class":264},[240,135785,268],{"class":257},[240,135787,56698],{"class":264},[240,135789,274],{"class":257},[240,135791,135792],{"class":242,"line":261},[240,135793,312],{"class":257},[240,135795,135796,135799],{"class":242,"line":277},[240,135797,135798],{"class":436},".child",[240,135800,258],{"class":257},[240,135802,135803,135805,135807,135809],{"class":242,"line":294},[240,135804,133983],{"class":264},[240,135806,268],{"class":257},[240,135808,56765],{"class":264},[240,135810,274],{"class":257},[240,135812,135813,135815,135817,135819,135821],{"class":242,"line":309},[240,135814,133997],{"class":264},[240,135816,268],{"class":257},[240,135818,2754],{"class":264},[240,135820,2429],{"class":288},[240,135822,274],{"class":257},[240,135824,135825,135827,135829,135831,135833],{"class":242,"line":529},[240,135826,134014],{"class":264},[240,135828,268],{"class":257},[240,135830,2754],{"class":264},[240,135832,2429],{"class":288},[240,135834,274],{"class":257},[240,135836,135837],{"class":242,"line":549},[240,135838,312],{"class":257},[19,135840,135841],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[14,135843,135845],{"id":135844},"_122-精灵图","12.2 精灵图",[32,135847,135849],{"id":135848},"_1221-理解","12.2.1 理解",[1826,135851,135852,135870],{},[1829,135853,135854,135855,134083,135858,135861,135862,135865,135866,135869],{},"目的： ",[68,135856,135857],{},"为了有效地减少服务器接收和发送请求的次数",[68,135859,135860],{},"提高"," 页面的 ",[68,135863,135864],{},"加载速度"," ，出现了 ",[68,135867,135868],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[1829,135871,135872,135873,135875,135876,135878,135879,135881,135882,135884,135885,135887,135888,135890],{},"使用精灵图核心：",[55651,135874],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[55651,135877],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[55651,135880],{},"  ③移动背景图片位置， 此时可以使用 background-position",[55651,135883],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[55651,135886],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[55651,135889],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[32,135892,135894],{"id":135893},"_1222-扒图","12.2.2 扒图",[231,135896,135899],{"className":135897,"code":135898,"language":7139},[7137],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[23,135900,135898],{"__ignoreMap":236},[219,135902],{"style":221,"src":135903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[219,135905],{"style":221,"src":135906},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[32,135908,135910],{"id":135909},"_1223-精灵图的实现","12.2.3 精灵图的实现",[219,135912],{"style":221,"src":135913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[19,135915,135916],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[219,135918],{"style":221,"src":135919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[231,135921,135923],{"className":233,"code":135922,"language":235,"meta":236,"style":236},"\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",[23,135924,135925,135930,135937,135949,135961,135980,135997],{"__ignoreMap":236},[240,135926,135927],{"class":242,"line":243},[240,135928,135929],{"class":246},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[240,135931,135932,135935],{"class":242,"line":250},[240,135933,135934],{"class":436},".icon",[240,135936,258],{"class":257},[240,135938,135939,135941,135943,135945,135947],{"class":242,"line":261},[240,135940,280],{"class":264},[240,135942,268],{"class":257},[240,135944,1000],{"class":264},[240,135946,289],{"class":288},[240,135948,274],{"class":257},[240,135950,135951,135953,135955,135957,135959],{"class":242,"line":277},[240,135952,297],{"class":264},[240,135954,268],{"class":257},[240,135956,1000],{"class":264},[240,135958,289],{"class":288},[240,135960,274],{"class":257},[240,135962,135963,135965,135967,135969,135971,135974,135976,135978],{"class":242,"line":294},[240,135964,1216],{"class":264},[240,135966,268],{"class":257},[240,135968,786],{"class":264},[240,135970,789],{"class":257},[240,135972,135973],{"class":792},"sprites.png",[240,135975,1230],{"class":257},[240,135977,892],{"class":264},[240,135979,274],{"class":257},[240,135981,135982,135984,135986,135988,135990,135993,135995],{"class":242,"line":309},[240,135983,966],{"class":264},[240,135985,268],{"class":257},[240,135987,53702],{"class":264},[240,135989,289],{"class":288},[240,135991,135992],{"class":264}," -20",[240,135994,289],{"class":288},[240,135996,274],{"class":257},[240,135998,135999],{"class":242,"line":529},[240,136000,312],{"class":257},[219,136002],{"style":221,"src":136003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[19,136005,136006],{},"在前端中坐标轴的正方向是右和下",[14,136008,136010],{"id":136009},"_123-字体图标","12.3 字体图标",[32,136012,136014],{"id":136013},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[19,136016,136017],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[19,136019,136020],{},"精灵图是有诸多优点的，但是缺点很明显。",[19,136022,136023],{},"1.图片文件还是比较大的。",[19,136025,136026],{},"2.图片本身放大和缩小会失真。",[19,136028,136029],{},"3.一旦图片制作完毕想要更换非常复杂。",[19,136031,136032,136033,27687],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[68,136034,136035],{},"字体图标 iconfont",[19,136037,136038,136041,136042,30331],{},[68,136039,136040],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[68,136043,136044],{},"展示的是图标，本质属于字体",[32,136046,136048],{"id":136047},"_1232-字体图标的优点","12.3.2 字体图标的优点",[3100,136050,136051,136056,136059,136062,136065],{},[1829,136052,136053,136055],{},[68,136054,27822],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[1829,136057,136058],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[1829,136060,136061],{},"兼容性：几乎支持所有的浏览器，请放心使用",[1829,136063,136064],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[1829,136066,136067],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[32,136069,136071],{"id":136070},"_1233-字体库下载网站","12.3.3 字体库下载网站",[3100,136073,136074],{},[1829,136075,136076,136077],{},"icomoon字体库：",[254,136078,136081],{"href":136079,"rel":136080},"http:\u002F\u002Ficomoon.io\u002F",[25811],"http:\u002F\u002Ficomoon.io",[19,136083,136084],{},"进去之后点icomoon app",[219,136086],{"style":221,"src":136087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[19,136089,136090],{},"可以对其编辑：",[219,136092],{"style":221,"src":136093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[19,136095,136096],{},"生成字体：",[219,136098],{"style":221,"src":136099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[19,136101,136102],{},"下载：",[219,136104],{"style":221,"src":136105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[3100,136107,136108],{},[1829,136109,136110,136111],{},"阿里iconfont字体库： ",[254,136112,136113],{"href":136113,"rel":136114},"http:\u002F\u002Fwww.iconfont.cn\u002F",[25811],[32,136116,136118],{"id":136117},"_1234-字体图标的引入","12.3.4 字体图标的引入",[1826,136120,136121],{},[1829,136122,136123,136124,136127],{},"把下载包里面的 ",[68,136125,136126],{},"fonts"," 文件夹放入页面根目录下",[219,136129],{"style":221,"src":136130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[1826,136132,136133],{"start":250},[1829,136134,136135],{},"字体文件格式",[802,136137,136138,136147],{},[805,136139,136140],{},[808,136141,136142,136145],{},[811,136143,136144],{"align":813},"格式",[811,136146,25686],{"align":813},[819,136148,136149,136159,136169,136179],{},[808,136150,136151,136156],{},[824,136152,136153],{"align":813},[68,136154,136155],{},".ttf",[824,136157,136158],{"align":813},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[808,136160,136161,136166],{},[824,136162,136163],{"align":813},[68,136164,136165],{},".woff",[824,136167,136168],{"align":813},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[808,136170,136171,136176],{},[824,136172,136173],{"align":813},[68,136174,136175],{},".eot",[824,136177,136178],{"align":813},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[808,136180,136181,136186],{},[824,136182,136183],{"align":813},[68,136184,136185],{},"svg",[824,136187,136188],{"align":813},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[1826,136190,136191],{"start":261},[1829,136192,136193],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[231,136195,136197],{"className":233,"code":136196,"language":235,"meta":236,"style":236},"\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",[23,136198,136199,136204,136211,136223,136239,136264,136285,136305,136325,136329,136335,136345,136356],{"__ignoreMap":236},[240,136200,136201],{"class":242,"line":243},[240,136202,136203],{"class":246},"\u002F* 引入字体图标 *\u002F\n",[240,136205,136206,136209],{"class":242,"line":250},[240,136207,136208],{"class":288},"@font-face",[240,136210,258],{"class":257},[240,136212,136213,136216,136218,136221],{"class":242,"line":261},[240,136214,136215],{"class":264},"  font-family",[240,136217,268],{"class":257},[240,136219,136220],{"class":443},"'icomoon'",[240,136222,274],{"class":257},[240,136224,136225,136228,136230,136232,136234,136237],{"class":242,"line":277},[240,136226,136227],{"class":264},"  src",[240,136229,268],{"class":257},[240,136231,786],{"class":264},[240,136233,789],{"class":257},[240,136235,136236],{"class":443},"'fonts\u002Ficomoon.eot'",[240,136238,796],{"class":257},[240,136240,136241,136243,136245,136247,136249,136252,136254,136257,136259,136262],{"class":242,"line":294},[240,136242,136227],{"class":264},[240,136244,268],{"class":257},[240,136246,786],{"class":264},[240,136248,789],{"class":257},[240,136250,136251],{"class":443},"'fonts\u002Ficomoon.eot?#iefix'",[240,136253,1230],{"class":257},[240,136255,136256],{"class":264},"format",[240,136258,789],{"class":257},[240,136260,136261],{"class":443},"'embedded-opentype'",[240,136263,39993],{"class":257},[240,136265,136266,136269,136271,136274,136276,136278,136280,136283],{"class":242,"line":309},[240,136267,136268],{"class":264},"       url",[240,136270,789],{"class":257},[240,136272,136273],{"class":443},"'fonts\u002Ficomoon.woff'",[240,136275,1230],{"class":257},[240,136277,136256],{"class":264},[240,136279,789],{"class":257},[240,136281,136282],{"class":443},"'woff'",[240,136284,39993],{"class":257},[240,136286,136287,136289,136291,136294,136296,136298,136300,136303],{"class":242,"line":529},[240,136288,136268],{"class":264},[240,136290,789],{"class":257},[240,136292,136293],{"class":443},"'fonts\u002Ficomoon.ttf'",[240,136295,1230],{"class":257},[240,136297,136256],{"class":264},[240,136299,789],{"class":257},[240,136301,136302],{"class":443},"'truetype'",[240,136304,39993],{"class":257},[240,136306,136307,136309,136311,136314,136316,136318,136320,136323],{"class":242,"line":549},[240,136308,136268],{"class":264},[240,136310,789],{"class":257},[240,136312,136313],{"class":443},"'fonts\u002Ficomoon.svg#icomoon'",[240,136315,1230],{"class":257},[240,136317,136256],{"class":264},[240,136319,789],{"class":257},[240,136321,136322],{"class":443},"'svg'",[240,136324,796],{"class":257},[240,136326,136327],{"class":242,"line":569},[240,136328,312],{"class":257},[240,136330,136331,136333],{"class":242,"line":589},[240,136332,135934],{"class":436},[240,136334,258],{"class":257},[240,136336,136337,136339,136341,136343],{"class":242,"line":715},[240,136338,136215],{"class":264},[240,136340,268],{"class":257},[240,136342,136220],{"class":443},[240,136344,274],{"class":257},[240,136346,136347,136350,136352,136354],{"class":242,"line":727},[240,136348,136349],{"class":264},"  font-style",[240,136351,268],{"class":257},[240,136353,65764],{"class":264},[240,136355,274],{"class":257},[240,136357,136358],{"class":242,"line":1730},[240,136359,312],{"class":257},[19,136361,136362],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[219,136364],{"style":221,"src":136365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[1826,136367,136368],{"start":277},[1829,136369,136370],{},"添加字体",[219,136372],{"style":221,"src":136373},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[19,136375,136376],{},"复制：",[219,136378],{"style":221,"src":136379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[19,136381,136382],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[1826,136384,136385],{"start":294},[1829,136386,136387],{},"代码展示：",[231,136389,136390],{"className":233,"code":136196,"language":235,"meta":236,"style":236},[23,136391,136392,136396,136402,136412,136426,136448,136466,136484,136502,136506,136512,136522,136532],{"__ignoreMap":236},[240,136393,136394],{"class":242,"line":243},[240,136395,136203],{"class":246},[240,136397,136398,136400],{"class":242,"line":250},[240,136399,136208],{"class":288},[240,136401,258],{"class":257},[240,136403,136404,136406,136408,136410],{"class":242,"line":261},[240,136405,136215],{"class":264},[240,136407,268],{"class":257},[240,136409,136220],{"class":443},[240,136411,274],{"class":257},[240,136413,136414,136416,136418,136420,136422,136424],{"class":242,"line":277},[240,136415,136227],{"class":264},[240,136417,268],{"class":257},[240,136419,786],{"class":264},[240,136421,789],{"class":257},[240,136423,136236],{"class":443},[240,136425,796],{"class":257},[240,136427,136428,136430,136432,136434,136436,136438,136440,136442,136444,136446],{"class":242,"line":294},[240,136429,136227],{"class":264},[240,136431,268],{"class":257},[240,136433,786],{"class":264},[240,136435,789],{"class":257},[240,136437,136251],{"class":443},[240,136439,1230],{"class":257},[240,136441,136256],{"class":264},[240,136443,789],{"class":257},[240,136445,136261],{"class":443},[240,136447,39993],{"class":257},[240,136449,136450,136452,136454,136456,136458,136460,136462,136464],{"class":242,"line":309},[240,136451,136268],{"class":264},[240,136453,789],{"class":257},[240,136455,136273],{"class":443},[240,136457,1230],{"class":257},[240,136459,136256],{"class":264},[240,136461,789],{"class":257},[240,136463,136282],{"class":443},[240,136465,39993],{"class":257},[240,136467,136468,136470,136472,136474,136476,136478,136480,136482],{"class":242,"line":529},[240,136469,136268],{"class":264},[240,136471,789],{"class":257},[240,136473,136293],{"class":443},[240,136475,1230],{"class":257},[240,136477,136256],{"class":264},[240,136479,789],{"class":257},[240,136481,136302],{"class":443},[240,136483,39993],{"class":257},[240,136485,136486,136488,136490,136492,136494,136496,136498,136500],{"class":242,"line":549},[240,136487,136268],{"class":264},[240,136489,789],{"class":257},[240,136491,136313],{"class":443},[240,136493,1230],{"class":257},[240,136495,136256],{"class":264},[240,136497,789],{"class":257},[240,136499,136322],{"class":443},[240,136501,796],{"class":257},[240,136503,136504],{"class":242,"line":569},[240,136505,312],{"class":257},[240,136507,136508,136510],{"class":242,"line":589},[240,136509,135934],{"class":436},[240,136511,258],{"class":257},[240,136513,136514,136516,136518,136520],{"class":242,"line":715},[240,136515,136215],{"class":264},[240,136517,268],{"class":257},[240,136519,136220],{"class":443},[240,136521,274],{"class":257},[240,136523,136524,136526,136528,136530],{"class":242,"line":727},[240,136525,136349],{"class":264},[240,136527,268],{"class":257},[240,136529,65764],{"class":264},[240,136531,274],{"class":257},[240,136533,136534],{"class":242,"line":1730},[240,136535,312],{"class":257},[219,136537],{"style":221,"src":136538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[19,136540,136541],{},"更加细节展示：",[1826,136543,136544],{},[1829,136545,136546],{},"html 标签内添加小图标",[219,136548],{"style":221,"src":136549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[1826,136551,136552],{"start":250},[1829,136553,136554],{},"给标签定义字体",[231,136556,136557],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,136558,136559,136563,136577,136581],{"__ignoreMap":236},[240,136560,136561],{"class":242,"line":243},[240,136562,132288],{"class":246},[240,136564,136565,136567,136569,136571,136573,136575],{"class":242,"line":250},[240,136566,431],{"class":257},[240,136568,330],{"class":253},[240,136570,437],{"class":436},[240,136572,440],{"class":257},[240,136574,132301],{"class":443},[240,136576,447],{"class":257},[240,136578,136579],{"class":242,"line":261},[240,136580,132308],{"class":257},[240,136582,136583,136585,136587],{"class":242,"line":277},[240,136584,592],{"class":257},[240,136586,330],{"class":253},[240,136588,447],{"class":257},[19,136590,136591],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[219,136593],{"style":221,"src":136594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[32,136596,136598],{"id":136597},"_1235-字体图标的追加","12.3.5 字体图标的追加",[19,136600,136601],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[19,136603,136604,136605,136608],{},"把压缩包里面的 ",[68,136606,136607],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[19,136610,136611],{},"打开网站，点下方：",[219,136613],{"style":221,"src":136614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[219,136616],{"style":221,"src":136617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[219,136619],{"style":221,"src":136620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[19,136622,136623],{},"点yes重新加载",[19,136625,136626],{},"然后重复之前的操作就可以实现了",[19,136628,136629],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[32,136631,136633],{"id":136632},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[219,136635],{"style":221,"src":136636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[2019,136638,136639],{},"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":236,"searchDepth":250,"depth":250,"links":136641},[136642,136648,136653],{"id":135245,"depth":250,"text":135246,"children":136643},[136644,136645,136646,136647],{"id":135257,"depth":261,"text":135258},{"id":135286,"depth":261,"text":135287},{"id":135314,"depth":261,"text":135315},{"id":135372,"depth":261,"text":135373},{"id":135844,"depth":250,"text":135845,"children":136649},[136650,136651,136652],{"id":135848,"depth":261,"text":135849},{"id":135893,"depth":261,"text":135894},{"id":135909,"depth":261,"text":135910},{"id":136009,"depth":250,"text":136010,"children":136654},[136655,136656,136657,136658,136659,136660],{"id":136013,"depth":261,"text":136014},{"id":136047,"depth":261,"text":136048},{"id":136070,"depth":261,"text":136071},{"id":136117,"depth":261,"text":136118},{"id":136597,"depth":261,"text":136598},{"id":136632,"depth":261,"text":136633},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":135237,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":136667,"title":136668,"body":136669,"description":2048,"extension":2049,"meta":137896,"navigation":2051,"path":137897,"seo":137898,"stem":137899,"__hash__":137900},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":136670,"toc":137877},[136671,136674,136678,136681,136695,136763,136793,136796,136800,136804,136906,136953,136957,136960,136963,136997,137000,137003,137006,137009,137012,137015,137018,137020,137023,137026,137029,137032,137035,137038,137041,137069,137072,137076,137079,137086,137089,137092,137118,137121,137125,137128,137131,137138,137142,137145,137147,137179,137182,137185,137197,137203,137206,137209,137212,137214,137218,137221,137224,137227,137272,137276,137278,137281,137288,137330,137333,137337,137342,137356,137360,137363,137366,137369,137372,137375,137409,137412,137415,137469,137472,137475,137478,137481,137533,137536,137539,137588,137592,137594,137597,137600,137603,137606,137609,137667,137670,137676,137679,137682,137714,137717,137721,137725,137728,137760,137764,137767,137811,137815,137818,137821,137824,137827,137830,137833,137836,137838,137841,137843,137846,137849,137852,137855,137860,137863,137865,137868,137871,137874],[10,136672,136668],{"id":136673},"_13-界面样式与布局技巧",[14,136675,136677],{"id":136676},"_131-css三角","13.1 css三角",[19,136679,136680],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[3100,136682,136683,136686,136689,136692],{},[1829,136684,136685],{},"用css 边框可以模拟三角效果",[1829,136687,136688],{},"宽度高度为0",[1829,136690,136691],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[1829,136693,136694],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[231,136696,136698],{"className":233,"code":136697,"language":235,"meta":236,"style":236},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[23,136699,136700,136705,136712,136722,136732,136748,136759],{"__ignoreMap":236},[240,136701,136702],{"class":242,"line":243},[240,136703,136704],{"class":246},"\u002F* CSS 实现三角形 *\u002F\n",[240,136706,136707,136710],{"class":242,"line":250},[240,136708,136709],{"class":436},".triangle",[240,136711,258],{"class":257},[240,136713,136714,136716,136718,136720],{"class":242,"line":261},[240,136715,280],{"class":264},[240,136717,268],{"class":257},[240,136719,1274],{"class":264},[240,136721,274],{"class":257},[240,136723,136724,136726,136728,136730],{"class":242,"line":277},[240,136725,297],{"class":264},[240,136727,268],{"class":257},[240,136729,1274],{"class":264},[240,136731,274],{"class":257},[240,136733,136734,136736,136738,136740,136742,136744,136746],{"class":242,"line":294},[240,136735,72813],{"class":264},[240,136737,268],{"class":257},[240,136739,2546],{"class":264},[240,136741,289],{"class":288},[240,136743,53463],{"class":264},[240,136745,65914],{"class":264},[240,136747,274],{"class":257},[240,136749,136750,136753,136755,136757],{"class":242,"line":309},[240,136751,136752],{"class":264},"  border-bottom-color",[240,136754,268],{"class":257},[240,136756,1799],{"class":264},[240,136758,274],{"class":257},[240,136760,136761],{"class":242,"line":529},[240,136762,312],{"class":257},[231,136764,136765],{"className":233,"code":132334,"language":235,"meta":236,"style":236},[23,136766,136767,136773,136789],{"__ignoreMap":236},[240,136768,136769,136771],{"class":242,"line":243},[240,136770,330],{"class":253},[240,136772,258],{"class":257},[240,136774,136775,136777,136779,136781,136783,136785,136787],{"class":242,"line":250},[240,136776,72813],{"class":264},[240,136778,268],{"class":257},[240,136780,1643],{"class":264},[240,136782,289],{"class":288},[240,136784,53463],{"class":264},[240,136786,131569],{"class":264},[240,136788,274],{"class":257},[240,136790,136791],{"class":242,"line":261},[240,136792,312],{"class":257},[219,136794],{"style":221,"src":136795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[14,136797,136799],{"id":136798},"_132-css用户界面样式","13.2 css用户界面样式",[32,136801,136803],{"id":136802},"_1321-鼠标样式","13.2.1 鼠标样式",[231,136805,136807],{"className":233,"code":136806,"language":235,"meta":236,"style":236},"\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",[23,136808,136809,136814,136833,136851,136870,136887],{"__ignoreMap":236},[240,136810,136811],{"class":242,"line":243},[240,136812,136813],{"class":246},"\u002F* 鼠标样式 *\u002F\n",[240,136815,136816,136818,136820,136823,136825,136827,136830],{"class":242,"line":250},[240,136817,330],{"class":253},[240,136819,81721],{"class":257},[240,136821,136822],{"class":264},"cursor",[240,136824,268],{"class":257},[240,136826,63954],{"class":264},[240,136828,136829],{"class":257},"; }   ",[240,136831,136832],{"class":246},"\u002F* 手型 *\u002F\n",[240,136834,136835,136837,136839,136841,136843,136846,136848],{"class":242,"line":261},[240,136836,330],{"class":253},[240,136838,81721],{"class":257},[240,136840,136822],{"class":264},[240,136842,268],{"class":257},[240,136844,136845],{"class":264},"default",[240,136847,136829],{"class":257},[240,136849,136850],{"class":246},"\u002F* 默认 *\u002F\n",[240,136852,136853,136855,136857,136859,136861,136864,136867],{"class":242,"line":277},[240,136854,330],{"class":253},[240,136856,81721],{"class":257},[240,136858,136822],{"class":264},[240,136860,268],{"class":257},[240,136862,136863],{"class":264},"move",[240,136865,136866],{"class":257},"; }      ",[240,136868,136869],{"class":246},"\u002F* 移动 *\u002F\n",[240,136871,136872,136874,136876,136878,136880,136882,136884],{"class":242,"line":294},[240,136873,330],{"class":253},[240,136875,81721],{"class":257},[240,136877,136822],{"class":264},[240,136879,268],{"class":257},[240,136881,7139],{"class":264},[240,136883,136866],{"class":257},[240,136885,136886],{"class":246},"\u002F* 文本 *\u002F\n",[240,136888,136889,136891,136893,136895,136897,136900,136903],{"class":242,"line":309},[240,136890,330],{"class":253},[240,136892,81721],{"class":257},[240,136894,136822],{"class":264},[240,136896,268],{"class":257},[240,136898,136899],{"class":264},"not-allowed",[240,136901,136902],{"class":257},"; } ",[240,136904,136905],{"class":246},"\u002F* 禁止 *\u002F\n",[802,136907,136908,136916],{},[805,136909,136910],{},[808,136911,136912,136914],{},[811,136913,128918],{"align":813},[811,136915,29435],{"align":813},[819,136917,136918,136925,136932,136939,136946],{},[808,136919,136920,136922],{},[824,136921,136845],{"align":813},[824,136923,136924],{"align":813},"小白 默认",[808,136926,136927,136929],{},[824,136928,63954],{"align":813},[824,136930,136931],{"align":813},"小手",[808,136933,136934,136936],{},[824,136935,136863],{"align":813},[824,136937,136938],{"align":813},"移动",[808,136940,136941,136943],{},[824,136942,7139],{"align":813},[824,136944,136945],{"align":813},"文本",[808,136947,136948,136950],{},[824,136949,136899],{"align":813},[824,136951,136952],{"align":813},"禁止",[32,136954,136956],{"id":136955},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[19,136958,136959],{},"去除表单轮廓线",[19,136961,136962],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[231,136964,136965],{"className":233,"code":131541,"language":235,"meta":236,"style":236},[23,136966,136967,136971,136977,136993],{"__ignoreMap":236},[240,136968,136969],{"class":242,"line":243},[240,136970,131548],{"class":246},[240,136972,136973,136975],{"class":242,"line":250},[240,136974,330],{"class":253},[240,136976,258],{"class":257},[240,136978,136979,136981,136983,136985,136987,136989,136991],{"class":242,"line":261},[240,136980,72813],{"class":264},[240,136982,268],{"class":257},[240,136984,1643],{"class":264},[240,136986,289],{"class":288},[240,136988,53463],{"class":264},[240,136990,131569],{"class":264},[240,136992,274],{"class":257},[240,136994,136995],{"class":242,"line":277},[240,136996,312],{"class":257},[19,136998,136999],{},"文本域：",[219,137001],{"style":221,"src":137002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[19,137004,137005],{},"此时会有一个空白区域",[219,137007],{"style":221,"src":137008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[19,137010,137011],{},"写在同一行就不会出现这个问题",[219,137013],{"style":221,"src":137014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[19,137016,137017],{},"文本域是行内块元素，一定记住！！！",[19,137019,100146],{},[219,137021],{"style":221,"src":137022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[19,137024,137025],{},"文本域尽量放在一行",[19,137027,137028],{},"知识回顾：cols是列，rols是行",[219,137030],{"style":221,"src":137031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[19,137033,137034],{},"它可以进行拖动，显然这是我们不愿意看到的",[219,137036],{"style":221,"src":137037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[19,137039,137040],{},"使用resize进行解决",[231,137042,137044],{"className":233,"code":137043,"language":235,"meta":236,"style":236},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[23,137045,137046,137052,137065],{"__ignoreMap":236},[240,137047,137048,137050],{"class":242,"line":243},[240,137049,55756],{"class":253},[240,137051,258],{"class":257},[240,137053,137054,137056,137058,137060,137062],{"class":242,"line":250},[240,137055,72717],{"class":264},[240,137057,268],{"class":257},[240,137059,826],{"class":264},[240,137061,132040],{"class":257},[240,137063,137064],{"class":246},"\u002F* 取消表单轮廓线 *\u002F\n",[240,137066,137067],{"class":242,"line":261},[240,137068,312],{"class":257},[19,137070,137071],{},"此时就无法通过右下方实现拖动了",[32,137073,137075],{"id":137074},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[19,137077,137078],{},"实现一个盒子中的文字和图片对齐",[19,137080,137081,137082,137085],{},"用于设置一个元素的 ",[68,137083,137084],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[19,137087,137088],{},"图片和文字默认是基线对齐",[219,137090],{"style":221,"src":137091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[231,137093,137094],{"className":233,"code":137043,"language":235,"meta":236,"style":236},[23,137095,137096,137102,137114],{"__ignoreMap":236},[240,137097,137098,137100],{"class":242,"line":243},[240,137099,55756],{"class":253},[240,137101,258],{"class":257},[240,137103,137104,137106,137108,137110,137112],{"class":242,"line":250},[240,137105,72717],{"class":264},[240,137107,268],{"class":257},[240,137109,826],{"class":264},[240,137111,132040],{"class":257},[240,137113,137064],{"class":246},[240,137115,137116],{"class":242,"line":261},[240,137117,312],{"class":257},[219,137119],{"style":221,"src":137120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[23945,137122,137124],{"id":137123},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[19,137126,137127],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[219,137129],{"style":221,"src":137130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[19,137132,137133,137134,137137],{},"此时可以给图片、表单这些行内块元素的 ",[68,137135,137136],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[23945,137139,137141],{"id":137140},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[19,137143,137144],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[19,137146,16582],{},[231,137148,137150],{"className":233,"code":137149,"language":235,"meta":236,"style":236},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[23,137151,137152,137157,137163,137175],{"__ignoreMap":236},[240,137153,137154],{"class":242,"line":243},[240,137155,137156],{"class":246},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[240,137158,137159,137161],{"class":242,"line":250},[240,137160,219],{"class":253},[240,137162,258],{"class":257},[240,137164,137165,137168,137170,137173],{"class":242,"line":261},[240,137166,137167],{"class":264},"  vertical-align",[240,137169,268],{"class":257},[240,137171,137172],{"class":264},"middle",[240,137174,274],{"class":257},[240,137176,137177],{"class":242,"line":277},[240,137178,312],{"class":257},[219,137180],{"style":221,"src":137181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[19,137183,137184],{},"主要解决方法有两种：",[1826,137186,137187],{},[1829,137188,137189,137192,137193,137196],{},[68,137190,137191],{},"给图片"," 添加 ",[68,137194,137195],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[19,137198,137199,137200],{},"2.把图片转换为块级元素 ",[68,137201,137202],{},"display: block",[19,137204,137205],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[19,137207,137208],{},"img {",[19,137210,137211],{},"vertical-align:middle;",[19,137213,3040],{},[32,137215,137217],{"id":137216},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[19,137219,137220],{},"效果：",[219,137222],{"style":221,"src":137223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[19,137225,137226],{},"单行文本溢出显示省略号--必须满足三个条件：",[231,137228,137230],{"className":233,"code":137229,"language":235,"meta":236,"style":236},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[23,137231,137232,137237,137243,137253,137258,137268],{"__ignoreMap":236},[240,137233,137234],{"class":242,"line":243},[240,137235,137236],{"class":246},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[240,137238,137239,137241],{"class":242,"line":250},[240,137240,219],{"class":253},[240,137242,258],{"class":257},[240,137244,137245,137247,137249,137251],{"class":242,"line":261},[240,137246,137167],{"class":264},[240,137248,268],{"class":257},[240,137250,137172],{"class":264},[240,137252,274],{"class":257},[240,137254,137255],{"class":242,"line":277},[240,137256,137257],{"class":246},"  \u002F* 或 *\u002F\n",[240,137259,137260,137262,137264,137266],{"class":242,"line":294},[240,137261,265],{"class":264},[240,137263,268],{"class":257},[240,137265,271],{"class":264},[240,137267,274],{"class":257},[240,137269,137270],{"class":242,"line":309},[240,137271,312],{"class":257},[32,137273,137275],{"id":137274},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[19,137277,137220],{},[219,137279],{"style":221,"src":137280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[19,137282,137283,137284,137287],{},"多行文本溢出显示省略号， ",[68,137285,137286],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[231,137289,137290],{"className":233,"code":137229,"language":235,"meta":236,"style":236},[23,137291,137292,137296,137302,137312,137316,137326],{"__ignoreMap":236},[240,137293,137294],{"class":242,"line":243},[240,137295,137236],{"class":246},[240,137297,137298,137300],{"class":242,"line":250},[240,137299,219],{"class":253},[240,137301,258],{"class":257},[240,137303,137304,137306,137308,137310],{"class":242,"line":261},[240,137305,137167],{"class":264},[240,137307,268],{"class":257},[240,137309,137172],{"class":264},[240,137311,274],{"class":257},[240,137313,137314],{"class":242,"line":277},[240,137315,137257],{"class":246},[240,137317,137318,137320,137322,137324],{"class":242,"line":294},[240,137319,265],{"class":264},[240,137321,268],{"class":257},[240,137323,271],{"class":264},[240,137325,274],{"class":257},[240,137327,137328],{"class":242,"line":309},[240,137329,312],{"class":257},[19,137331,137332],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[14,137334,137336],{"id":137335},"_133-常见布局技巧","13.3 常见布局技巧",[19,137338,137339],{},[68,137340,137341],{},"巧妙利用一个技术更快更好的布局：",[1826,137343,137344,137347,137350,137353],{},[1829,137345,137346],{},"margin负值的运用",[1829,137348,137349],{},"文字围绕浮动元素",[1829,137351,137352],{},"行内块的巧妙运用",[1829,137354,137355],{},"CSS三角强化",[32,137357,137359],{"id":137358},"_1331-margin负值的运用","13.3.1 margin负值的运用",[19,137361,137362],{},"应用场景：",[219,137364],{"style":221,"src":137365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[219,137367],{"style":221,"src":137368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[19,137370,137371],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[19,137373,137374],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[231,137376,137377],{"className":233,"code":131541,"language":235,"meta":236,"style":236},[23,137378,137379,137383,137389,137405],{"__ignoreMap":236},[240,137380,137381],{"class":242,"line":243},[240,137382,131548],{"class":246},[240,137384,137385,137387],{"class":242,"line":250},[240,137386,330],{"class":253},[240,137388,258],{"class":257},[240,137390,137391,137393,137395,137397,137399,137401,137403],{"class":242,"line":261},[240,137392,72813],{"class":264},[240,137394,268],{"class":257},[240,137396,1643],{"class":264},[240,137398,289],{"class":288},[240,137400,53463],{"class":264},[240,137402,131569],{"class":264},[240,137404,274],{"class":257},[240,137406,137407],{"class":242,"line":277},[240,137408,312],{"class":257},[219,137410],{"style":221,"src":137411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[19,137413,137414],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[231,137416,137418],{"className":233,"code":137417,"language":235,"meta":236,"style":236},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[23,137419,137420,137425,137431,137441,137453,137465],{"__ignoreMap":236},[240,137421,137422],{"class":242,"line":243},[240,137423,137424],{"class":246},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[240,137426,137427,137429],{"class":242,"line":250},[240,137428,132025],{"class":436},[240,137430,258],{"class":257},[240,137432,137433,137435,137437,137439],{"class":242,"line":261},[240,137434,133983],{"class":264},[240,137436,268],{"class":257},[240,137438,56698],{"class":264},[240,137440,274],{"class":257},[240,137442,137443,137445,137447,137449,137451],{"class":242,"line":277},[240,137444,133997],{"class":264},[240,137446,268],{"class":257},[240,137448,2546],{"class":264},[240,137450,289],{"class":288},[240,137452,274],{"class":257},[240,137454,137455,137457,137459,137461,137463],{"class":242,"line":294},[240,137456,134014],{"class":264},[240,137458,268],{"class":257},[240,137460,1000],{"class":264},[240,137462,289],{"class":288},[240,137464,274],{"class":257},[240,137466,137467],{"class":242,"line":309},[240,137468,312],{"class":257},[19,137470,137471],{},"加上上述代码会发现：",[219,137473],{"style":221,"src":137474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[19,137476,137477],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[19,137479,137480],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[231,137482,137483],{"className":233,"code":137417,"language":235,"meta":236,"style":236},[23,137484,137485,137489,137495,137505,137517,137529],{"__ignoreMap":236},[240,137486,137487],{"class":242,"line":243},[240,137488,137424],{"class":246},[240,137490,137491,137493],{"class":242,"line":250},[240,137492,132025],{"class":436},[240,137494,258],{"class":257},[240,137496,137497,137499,137501,137503],{"class":242,"line":261},[240,137498,133983],{"class":264},[240,137500,268],{"class":257},[240,137502,56698],{"class":264},[240,137504,274],{"class":257},[240,137506,137507,137509,137511,137513,137515],{"class":242,"line":277},[240,137508,133997],{"class":264},[240,137510,268],{"class":257},[240,137512,2546],{"class":264},[240,137514,289],{"class":288},[240,137516,274],{"class":257},[240,137518,137519,137521,137523,137525,137527],{"class":242,"line":294},[240,137520,134014],{"class":264},[240,137522,268],{"class":257},[240,137524,1000],{"class":264},[240,137526,289],{"class":288},[240,137528,274],{"class":257},[240,137530,137531],{"class":242,"line":309},[240,137532,312],{"class":257},[19,137534,137535],{},"解决方式2：",[19,137537,137538],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[231,137540,137542],{"className":233,"code":137541,"language":235,"meta":236,"style":236},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[23,137543,137544,137550,137560,137572,137584],{"__ignoreMap":236},[240,137545,137546,137548],{"class":242,"line":243},[240,137547,330],{"class":253},[240,137549,258],{"class":257},[240,137551,137552,137554,137556,137558],{"class":242,"line":250},[240,137553,133983],{"class":264},[240,137555,268],{"class":257},[240,137557,56698],{"class":264},[240,137559,274],{"class":257},[240,137561,137562,137564,137566,137568,137570],{"class":242,"line":261},[240,137563,133997],{"class":264},[240,137565,268],{"class":257},[240,137567,2546],{"class":264},[240,137569,289],{"class":288},[240,137571,274],{"class":257},[240,137573,137574,137576,137578,137580,137582],{"class":242,"line":277},[240,137575,134014],{"class":264},[240,137577,268],{"class":257},[240,137579,1000],{"class":264},[240,137581,289],{"class":288},[240,137583,274],{"class":257},[240,137585,137586],{"class":242,"line":294},[240,137587,312],{"class":257},[32,137589,137591],{"id":137590},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[19,137593,137362],{},[219,137595],{"style":221,"src":137596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[19,137598,137599],{},"实现结构图：",[219,137601],{"style":221,"src":137602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[19,137604,137605],{},"巧妙运用浮动元素不会压住文字的特性",[19,137607,137608],{},"代码显示：",[231,137610,137612],{"className":233,"code":137611,"language":235,"meta":236,"style":236},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[23,137613,137614,137620,137630,137634,137639,137643,137649,137663],{"__ignoreMap":236},[240,137615,137616,137618],{"class":242,"line":243},[240,137617,132025],{"class":436},[240,137619,258],{"class":257},[240,137621,137622,137624,137626,137628],{"class":242,"line":250},[240,137623,132657],{"class":264},[240,137625,268],{"class":257},[240,137627,813],{"class":264},[240,137629,274],{"class":257},[240,137631,137632],{"class":242,"line":261},[240,137633,312],{"class":257},[240,137635,137636],{"class":242,"line":277},[240,137637,137638],{"class":257},"```Css\n",[240,137640,137641],{"class":242,"line":294},[240,137642,132020],{"class":246},[240,137644,137645,137647],{"class":242,"line":309},[240,137646,132025],{"class":436},[240,137648,258],{"class":257},[240,137650,137651,137653,137655,137657,137659,137661],{"class":242,"line":529},[240,137652,72393],{"class":264},[240,137654,268],{"class":257},[240,137656,1274],{"class":264},[240,137658,53498],{"class":264},[240,137660,132040],{"class":257},[240,137662,132043],{"class":246},[240,137664,137665],{"class":242,"line":549},[240,137666,312],{"class":257},[19,137668,137669],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[231,137671,137674],{"className":137672,"code":137673,"language":7139},[7137],"\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",[23,137675,137673],{"__ignoreMap":236},[219,137677],{"style":221,"src":137678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[19,137680,137681],{},"最终展示结果：",[231,137683,137684],{"className":233,"code":132013,"language":235,"meta":236,"style":236},[23,137685,137686,137690,137696,137710],{"__ignoreMap":236},[240,137687,137688],{"class":242,"line":243},[240,137689,132020],{"class":246},[240,137691,137692,137694],{"class":242,"line":250},[240,137693,132025],{"class":436},[240,137695,258],{"class":257},[240,137697,137698,137700,137702,137704,137706,137708],{"class":242,"line":261},[240,137699,72393],{"class":264},[240,137701,268],{"class":257},[240,137703,1274],{"class":264},[240,137705,53498],{"class":264},[240,137707,132040],{"class":257},[240,137709,132043],{"class":246},[240,137711,137712],{"class":242,"line":277},[240,137713,312],{"class":257},[219,137715],{"style":221,"src":137716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[14,137718,137720],{"id":137719},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[32,137722,137724],{"id":137723},"_1341-原理","13.4.1 原理",[219,137726],{"style":221,"src":137727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[231,137729,137730],{"className":233,"code":132013,"language":235,"meta":236,"style":236},[23,137731,137732,137736,137742,137756],{"__ignoreMap":236},[240,137733,137734],{"class":242,"line":243},[240,137735,132020],{"class":246},[240,137737,137738,137740],{"class":242,"line":250},[240,137739,132025],{"class":436},[240,137741,258],{"class":257},[240,137743,137744,137746,137748,137750,137752,137754],{"class":242,"line":261},[240,137745,72393],{"class":264},[240,137747,268],{"class":257},[240,137749,1274],{"class":264},[240,137751,53498],{"class":264},[240,137753,132040],{"class":257},[240,137755,132043],{"class":246},[240,137757,137758],{"class":242,"line":277},[240,137759,312],{"class":257},[32,137761,137763],{"id":137762},"_1342-实例","13.4.2 实例",[219,137765],{"style":221,"src":137766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[231,137768,137769],{"className":233,"code":132643,"language":235,"meta":236,"style":236},[23,137770,137771,137777,137787,137791,137797,137807],{"__ignoreMap":236},[240,137772,137773,137775],{"class":242,"line":243},[240,137774,132650],{"class":436},[240,137776,258],{"class":257},[240,137778,137779,137781,137783,137785],{"class":242,"line":250},[240,137780,132657],{"class":264},[240,137782,268],{"class":257},[240,137784,813],{"class":264},[240,137786,274],{"class":257},[240,137788,137789],{"class":242,"line":261},[240,137790,312],{"class":257},[240,137792,137793,137795],{"class":242,"line":277},[240,137794,132672],{"class":436},[240,137796,258],{"class":257},[240,137798,137799,137801,137803,137805],{"class":242,"line":294},[240,137800,132657],{"class":264},[240,137802,268],{"class":257},[240,137804,74437],{"class":264},[240,137806,274],{"class":257},[240,137808,137809],{"class":242,"line":309},[240,137810,312],{"class":257},[14,137812,137814],{"id":137813},"_135-css的初始化","13.5 css的初始化",[19,137816,137817],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[19,137819,137820],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[19,137822,137823],{},"每个网页都必须首先进行 CSS初始化。",[19,137825,137826],{},"这里我们以 京东CSS初始化代码为例。",[19,137828,137829],{},"在网页右键查看网页源代码",[19,137831,137832],{},"找到css的link引入语句",[19,137834,137835],{},"然后ctrl+f 输入body",[19,137837,79141],{},[219,137839],{"style":221,"src":137840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[19,137842,93],{},[219,137844],{"style":221,"src":137845},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[19,137847,137848],{},"③打开了网页上传压缩的代码",[219,137850],{"style":221,"src":137851},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[19,137853,137854],{},"④从body前可以查看这个网页的初始化代码",[19,137856,137857],{},[68,137858,137859],{},"Unicode编码字体：",[19,137861,137862],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[19,137864,85121],{},[19,137866,137867],{},"黑体 \\9ED1\\4F53",[19,137869,137870],{},"宋体 \\5B8B\\4F53",[19,137872,137873],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[2019,137875,137876],{},"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":236,"searchDepth":250,"depth":250,"links":137878},[137879,137880,137887,137891,137895],{"id":136676,"depth":250,"text":136677},{"id":136798,"depth":250,"text":136799,"children":137881},[137882,137883,137884,137885,137886],{"id":136802,"depth":261,"text":136803},{"id":136955,"depth":261,"text":136956},{"id":137074,"depth":261,"text":137075},{"id":137216,"depth":261,"text":137217},{"id":137274,"depth":261,"text":137275},{"id":137335,"depth":250,"text":137336,"children":137888},[137889,137890],{"id":137358,"depth":261,"text":137359},{"id":137590,"depth":261,"text":137591},{"id":137719,"depth":250,"text":137720,"children":137892},[137893,137894],{"id":137723,"depth":261,"text":137724},{"id":137762,"depth":261,"text":137763},{"id":137813,"depth":250,"text":137814},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":136668,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":137902,"title":137903,"body":137904,"description":2048,"extension":2049,"meta":139590,"navigation":2051,"path":139591,"seo":139592,"stem":139593,"__hash__":139594},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":137905,"toc":139579},[137906,137909,137913,137917,137920,137927,137930,137933,137971,137974,137976,137990,137994,138003,138007,138012,138015,138018,138021,138056,138061,138064,138094,138097,138102,138105,138108,138138,138141,138195,138198,138202,138207,138219,138222,138226,138256,138259,138264,138267,138297,138300,138304,138321,138325,138329,138332,138365,138368,138372,138375,138378,138381,138384,138387,138498,138501,138504,138507,138609,138612,138616,138620,138624,138627,138667,138670,138672,138688,138692,138695,138700,138781,138784,138787,138913,138918,138921,138929,138932,138937,139022,139025,139029,139032,139035,139039,139059,139064,139148,139151,139156,139159,139162,139240,139243,139246,139249,139252,139255,139260,139263,139266,139338,139341,139346,139349,139446,139449,139455,139458,139461,139464,139467,139470,139473,139476,139479,139483,139488,139491,139524,139529,139532,139573,139576],[10,137907,137903],{"id":137908},"_14-html5与css3新特性",[14,137910,137912],{"id":137911},"_141-html5的新特性","14.1 HTML5的新特性",[32,137914,137916],{"id":137915},"_1411-基本标签","14.1.1 基本标签",[19,137918,137919],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[19,137921,137922,137923,137926],{},"这些新特性都有兼容性问题，基本是 ",[68,137924,137925],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[19,137928,137929],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[19,137931,137932],{},"现在使用的是新特性：",[3100,137934,137935,137941,137947,137953,137959,137965],{},[1829,137936,137937,137940],{},[23,137938,137939],{},"\u003Cheader>"," 头部标签",[1829,137942,137943,137946],{},[23,137944,137945],{},"\u003Cnav>"," 导航标签",[1829,137948,137949,137952],{},[23,137950,137951],{},"\u003Carticle>"," 内容标签",[1829,137954,137955,137958],{},[23,137956,137957],{},"\u003Csection>"," 定义文档某个区域",[1829,137960,137961,137964],{},[23,137962,137963],{},"\u003Caside>"," 侧边栏标签",[1829,137966,137967,137970],{},[23,137968,137969],{},"\u003Cfooter>"," 尾部标签",[219,137972],{"style":221,"src":137973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[19,137975,87],{},[3100,137977,137978,137981,137984,137987],{},[1829,137979,137980],{},"这种语义化标准主要是针对搜索引擎的",[1829,137982,137983],{},"这些标签页面中可以经常使用",[1829,137985,137986],{},"在IE9中，需要把这些元素转换为块级元素",[1829,137988,137989],{},"移动端更喜欢使用这些标签",[32,137991,137993],{"id":137992},"_1412-多媒体标签","14.1.2 多媒体标签",[19,137995,137996,137997,137999,138000,138002],{},"音频 ",[68,137998,30120],{}," 和视频 ",[68,138001,30129],{}," 两个标签",[23945,138004,138006],{"id":138005},"_14121-视频标签-video","14.1.2.1 视频标签- video",[1826,138008,138009],{},[1829,138010,138011],{},"支持格式：",[219,138013],{"style":221,"src":138014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[19,138016,138017],{},"尽量使用MP4，兼容性好",[19,138019,138020],{},"用MP4就可以",[231,138022,138024],{"className":417,"code":138023,"language":419,"meta":236,"style":236},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[23,138025,138026],{"__ignoreMap":236},[240,138027,138028,138030,138032,138034,138036,138039,138041,138044,138047,138050,138052,138054],{"class":242,"line":243},[240,138029,431],{"class":257},[240,138031,30129],{"class":253},[240,138033,57172],{"class":436},[240,138035,440],{"class":257},[240,138037,138038],{"class":443},"\"movie.mp4\"",[240,138040,94336],{"class":436},[240,138042,138043],{"class":436}," autoplay",[240,138045,138046],{"class":436}," muted",[240,138048,138049],{"class":436}," loop",[240,138051,57247],{"class":257},[240,138053,30129],{"class":253},[240,138055,447],{"class":257},[1826,138057,138058],{"start":250},[1829,138059,138060],{},"兼容写法",[19,138062,138063],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[231,138065,138066],{"className":417,"code":138023,"language":419,"meta":236,"style":236},[23,138067,138068],{"__ignoreMap":236},[240,138069,138070,138072,138074,138076,138078,138080,138082,138084,138086,138088,138090,138092],{"class":242,"line":243},[240,138071,431],{"class":257},[240,138073,30129],{"class":253},[240,138075,57172],{"class":436},[240,138077,440],{"class":257},[240,138079,138038],{"class":443},[240,138081,94336],{"class":436},[240,138083,138043],{"class":436},[240,138085,138046],{"class":436},[240,138087,138049],{"class":436},[240,138089,57247],{"class":257},[240,138091,30129],{"class":253},[240,138093,447],{"class":257},[19,138095,138096],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1826,138098,138099],{"start":261},[1829,138100,138101],{},"video常用属性",[219,138103],{"style":221,"src":138104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[19,138106,138107],{},"poster属性后面是跟的等待加载图片的地址",[231,138109,138110],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,138111,138112],{"__ignoreMap":236},[240,138113,138114,138116,138118,138120,138122,138124,138126,138128,138130,138132,138134,138136],{"class":242,"line":243},[240,138115,431],{"class":257},[240,138117,219],{"class":253},[240,138119,57172],{"class":436},[240,138121,440],{"class":257},[240,138123,135694],{"class":443},[240,138125,57180],{"class":436},[240,138127,440],{"class":257},[240,138129,135701],{"class":443},[240,138131,135704],{"class":436},[240,138133,440],{"class":257},[240,138135,135709],{"class":443},[240,138137,447],{"class":257},[19,138139,138140],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[231,138142,138144],{"className":233,"code":138143,"language":235,"meta":236,"style":236},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[23,138145,138146,138151,138157,138181,138186,138191],{"__ignoreMap":236},[240,138147,138148],{"class":242,"line":243},[240,138149,138150],{"class":246},"\u002F* 2D 位移 *\u002F\n",[240,138152,138153,138155],{"class":242,"line":250},[240,138154,330],{"class":253},[240,138156,258],{"class":257},[240,138158,138159,138162,138164,138167,138169,138171,138173,138175,138177,138179],{"class":242,"line":261},[240,138160,138161],{"class":264},"  transform",[240,138163,268],{"class":257},[240,138165,138166],{"class":264},"translate",[240,138168,789],{"class":257},[240,138170,285],{"class":264},[240,138172,289],{"class":288},[240,138174,1277],{"class":257},[240,138176,2754],{"class":264},[240,138178,289],{"class":288},[240,138180,796],{"class":257},[240,138182,138183],{"class":242,"line":277},[240,138184,138185],{"class":246},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[240,138187,138188],{"class":242,"line":294},[240,138189,138190],{"class":246},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[240,138192,138193],{"class":242,"line":309},[240,138194,312],{"class":257},[19,138196,138197],{},"muted:自动静音属性",[23945,138199,138201],{"id":138200},"_14122-音频标签audio","14.1.2.2 音频标签audio",[1826,138203,138204],{},[1829,138205,138206],{},"基本使用",[19,138208,138209,138210,138215,138216],{},"当前 ",[68,138211,138212],{},[23,138213,138214],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[68,138217,138218],{},"mp3格式",[219,138220],{"style":221,"src":138221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[1826,138223,138224],{"start":250},[1829,138225,138060],{},[231,138227,138228],{"className":417,"code":138023,"language":419,"meta":236,"style":236},[23,138229,138230],{"__ignoreMap":236},[240,138231,138232,138234,138236,138238,138240,138242,138244,138246,138248,138250,138252,138254],{"class":242,"line":243},[240,138233,431],{"class":257},[240,138235,30129],{"class":253},[240,138237,57172],{"class":436},[240,138239,440],{"class":257},[240,138241,138038],{"class":443},[240,138243,94336],{"class":436},[240,138245,138043],{"class":436},[240,138247,138046],{"class":436},[240,138249,138049],{"class":436},[240,138251,57247],{"class":257},[240,138253,30129],{"class":253},[240,138255,447],{"class":257},[19,138257,138258],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[1826,138260,138261],{"start":261},[1829,138262,138263],{},"常用属性",[219,138265],{"style":221,"src":138266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[231,138268,138269],{"className":417,"code":138023,"language":419,"meta":236,"style":236},[23,138270,138271],{"__ignoreMap":236},[240,138272,138273,138275,138277,138279,138281,138283,138285,138287,138289,138291,138293,138295],{"class":242,"line":243},[240,138274,431],{"class":257},[240,138276,30129],{"class":253},[240,138278,57172],{"class":436},[240,138280,440],{"class":257},[240,138282,138038],{"class":443},[240,138284,94336],{"class":436},[240,138286,138043],{"class":436},[240,138288,138046],{"class":436},[240,138290,138049],{"class":436},[240,138292,57247],{"class":257},[240,138294,30129],{"class":253},[240,138296,447],{"class":257},[19,138298,138299],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[23945,138301,138303],{"id":138302},"_14123-总结","14.1.2.3 总结",[3100,138305,138306,138309,138312,138315,138318],{},[1829,138307,138308],{},"音频标签和视频标签使用方式基本一致",[1829,138310,138311],{},"浏览器支持情况不同",[1829,138313,138314],{},"谷歌浏览器把音频和视频自动播放禁止了",[1829,138316,138317],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[1829,138319,138320],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[32,138322,138324],{"id":138323},"_1413-表单元素","14.1.3 表单元素",[23945,138326,138328],{"id":138327},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[219,138330],{"style":221,"src":138331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[231,138333,138335],{"className":417,"code":138334,"language":419,"meta":236,"style":236},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[23,138336,138337],{"__ignoreMap":236},[240,138338,138339,138341,138343,138345,138347,138349,138351,138353,138356,138358,138360,138363],{"class":242,"line":243},[240,138340,431],{"class":257},[240,138342,55756],{"class":253},[240,138344,55759],{"class":436},[240,138346,440],{"class":257},[240,138348,64622],{"class":443},[240,138350,16869],{"class":436},[240,138352,440],{"class":257},[240,138354,138355],{"class":443},"\"username\"",[240,138357,62948],{"class":436},[240,138359,440],{"class":257},[240,138361,138362],{"class":443},"\"请输入用户名\"",[240,138364,447],{"class":257},[219,138366],{"style":221,"src":138367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[23945,138369,138371],{"id":138370},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[219,138373],{"style":221,"src":138374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[19,138376,138377],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[19,138379,138380],{},"快捷操作：",[219,138382],{"style":221,"src":138383},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[19,138385,138386],{},"例子1：",[231,138388,138390],{"className":417,"code":138389,"language":419,"meta":236,"style":236},"\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",[23,138391,138392,138415,138442,138471,138490],{"__ignoreMap":236},[240,138393,138394,138396,138398,138400,138402,138405,138408,138410,138413],{"class":242,"line":243},[240,138395,431],{"class":257},[240,138397,68548],{"class":253},[240,138399,68551],{"class":436},[240,138401,440],{"class":257},[240,138403,138404],{"class":443},"\"\u002Fsubmit\"",[240,138406,138407],{"class":436}," method",[240,138409,440],{"class":257},[240,138411,138412],{"class":443},"\"post\"",[240,138414,447],{"class":257},[240,138416,138417,138419,138421,138423,138425,138427,138429,138431,138433,138435,138437,138440],{"class":242,"line":250},[240,138418,452],{"class":257},[240,138420,55756],{"class":253},[240,138422,55759],{"class":436},[240,138424,440],{"class":257},[240,138426,64622],{"class":443},[240,138428,16869],{"class":436},[240,138430,440],{"class":257},[240,138432,138355],{"class":443},[240,138434,62948],{"class":436},[240,138436,440],{"class":257},[240,138438,138439],{"class":443},"\"用户名\"",[240,138441,447],{"class":257},[240,138443,138444,138446,138448,138450,138452,138455,138457,138459,138462,138464,138466,138469],{"class":242,"line":261},[240,138445,452],{"class":257},[240,138447,55756],{"class":253},[240,138449,55759],{"class":436},[240,138451,440],{"class":257},[240,138453,138454],{"class":443},"\"password\"",[240,138456,16869],{"class":436},[240,138458,440],{"class":257},[240,138460,138461],{"class":443},"\"pwd\"",[240,138463,62948],{"class":436},[240,138465,440],{"class":257},[240,138467,138468],{"class":443},"\"密码\"",[240,138470,447],{"class":257},[240,138472,138473,138475,138477,138479,138481,138483,138486,138488],{"class":242,"line":277},[240,138474,452],{"class":257},[240,138476,55822],{"class":253},[240,138478,55759],{"class":436},[240,138480,440],{"class":257},[240,138482,68571],{"class":443},[240,138484,138485],{"class":257},">提交\u003C\u002F",[240,138487,55822],{"class":253},[240,138489,447],{"class":257},[240,138491,138492,138494,138496],{"class":242,"line":294},[240,138493,592],{"class":257},[240,138495,68548],{"class":253},[240,138497,447],{"class":257},[219,138499],{"style":221,"src":138500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[19,138502,138503],{},"value是表单域的内容",[19,138505,138506],{},"例子2：",[231,138508,138509],{"className":417,"code":138389,"language":419,"meta":236,"style":236},[23,138510,138511,138531,138557,138583,138601],{"__ignoreMap":236},[240,138512,138513,138515,138517,138519,138521,138523,138525,138527,138529],{"class":242,"line":243},[240,138514,431],{"class":257},[240,138516,68548],{"class":253},[240,138518,68551],{"class":436},[240,138520,440],{"class":257},[240,138522,138404],{"class":443},[240,138524,138407],{"class":436},[240,138526,440],{"class":257},[240,138528,138412],{"class":443},[240,138530,447],{"class":257},[240,138532,138533,138535,138537,138539,138541,138543,138545,138547,138549,138551,138553,138555],{"class":242,"line":250},[240,138534,452],{"class":257},[240,138536,55756],{"class":253},[240,138538,55759],{"class":436},[240,138540,440],{"class":257},[240,138542,64622],{"class":443},[240,138544,16869],{"class":436},[240,138546,440],{"class":257},[240,138548,138355],{"class":443},[240,138550,62948],{"class":436},[240,138552,440],{"class":257},[240,138554,138439],{"class":443},[240,138556,447],{"class":257},[240,138558,138559,138561,138563,138565,138567,138569,138571,138573,138575,138577,138579,138581],{"class":242,"line":261},[240,138560,452],{"class":257},[240,138562,55756],{"class":253},[240,138564,55759],{"class":436},[240,138566,440],{"class":257},[240,138568,138454],{"class":443},[240,138570,16869],{"class":436},[240,138572,440],{"class":257},[240,138574,138461],{"class":443},[240,138576,62948],{"class":436},[240,138578,440],{"class":257},[240,138580,138468],{"class":443},[240,138582,447],{"class":257},[240,138584,138585,138587,138589,138591,138593,138595,138597,138599],{"class":242,"line":277},[240,138586,452],{"class":257},[240,138588,55822],{"class":253},[240,138590,55759],{"class":436},[240,138592,440],{"class":257},[240,138594,68571],{"class":443},[240,138596,138485],{"class":257},[240,138598,55822],{"class":253},[240,138600,447],{"class":257},[240,138602,138603,138605,138607],{"class":242,"line":294},[240,138604,592],{"class":257},[240,138606,68548],{"class":253},[240,138608,447],{"class":257},[219,138610],{"style":221,"src":138611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[14,138613,138615],{"id":138614},"_142-css新特性","14.2 CSS新特性",[32,138617,138619],{"id":138618},"_1421-新增选择器","14.2.1 新增选择器",[23945,138621,138623],{"id":138622},"_14211-属性选择器","14.2.1.1 属性选择器",[219,138625],{"style":221,"src":138626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[231,138628,138630],{"className":233,"code":138629,"language":235,"meta":236,"style":236},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[23,138631,138632,138647,138663],{"__ignoreMap":236},[240,138633,138634,138636,138638,138640,138642,138644],{"class":242,"line":243},[240,138635,55756],{"class":253},[240,138637,2985],{"class":257},[240,138639,105017],{"class":436},[240,138641,440],{"class":288},[240,138643,64622],{"class":443},[240,138645,138646],{"class":257},"] {\n",[240,138648,138649,138651,138653,138655,138657,138659,138661],{"class":242,"line":250},[240,138650,72813],{"class":264},[240,138652,268],{"class":257},[240,138654,1643],{"class":264},[240,138656,289],{"class":288},[240,138658,53463],{"class":264},[240,138660,131757],{"class":264},[240,138662,274],{"class":257},[240,138664,138665],{"class":242,"line":261},[240,138666,312],{"class":257},[219,138668],{"style":221,"src":138669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[19,138671,87],{},[3100,138673,138674,138677,138680,138683],{},[1829,138675,138676],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[1829,138678,138679],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[1829,138681,138682],{},"属性选择器也可以选择出来自定义的属性",[1829,138684,138685,138687],{},[68,138686,10976],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[23945,138689,138691],{"id":138690},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[219,138693],{"style":221,"src":138694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[1826,138696,138697],{},[1829,138698,138699],{},"fist-child",[231,138701,138703],{"className":233,"code":138702,"language":235,"meta":236,"style":236},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[23,138704,138705,138710,138725,138745,138763],{"__ignoreMap":236},[240,138706,138707],{"class":242,"line":243},[240,138708,138709],{"class":246},"\u002F* 属性选择器 *\u002F\n",[240,138711,138712,138714,138716,138718,138720,138722],{"class":242,"line":250},[240,138713,55756],{"class":253},[240,138715,2985],{"class":257},[240,138717,105017],{"class":436},[240,138719,440],{"class":288},[240,138721,64622],{"class":443},[240,138723,138724],{"class":257},"] { }\n",[240,138726,138727,138729,138731,138733,138736,138739,138742],{"class":242,"line":261},[240,138728,55756],{"class":253},[240,138730,2985],{"class":257},[240,138732,16643],{"class":436},[240,138734,138735],{"class":288},"^=",[240,138737,138738],{"class":443},"\"icon\"",[240,138740,138741],{"class":257},"] { }  ",[240,138743,138744],{"class":246},"\u002F* 以 icon 开头 *\u002F\n",[240,138746,138747,138749,138751,138753,138756,138758,138760],{"class":242,"line":277},[240,138748,55756],{"class":253},[240,138750,2985],{"class":257},[240,138752,16643],{"class":436},[240,138754,138755],{"class":288},"$=",[240,138757,138738],{"class":443},[240,138759,138741],{"class":257},[240,138761,138762],{"class":246},"\u002F* 以 icon 结尾 *\u002F\n",[240,138764,138765,138767,138769,138771,138774,138776,138778],{"class":242,"line":294},[240,138766,55756],{"class":253},[240,138768,2985],{"class":257},[240,138770,16643],{"class":436},[240,138772,138773],{"class":288},"*=",[240,138775,138738],{"class":443},[240,138777,138741],{"class":257},[240,138779,138780],{"class":246},"\u002F* 包含 icon *\u002F\n",[19,138782,138783],{},"ul的第一个儿子文本为红色",[19,138785,138786],{},"一定要在冒号前加空格，不然就是选中所有的了",[231,138788,138790],{"className":233,"code":138789,"language":235,"meta":236,"style":236},".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",[23,138791,138792,138798,138808,138812,138816,138821,138834,138847,138863,138880,138897],{"__ignoreMap":236},[240,138793,138794,138796],{"class":242,"line":243},[240,138795,128745],{"class":436},[240,138797,258],{"class":257},[240,138799,138800,138802,138804,138806],{"class":242,"line":250},[240,138801,678],{"class":264},[240,138803,268],{"class":257},[240,138805,1953],{"class":264},[240,138807,274],{"class":257},[240,138809,138810],{"class":242,"line":261},[240,138811,312],{"class":257},[240,138813,138814],{"class":242,"line":277},[240,138815,137638],{"class":257},[240,138817,138818],{"class":242,"line":294},[240,138819,138820],{"class":246},"\u002F* 结构伪类选择器 *\u002F\n",[240,138822,138823,138825,138828,138831],{"class":242,"line":309},[240,138824,1829],{"class":253},[240,138826,138827],{"class":436},":first-child",[240,138829,138830],{"class":257}," { }           ",[240,138832,138833],{"class":246},"\u002F* 第一个 *\u002F\n",[240,138835,138836,138838,138841,138844],{"class":242,"line":529},[240,138837,1829],{"class":253},[240,138839,138840],{"class":436},":last-child",[240,138842,138843],{"class":257}," { }            ",[240,138845,138846],{"class":246},"\u002F* 最后一个 *\u002F\n",[240,138848,138849,138851,138853,138855,138857,138860],{"class":242,"line":549},[240,138850,1829],{"class":253},[240,138852,1638],{"class":436},[240,138854,789],{"class":257},[240,138856,1668],{"class":264},[240,138858,138859],{"class":257},") { }          ",[240,138861,138862],{"class":246},"\u002F* 第2个 *\u002F\n",[240,138864,138865,138867,138869,138871,138874,138877],{"class":242,"line":569},[240,138866,1829],{"class":253},[240,138868,1638],{"class":436},[240,138870,789],{"class":257},[240,138872,138873],{"class":264},"2n",[240,138875,138876],{"class":257},") { }         ",[240,138878,138879],{"class":246},"\u002F* 偶数 *\u002F\n",[240,138881,138882,138884,138886,138888,138891,138894],{"class":242,"line":589},[240,138883,1829],{"class":253},[240,138885,1638],{"class":436},[240,138887,789],{"class":257},[240,138889,138890],{"class":264},"2n+1",[240,138892,138893],{"class":257},") { }       ",[240,138895,138896],{"class":246},"\u002F* 奇数 *\u002F\n",[240,138898,138899,138901,138903,138905,138908,138910],{"class":242,"line":715},[240,138900,1829],{"class":253},[240,138902,1638],{"class":436},[240,138904,789],{"class":257},[240,138906,138907],{"class":264},"-n+3",[240,138909,138893],{"class":257},[240,138911,138912],{"class":246},"\u002F* 前3个 *\u002F\n",[330,138914,138917],{"className":138915},[138916],"example","\n  示例内容\n",[19,138919,138920],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[3100,138922,138923],{},[1829,138924,138925,138928],{},[23,138926,138927],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[19,138930,138931],{},"也就是说它选择的是熊大",[1826,138933,138934],{"start":309},[1829,138935,138936],{},"权重",[231,138938,138940],{"className":233,"code":138939,"language":235,"meta":236,"style":236},"\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",[23,138941,138942,138946,138956,138966,138980,138994,139008],{"__ignoreMap":236},[240,138943,138944],{"class":242,"line":243},[240,138945,138820],{"class":246},[240,138947,138948,138950,138952,138954],{"class":242,"line":250},[240,138949,1829],{"class":253},[240,138951,138827],{"class":436},[240,138953,138830],{"class":257},[240,138955,138833],{"class":246},[240,138957,138958,138960,138962,138964],{"class":242,"line":261},[240,138959,1829],{"class":253},[240,138961,138840],{"class":436},[240,138963,138843],{"class":257},[240,138965,138846],{"class":246},[240,138967,138968,138970,138972,138974,138976,138978],{"class":242,"line":277},[240,138969,1829],{"class":253},[240,138971,1638],{"class":436},[240,138973,789],{"class":257},[240,138975,1668],{"class":264},[240,138977,138859],{"class":257},[240,138979,138862],{"class":246},[240,138981,138982,138984,138986,138988,138990,138992],{"class":242,"line":294},[240,138983,1829],{"class":253},[240,138985,1638],{"class":436},[240,138987,789],{"class":257},[240,138989,138873],{"class":264},[240,138991,138876],{"class":257},[240,138993,138879],{"class":246},[240,138995,138996,138998,139000,139002,139004,139006],{"class":242,"line":309},[240,138997,1829],{"class":253},[240,138999,1638],{"class":436},[240,139001,789],{"class":257},[240,139003,138890],{"class":264},[240,139005,138893],{"class":257},[240,139007,138896],{"class":246},[240,139009,139010,139012,139014,139016,139018,139020],{"class":242,"line":529},[240,139011,1829],{"class":253},[240,139013,1638],{"class":436},[240,139015,789],{"class":257},[240,139017,138907],{"class":264},[240,139019,138893],{"class":257},[240,139021,138912],{"class":246},[19,139023,139024],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[23945,139026,139028],{"id":139027},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[19,139030,139031],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[219,139033],{"style":221,"src":139034},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[1826,139036,139037],{},[1829,139038,87],{},[3100,139040,139041,139044,139047,139050,139053,139056],{},[1829,139042,139043],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[1829,139045,139046],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[1829,139048,139049],{},"语法： element::before {}",[1829,139051,139052],{},"before 和 after 必须有 content 属性",[1829,139054,139055],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[1829,139057,139058],{},"伪元素选择器和标签选择器一样，权重为 1",[1826,139060,139061],{"start":250},[1829,139062,139063],{},"实例",[231,139065,139066],{"className":233,"code":138939,"language":235,"meta":236,"style":236},[23,139067,139068,139072,139082,139092,139106,139120,139134],{"__ignoreMap":236},[240,139069,139070],{"class":242,"line":243},[240,139071,138820],{"class":246},[240,139073,139074,139076,139078,139080],{"class":242,"line":250},[240,139075,1829],{"class":253},[240,139077,138827],{"class":436},[240,139079,138830],{"class":257},[240,139081,138833],{"class":246},[240,139083,139084,139086,139088,139090],{"class":242,"line":261},[240,139085,1829],{"class":253},[240,139087,138840],{"class":436},[240,139089,138843],{"class":257},[240,139091,138846],{"class":246},[240,139093,139094,139096,139098,139100,139102,139104],{"class":242,"line":277},[240,139095,1829],{"class":253},[240,139097,1638],{"class":436},[240,139099,789],{"class":257},[240,139101,1668],{"class":264},[240,139103,138859],{"class":257},[240,139105,138862],{"class":246},[240,139107,139108,139110,139112,139114,139116,139118],{"class":242,"line":294},[240,139109,1829],{"class":253},[240,139111,1638],{"class":436},[240,139113,789],{"class":257},[240,139115,138873],{"class":264},[240,139117,138876],{"class":257},[240,139119,138879],{"class":246},[240,139121,139122,139124,139126,139128,139130,139132],{"class":242,"line":309},[240,139123,1829],{"class":253},[240,139125,1638],{"class":436},[240,139127,789],{"class":257},[240,139129,138890],{"class":264},[240,139131,138893],{"class":257},[240,139133,138896],{"class":246},[240,139135,139136,139138,139140,139142,139144,139146],{"class":242,"line":529},[240,139137,1829],{"class":253},[240,139139,1638],{"class":436},[240,139141,789],{"class":257},[240,139143,138907],{"class":264},[240,139145,138893],{"class":257},[240,139147,138912],{"class":246},[219,139149],{"style":221,"src":139150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[1826,139152,139153],{"start":261},[1829,139154,139155],{},"使用场景1",[219,139157],{"style":221,"src":139158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[19,139160,139161],{},"不需要再加盒子来整红色那部分了",[231,139163,139165],{"className":233,"code":139164,"language":235,"meta":236,"style":236},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[23,139166,139167,139172,139181,139192,139202,139206,139215,139226,139236],{"__ignoreMap":236},[240,139168,139169],{"class":242,"line":243},[240,139170,139171],{"class":246},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[240,139173,139174,139176,139179],{"class":242,"line":250},[240,139175,330],{"class":253},[240,139177,139178],{"class":436},"::before",[240,139180,258],{"class":257},[240,139182,139183,139186,139188,139190],{"class":242,"line":261},[240,139184,139185],{"class":264},"  content",[240,139187,268],{"class":257},[240,139189,9603],{"class":443},[240,139191,274],{"class":257},[240,139193,139194,139196,139198,139200],{"class":242,"line":277},[240,139195,265],{"class":264},[240,139197,268],{"class":257},[240,139199,271],{"class":264},[240,139201,274],{"class":257},[240,139203,139204],{"class":242,"line":294},[240,139205,312],{"class":257},[240,139207,139208,139210,139213],{"class":242,"line":309},[240,139209,330],{"class":253},[240,139211,139212],{"class":436},"::after",[240,139214,258],{"class":257},[240,139216,139217,139219,139221,139224],{"class":242,"line":529},[240,139218,139185],{"class":264},[240,139220,268],{"class":257},[240,139222,139223],{"class":443},"\"→\"",[240,139225,274],{"class":257},[240,139227,139228,139230,139232,139234],{"class":242,"line":549},[240,139229,678],{"class":264},[240,139231,268],{"class":257},[240,139233,63994],{"class":264},[240,139235,274],{"class":257},[240,139237,139238],{"class":242,"line":569},[240,139239,312],{"class":257},[219,139241],{"style":221,"src":139242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[19,139244,139245],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[219,139247],{"style":221,"src":139248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[19,139250,139251],{},"但是在引用时需要先转义一下",[19,139253,139254],{},"content='\\e930'",[1826,139256,139257],{"start":277},[1829,139258,139259],{},"使用场景2",[19,139261,139262],{},"仿土豆效果",[19,139264,139265],{},"通过使用伪元素选择器可以减少body中盒子的数量",[231,139267,139268],{"className":233,"code":139164,"language":235,"meta":236,"style":236},[23,139269,139270,139274,139282,139292,139302,139306,139314,139324,139334],{"__ignoreMap":236},[240,139271,139272],{"class":242,"line":243},[240,139273,139171],{"class":246},[240,139275,139276,139278,139280],{"class":242,"line":250},[240,139277,330],{"class":253},[240,139279,139178],{"class":436},[240,139281,258],{"class":257},[240,139283,139284,139286,139288,139290],{"class":242,"line":261},[240,139285,139185],{"class":264},[240,139287,268],{"class":257},[240,139289,9603],{"class":443},[240,139291,274],{"class":257},[240,139293,139294,139296,139298,139300],{"class":242,"line":277},[240,139295,265],{"class":264},[240,139297,268],{"class":257},[240,139299,271],{"class":264},[240,139301,274],{"class":257},[240,139303,139304],{"class":242,"line":294},[240,139305,312],{"class":257},[240,139307,139308,139310,139312],{"class":242,"line":309},[240,139309,330],{"class":253},[240,139311,139212],{"class":436},[240,139313,258],{"class":257},[240,139315,139316,139318,139320,139322],{"class":242,"line":529},[240,139317,139185],{"class":264},[240,139319,268],{"class":257},[240,139321,139223],{"class":443},[240,139323,274],{"class":257},[240,139325,139326,139328,139330,139332],{"class":242,"line":549},[240,139327,678],{"class":264},[240,139329,268],{"class":257},[240,139331,63994],{"class":264},[240,139333,274],{"class":257},[240,139335,139336],{"class":242,"line":569},[240,139337,312],{"class":257},[219,139339],{"style":221,"src":139340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[1826,139342,139343],{"start":294},[1829,139344,139345],{},"使用场景3",[19,139347,139348],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[231,139350,139352],{"className":233,"code":139351,"language":235,"meta":236,"style":236},".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",[23,139353,139354,139360,139370,139374,139378,139382,139390,139400,139410,139414,139422,139432,139442],{"__ignoreMap":236},[240,139355,139356,139358],{"class":242,"line":243},[240,139357,132025],{"class":436},[240,139359,258],{"class":257},[240,139361,139362,139364,139366,139368],{"class":242,"line":250},[240,139363,132657],{"class":264},[240,139365,268],{"class":257},[240,139367,813],{"class":264},[240,139369,274],{"class":257},[240,139371,139372],{"class":242,"line":261},[240,139373,312],{"class":257},[240,139375,139376],{"class":242,"line":277},[240,139377,137638],{"class":257},[240,139379,139380],{"class":242,"line":294},[240,139381,139171],{"class":246},[240,139383,139384,139386,139388],{"class":242,"line":309},[240,139385,330],{"class":253},[240,139387,139178],{"class":436},[240,139389,258],{"class":257},[240,139391,139392,139394,139396,139398],{"class":242,"line":529},[240,139393,139185],{"class":264},[240,139395,268],{"class":257},[240,139397,9603],{"class":443},[240,139399,274],{"class":257},[240,139401,139402,139404,139406,139408],{"class":242,"line":549},[240,139403,265],{"class":264},[240,139405,268],{"class":257},[240,139407,271],{"class":264},[240,139409,274],{"class":257},[240,139411,139412],{"class":242,"line":569},[240,139413,312],{"class":257},[240,139415,139416,139418,139420],{"class":242,"line":589},[240,139417,330],{"class":253},[240,139419,139212],{"class":436},[240,139421,258],{"class":257},[240,139423,139424,139426,139428,139430],{"class":242,"line":715},[240,139425,139185],{"class":264},[240,139427,268],{"class":257},[240,139429,139223],{"class":443},[240,139431,274],{"class":257},[240,139433,139434,139436,139438,139440],{"class":242,"line":727},[240,139435,678],{"class":264},[240,139437,268],{"class":257},[240,139439,63994],{"class":264},[240,139441,274],{"class":257},[240,139443,139444],{"class":242,"line":1730},[240,139445,312],{"class":257},[19,139447,139448],{},"div {\nmargin: 0 auto;\n}",[231,139450,139453],{"className":139451,"code":139452,"language":7139},[7137],"\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",[23,139454,139452],{"__ignoreMap":236},[19,139456,139457],{},"如果想让多个元素都发生变化",[19,139459,139460],{},"不能如下操作：",[19,139462,139463],{},"transition: width 2s ease 0.5s;",[19,139465,139466],{},"transition: height 2s ease 0.5s;不对！！！",[19,139468,139469],{},"上方会样式冲突，导致不显示任何过渡效果",[19,139471,139472],{},"使用如下：加逗号隔开",[19,139474,139475],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[19,139477,139478],{},"transition all 2s ease;",[32,139480,139482],{"id":139481},"_1426-过渡练习","14.2.6 过渡练习",[1826,139484,139485],{},[1829,139486,139487],{},"进度条",[219,139489],{"style":221,"src":139490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[231,139492,139494],{"className":233,"code":139493,"language":235,"meta":236,"style":236},"div {\n  transition: all 0.3s ease;\n}\n",[23,139495,139496,139502,139520],{"__ignoreMap":236},[240,139497,139498,139500],{"class":242,"line":243},[240,139499,330],{"class":253},[240,139501,258],{"class":257},[240,139503,139504,139507,139509,139511,139514,139516,139518],{"class":242,"line":250},[240,139505,139506],{"class":264},"  transition",[240,139508,268],{"class":257},[240,139510,30067],{"class":264},[240,139512,139513],{"class":264}," 0.3",[240,139515,2793],{"class":288},[240,139517,80594],{"class":264},[240,139519,274],{"class":257},[240,139521,139522],{"class":242,"line":261},[240,139523,312],{"class":257},[1826,139525,139526],{"start":250},[1829,139527,139528],{},"小米logo",[19,139530,139531],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[231,139533,139535],{"className":233,"code":139534,"language":235,"meta":236,"style":236},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[23,139536,139537,139542,139548,139564,139569],{"__ignoreMap":236},[240,139538,139539],{"class":242,"line":243},[240,139540,139541],{"class":246},"\u002F* CSS3 过渡 *\u002F\n",[240,139543,139544,139546],{"class":242,"line":250},[240,139545,330],{"class":253},[240,139547,258],{"class":257},[240,139549,139550,139552,139554,139556,139558,139560,139562],{"class":242,"line":261},[240,139551,139506],{"class":264},[240,139553,268],{"class":257},[240,139555,30067],{"class":264},[240,139557,139513],{"class":264},[240,139559,2793],{"class":288},[240,139561,80594],{"class":264},[240,139563,274],{"class":257},[240,139565,139566],{"class":242,"line":277},[240,139567,139568],{"class":246},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[240,139570,139571],{"class":242,"line":294},[240,139572,312],{"class":257},[19,139574,139575],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[2019,139577,139578],{},"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":236,"searchDepth":250,"depth":250,"links":139580},[139581,139586],{"id":137911,"depth":250,"text":137912,"children":139582},[139583,139584,139585],{"id":137915,"depth":261,"text":137916},{"id":137992,"depth":261,"text":137993},{"id":138323,"depth":261,"text":138324},{"id":138614,"depth":250,"text":138615,"children":139587},[139588,139589],{"id":138618,"depth":261,"text":138619},{"id":139481,"depth":261,"text":139482},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":137903,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":139596,"title":139597,"body":139598,"description":2048,"extension":2049,"meta":141342,"navigation":2051,"path":141343,"seo":141344,"stem":141345,"__hash__":141346},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":139599,"toc":141323},[139600,139603,139607,139610,139616,139622,139626,139628,139631,139634,139637,139640,139643,139646,139649,139653,139657,139660,139663,139666,139670,139673,139676,139681,139684,139687,139690,139694,139697,139706,139709,139712,139716,139719,139722,139727,139734,139748,139756,139763,139768,139771,139774,139777,139784,139788,139794,139800,139803,139806,139811,139817,139819,139827,139832,139835,139841,139843,139848,139853,139856,139858,139863,139866,139871,139876,139910,139914,139918,139921,139925,139928,140014,140017,140054,140057,140093,140097,140102,140115,140169,140171,140199,140201,140229,140235,140249,140251,140295,140297,140341,140344,140351,140362,140364,140391,140393,140419,140426,140442,140444,140538,140540,140634,140641,140644,140649,140655,140729,140732,140734,140770,140772,140808,140811,140818,140837,140840,140843,140845,140870,140872,140896,140899,140902,140932,140936,140939,141002,141004,141070,141072,141136,141139,141171,141173,141199,141201,141227,141230,141261,141263,141289,141291,141317,141320],[10,139601,139597],{"id":139602},"_15-品优购项目上篇-搭建与公共模块",[14,139604,139606],{"id":139605},"_151-项目规划","15.1 项目规划",[219,139608],{"style":221,"src":139609},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[19,139611,139612,139615],{},[68,139613,139614],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[19,139617,139618,139621],{},[68,139619,139620],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[14,139623,139625],{"id":139624},"_152-项目介绍","15.2 项目介绍",[19,139627,139614],{},[219,139629],{"style":221,"src":139630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[19,139632,139633],{},"主页：",[219,139635],{"style":221,"src":139636},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[19,139638,139639],{},"列表页：",[219,139641],{"style":221,"src":139642},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[19,139644,139645],{},"注册页：",[219,139647],{"style":221,"src":139648},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[14,139650,139652],{"id":139651},"_153-项目搭建工作","15.3 项目搭建工作",[32,139654,139656],{"id":139655},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[219,139658],{"style":221,"src":139659},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[19,139661,139662],{},"经常更换的图片要放到upload文件夹中",[19,139664,139665],{},"不经常换的放到images文件夹中",[32,139667,139669],{"id":139668},"_1532-创建文件如下","15.3.2 创建文件如下",[219,139671],{"style":221,"src":139672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[219,139674],{"style":221,"src":139675},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[19,139677,139678],{},[68,139679,139680],{},"初始化样式：",[19,139682,139683],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[19,139685,139686],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[19,139688,139689],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[32,139691,139693],{"id":139692},"_1533-项目模块化开发","15.3.3 项目模块化开发",[19,139695,139696],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[19,139698,139699,139700,139705],{},"这里最典型的应用就是 ",[68,139701,139702],{},[23,139703,139704],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[219,139707],{"style":221,"src":139708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[19,139710,139711],{},"通过link方法来引入",[32,139713,139715],{"id":139714},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[219,139717],{"style":221,"src":139718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[19,139720,139721],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[1826,139723,139724],{},[1829,139725,139726],{},"制作favicon图标",[19,139728,139729,139730,139733],{},"①把品优购图标切成 ",[23,139731,139732],{},"png"," 图片",[19,139735,139736,139737,139739,139740,139743,139744],{},"②把 ",[23,139738,139732],{}," 图片转换为 ",[23,139741,139742],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[254,139745,139746],{"href":139746,"rel":139747},"http:\u002F\u002Fwww.bitbug.net\u002F",[25811],[1826,139749,139750,139753],{"start":250},[1829,139751,139752],{},"favicon图标放到网站根目录下",[1829,139754,139755],{},"HTML页面引入favicon",[19,139757,139758,139759,139762],{},"在html 页面里面的 ",[23,139760,139761],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[19,139764,139765],{},[23,139766,139767],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[19,139769,139770],{},"复制这行代码或者在生成这个的网站进行复制",[219,139772],{"style":221,"src":139773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[19,139775,139776],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[19,139778,139779,139780],{},"例如:",[254,139781,139782],{"href":139782,"rel":139783},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[25811],[32,139785,139787],{"id":139786},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[19,139789,139790,139793],{},[68,139791,139792],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[19,139795,139796,139799],{},[68,139797,139798],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[19,139801,139802],{},"页面必须有三个标签用来符合 SEO 优化",[219,139804],{"style":221,"src":139805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[1826,139807,139808],{},[1829,139809,139810],{},"title网站标题",[19,139812,139813,139816],{},[68,139814,139815],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[19,139818,70713],{},[3100,139820,139821,139824],{},[1829,139822,139823],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[1829,139825,139826],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[1826,139828,139829],{"start":250},[1829,139830,139831],{},"description网站描述",[19,139833,139834],{},"简要说明我们网站主要是做什么的",[19,139836,139837,139840],{},[68,139838,139839],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[19,139842,70713],{},[19,139844,139845],{},[23,139846,139847],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[1826,139849,139850],{"start":261},[1829,139851,139852],{},"keywords关键词",[19,139854,139855],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[19,139857,70713],{},[19,139859,139860],{},[23,139861,139862],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[19,139864,139865],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[19,139867,139868],{},[68,139869,139870],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[1826,139872,139873],{"start":277},[1829,139874,139875],{},"代码总结",[231,139877,139878],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,139879,139880,139884,139898,139902],{"__ignoreMap":236},[240,139881,139882],{"class":242,"line":243},[240,139883,132288],{"class":246},[240,139885,139886,139888,139890,139892,139894,139896],{"class":242,"line":250},[240,139887,431],{"class":257},[240,139889,330],{"class":253},[240,139891,437],{"class":436},[240,139893,440],{"class":257},[240,139895,132301],{"class":443},[240,139897,447],{"class":257},[240,139899,139900],{"class":242,"line":261},[240,139901,132308],{"class":257},[240,139903,139904,139906,139908],{"class":242,"line":277},[240,139905,592],{"class":257},[240,139907,330],{"class":253},[240,139909,447],{"class":257},[14,139911,139913],{"id":139912},"_154-项目公共部分制作","15.4 项目公共部分制作",[32,139915,139917],{"id":139916},"_1541-常用模块类命名","15.4.1 常用模块类命名",[219,139919],{"style":221,"src":139920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[32,139922,139924],{"id":139923},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[19,139926,139927],{},"布局思路：",[3100,139929,139930,139933,139936,139958,139991],{},[1829,139931,139932],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[1829,139934,139935],{},"里面包含版心的盒子",[1829,139937,139938,139939],{},"版心盒子里面包含 1 号左侧盒子左浮动",[3100,139940,139941,139949,139955],{},[1829,139942,139943,139944,23447,139946,139948],{},"1 号盒子 里面包含一个",[23,139945,3100],{},[23,139947,3100],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[1829,139950,139951,139952,139954],{},"里面的内容是水平排列，所以需要给",[23,139953,1829],{},"设置浮动",[1829,139956,139957],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[1829,139959,139960,139961],{},"版心盒子里面包含 2 号右侧盒子右浮动",[3100,139962,139963,139977,139982],{},[1829,139964,139965,139966,23447,139968,139970,139971,139973,139974,139976],{},"2 号盒子 里面包含一个",[23,139967,3100],{},[23,139969,3100],{},"包裹",[23,139972,1829],{},"，中间的",[23,139975,3015],{},"可以用样式去设置，也可以用字符 |",[1829,139978,139979,139980,139954],{},"里面内容水平排列，给",[23,139981,1829],{},[1829,139983,139984,139985,139987,139988,139990],{},"找到里面所有偶数的 ",[23,139986,1829],{}," 设置样式（偶数的 ",[23,139989,1829],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[1829,139992,139993,139994],{},"需要用到字体图标",[3100,139995,139996,140002,140005,140008,140011],{},[1829,139997,139998,139999],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[23,140000,140001],{},"arrow-icon",[1829,140003,140004],{},"先要引入字体图片的资源",[1829,140006,140007],{},"在样式里面利用 font-face 来进行声明",[1829,140009,140010],{},"在伪元素的 content属性设置 图标的编码",[1829,140012,140013],{},"给伪元素设置font-family属性",[19,140015,140016],{},"结构实例代码：",[231,140018,140020],{"className":233,"code":140019,"language":235,"meta":236,"style":236},"div::before {\n  content: \"\";\n  display: block;\n}\n",[23,140021,140022,140030,140040,140050],{"__ignoreMap":236},[240,140023,140024,140026,140028],{"class":242,"line":243},[240,140025,330],{"class":253},[240,140027,139178],{"class":436},[240,140029,258],{"class":257},[240,140031,140032,140034,140036,140038],{"class":242,"line":250},[240,140033,139185],{"class":264},[240,140035,268],{"class":257},[240,140037,9603],{"class":443},[240,140039,274],{"class":257},[240,140041,140042,140044,140046,140048],{"class":242,"line":261},[240,140043,265],{"class":264},[240,140045,268],{"class":257},[240,140047,271],{"class":264},[240,140049,274],{"class":257},[240,140051,140052],{"class":242,"line":277},[240,140053,312],{"class":257},[19,140055,140056],{},"样式实例代码：",[231,140058,140059],{"className":233,"code":140019,"language":235,"meta":236,"style":236},[23,140060,140061,140069,140079,140089],{"__ignoreMap":236},[240,140062,140063,140065,140067],{"class":242,"line":243},[240,140064,330],{"class":253},[240,140066,139178],{"class":436},[240,140068,258],{"class":257},[240,140070,140071,140073,140075,140077],{"class":242,"line":250},[240,140072,139185],{"class":264},[240,140074,268],{"class":257},[240,140076,9603],{"class":443},[240,140078,274],{"class":257},[240,140080,140081,140083,140085,140087],{"class":242,"line":261},[240,140082,265],{"class":264},[240,140084,268],{"class":257},[240,140086,271],{"class":264},[240,140088,274],{"class":257},[240,140090,140091],{"class":242,"line":277},[240,140092,312],{"class":257},[32,140094,140096],{"id":140095},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[3100,140098,140099],{},[1829,140100,140101],{},"header 盒子必须要有高度",[19,140103,140104,140105,140107,140108],{},"1 号盒子是 ",[23,140106,133189],{}," 标志定位，在正常开发过程中， ",[68,140109,140110,140111,140114],{},"logo的布局其实是有讲究的，需要进行 ",[23,140112,140113],{},"logoSEO","的优化 （★★★）",[3100,140116,140117,140125,140133,140160],{},[1829,140118,140119,140121,140122,140124],{},[23,140120,133189],{}," 里面首先放一个 ",[23,140123,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[1829,140126,140127,140129,140130,140132],{},[23,140128,10],{}," 里面再放一个链接，可以返回首页的，把 ",[23,140131,133189],{}," 的背景图片给链接即可",[1829,140134,140135,140136],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[3100,140137,140138,140153],{},[1829,140139,140140,140141,140144,140145,140148,140149,140152],{},"方法1：",[23,140142,140143],{},"text-indent"," 移到盒子外面（",[23,140146,140147],{},"text-indent: -9999px",") ，然后 ",[23,140150,140151],{},"overflow:hidden"," ，淘宝的做法",[1829,140154,140155,140156,140159],{},"方法2：直接给 ",[23,140157,140158],{},"font-size: 0;"," 就看不到文字了，京东的做法",[1829,140161,140162,140163,140165,140166,140168],{},"最后给链接一个 ",[23,140164,53351],{}," 属性，这样鼠标放到 ",[23,140167,133189],{}," 上就可以看到提示文字了",[19,140170,140016],{},[231,140172,140173],{"className":417,"code":133410,"language":419,"meta":236,"style":236},[23,140174,140175],{"__ignoreMap":236},[240,140176,140177,140179,140181,140183,140185,140187,140189,140191,140193,140195,140197],{"class":242,"line":243},[240,140178,431],{"class":257},[240,140180,254],{"class":253},[240,140182,457],{"class":436},[240,140184,440],{"class":257},[240,140186,133425],{"class":443},[240,140188,133428],{"class":436},[240,140190,440],{"class":257},[240,140192,133433],{"class":443},[240,140194,133436],{"class":257},[240,140196,254],{"class":253},[240,140198,447],{"class":257},[19,140200,140056],{},[231,140202,140203],{"className":417,"code":133410,"language":419,"meta":236,"style":236},[23,140204,140205],{"__ignoreMap":236},[240,140206,140207,140209,140211,140213,140215,140217,140219,140221,140223,140225,140227],{"class":242,"line":243},[240,140208,431],{"class":257},[240,140210,254],{"class":253},[240,140212,457],{"class":436},[240,140214,440],{"class":257},[240,140216,133425],{"class":443},[240,140218,133428],{"class":436},[240,140220,440],{"class":257},[240,140222,133433],{"class":443},[240,140224,133436],{"class":257},[240,140226,254],{"class":253},[240,140228,447],{"class":257},[19,140230,140231,140232,140234],{},"2 号盒子是 ",[23,140233,133202],{}," 搜索模块定位",[3100,140236,140237,140240,140243,140246],{},[1829,140238,140239],{},"search盒子利用定位的方式放在对应的位置",[1829,140241,140242],{},"search盒子设置绝对定位，header盒子设置相对定位",[1829,140244,140245],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[1829,140247,140248],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[19,140250,140016],{},[231,140252,140253],{"className":233,"code":133497,"language":235,"meta":236,"style":236},[23,140254,140255,140277,140281,140291],{"__ignoreMap":236},[240,140256,140257,140259,140261,140263,140265,140267,140269,140271,140273,140275],{"class":242,"line":243},[240,140258,330],{"class":253},[240,140260,1277],{"class":257},[240,140262,19],{"class":253},[240,140264,1277],{"class":257},[240,140266,10],{"class":253},[240,140268,1277],{"class":257},[240,140270,3100],{"class":253},[240,140272,1277],{"class":257},[240,140274,1829],{"class":253},[240,140276,258],{"class":257},[240,140278,140279],{"class":242,"line":250},[240,140280,133526],{"class":246},[240,140282,140283,140285,140287,140289],{"class":242,"line":261},[240,140284,265],{"class":264},[240,140286,268],{"class":257},[240,140288,271],{"class":264},[240,140290,274],{"class":257},[240,140292,140293],{"class":242,"line":277},[240,140294,312],{"class":257},[19,140296,140056],{},[231,140298,140299],{"className":233,"code":133497,"language":235,"meta":236,"style":236},[23,140300,140301,140323,140327,140337],{"__ignoreMap":236},[240,140302,140303,140305,140307,140309,140311,140313,140315,140317,140319,140321],{"class":242,"line":243},[240,140304,330],{"class":253},[240,140306,1277],{"class":257},[240,140308,19],{"class":253},[240,140310,1277],{"class":257},[240,140312,10],{"class":253},[240,140314,1277],{"class":257},[240,140316,3100],{"class":253},[240,140318,1277],{"class":257},[240,140320,1829],{"class":253},[240,140322,258],{"class":257},[240,140324,140325],{"class":242,"line":250},[240,140326,133526],{"class":246},[240,140328,140329,140331,140333,140335],{"class":242,"line":261},[240,140330,265],{"class":264},[240,140332,268],{"class":257},[240,140334,271],{"class":264},[240,140336,274],{"class":257},[240,140338,140339],{"class":242,"line":277},[240,140340,312],{"class":257},[19,140342,140343],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[19,140345,140346,140347,140350],{},"3 号盒子是 ",[23,140348,140349],{},"hotwords"," 热词模块定位",[3100,140352,140353,140356,140359],{},[1829,140354,140355],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[1829,140357,140358],{},"给里面所有的a标签设置 左右10px的外边距",[1829,140360,140361],{},"给第一个a标签设置文字变红色（#c81623）",[19,140363,140016],{},[231,140365,140367],{"className":233,"code":140366,"language":235,"meta":236,"style":236},"div {\n  margin: 0 auto;\n}\n",[23,140368,140369,140375,140387],{"__ignoreMap":236},[240,140370,140371,140373],{"class":242,"line":243},[240,140372,330],{"class":253},[240,140374,258],{"class":257},[240,140376,140377,140379,140381,140383,140385],{"class":242,"line":250},[240,140378,72393],{"class":264},[240,140380,268],{"class":257},[240,140382,1274],{"class":264},[240,140384,53498],{"class":264},[240,140386,274],{"class":257},[240,140388,140389],{"class":242,"line":261},[240,140390,312],{"class":257},[19,140392,140056],{},[231,140394,140395],{"className":233,"code":140366,"language":235,"meta":236,"style":236},[23,140396,140397,140403,140415],{"__ignoreMap":236},[240,140398,140399,140401],{"class":242,"line":243},[240,140400,330],{"class":253},[240,140402,258],{"class":257},[240,140404,140405,140407,140409,140411,140413],{"class":242,"line":250},[240,140406,72393],{"class":264},[240,140408,268],{"class":257},[240,140410,1274],{"class":264},[240,140412,53498],{"class":264},[240,140414,274],{"class":257},[240,140416,140417],{"class":242,"line":261},[240,140418,312],{"class":257},[19,140420,140421,140422,140425],{},"4 号盒子是 ",[23,140423,140424],{},"shopcar"," 购物车模块",[3100,140427,140428,140433,140436,140439],{},[1829,140429,125245,140430,140432],{},[23,140431,140424],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[1829,140434,140435],{},"count 统计部分用绝对定位做",[1829,140437,140438],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[1829,140440,140441],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[19,140443,140016],{},[231,140445,140446],{"className":233,"code":133609,"language":235,"meta":236,"style":236},[23,140447,140448,140452,140466,140470,140484,140488,140502,140506,140520,140524],{"__ignoreMap":236},[240,140449,140450],{"class":242,"line":243},[240,140451,133616],{"class":246},[240,140453,140454,140456,140458,140460,140462,140464],{"class":242,"line":250},[240,140455,133621],{"class":436},[240,140457,81721],{"class":257},[240,140459,1072],{"class":264},[240,140461,268],{"class":257},[240,140463,133630],{"class":264},[240,140465,1655],{"class":257},[240,140467,140468],{"class":242,"line":261},[240,140469,133637],{"class":246},[240,140471,140472,140474,140476,140478,140480,140482],{"class":242,"line":277},[240,140473,133642],{"class":436},[240,140475,81721],{"class":257},[240,140477,1072],{"class":264},[240,140479,268],{"class":257},[240,140481,56698],{"class":264},[240,140483,1655],{"class":257},[240,140485,140486],{"class":242,"line":294},[240,140487,133657],{"class":246},[240,140489,140490,140492,140494,140496,140498,140500],{"class":242,"line":309},[240,140491,133662],{"class":436},[240,140493,81721],{"class":257},[240,140495,1072],{"class":264},[240,140497,268],{"class":257},[240,140499,56765],{"class":264},[240,140501,1655],{"class":257},[240,140503,140504],{"class":242,"line":529},[240,140505,133677],{"class":246},[240,140507,140508,140510,140512,140514,140516,140518],{"class":242,"line":549},[240,140509,133682],{"class":436},[240,140511,81721],{"class":257},[240,140513,1072],{"class":264},[240,140515,268],{"class":257},[240,140517,1158],{"class":264},[240,140519,1655],{"class":257},[240,140521,140522],{"class":242,"line":569},[240,140523,133697],{"class":246},[240,140525,140526,140528,140530,140532,140534,140536],{"class":242,"line":589},[240,140527,133702],{"class":436},[240,140529,81721],{"class":257},[240,140531,1072],{"class":264},[240,140533,268],{"class":257},[240,140535,133711],{"class":264},[240,140537,1655],{"class":257},[19,140539,140056],{},[231,140541,140542],{"className":233,"code":133609,"language":235,"meta":236,"style":236},[23,140543,140544,140548,140562,140566,140580,140584,140598,140602,140616,140620],{"__ignoreMap":236},[240,140545,140546],{"class":242,"line":243},[240,140547,133616],{"class":246},[240,140549,140550,140552,140554,140556,140558,140560],{"class":242,"line":250},[240,140551,133621],{"class":436},[240,140553,81721],{"class":257},[240,140555,1072],{"class":264},[240,140557,268],{"class":257},[240,140559,133630],{"class":264},[240,140561,1655],{"class":257},[240,140563,140564],{"class":242,"line":261},[240,140565,133637],{"class":246},[240,140567,140568,140570,140572,140574,140576,140578],{"class":242,"line":277},[240,140569,133642],{"class":436},[240,140571,81721],{"class":257},[240,140573,1072],{"class":264},[240,140575,268],{"class":257},[240,140577,56698],{"class":264},[240,140579,1655],{"class":257},[240,140581,140582],{"class":242,"line":294},[240,140583,133657],{"class":246},[240,140585,140586,140588,140590,140592,140594,140596],{"class":242,"line":309},[240,140587,133662],{"class":436},[240,140589,81721],{"class":257},[240,140591,1072],{"class":264},[240,140593,268],{"class":257},[240,140595,56765],{"class":264},[240,140597,1655],{"class":257},[240,140599,140600],{"class":242,"line":529},[240,140601,133677],{"class":246},[240,140603,140604,140606,140608,140610,140612,140614],{"class":242,"line":549},[240,140605,133682],{"class":436},[240,140607,81721],{"class":257},[240,140609,1072],{"class":264},[240,140611,268],{"class":257},[240,140613,1158],{"class":264},[240,140615,1655],{"class":257},[240,140617,140618],{"class":242,"line":569},[240,140619,133697],{"class":246},[240,140621,140622,140624,140626,140628,140630,140632],{"class":242,"line":589},[240,140623,133702],{"class":436},[240,140625,81721],{"class":257},[240,140627,1072],{"class":264},[240,140629,268],{"class":257},[240,140631,133711],{"class":264},[240,140633,1655],{"class":257},[32,140635,140637,140638,140640],{"id":140636},"_1544-nav导航模块制作","15.4.4 ",[23,140639,55648],{},"导航模块制作",[219,140642],{"style":221,"src":140643},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[19,140645,140646,140648],{},[23,140647,55648],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[19,140650,140651,140652],{},"1 号盒子左侧浮动，",[23,140653,140654],{},"dropdown",[3100,140656,140657,140667,140675,140681,140689,140699,140707,140718],{},[1829,140658,140659,140660,102929,140663,140666],{},"1号盒子有讲究，根据相关性 里面包含 ",[23,140661,140662],{},".dt",[23,140664,140665],{},".dd"," 两个盒子",[1829,140668,140669,140671,140672,140674],{},[23,140670,140662],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[23,140673,140665],{}," 挤到下面去了",[1829,140676,140677,140678,140680],{},"给 ",[23,140679,140665],{}," 盒子设置宽度 和 高度，以及背景颜色",[1829,140682,140677,140683,140685,140686,122147],{},[23,140684,140665],{}," 盒子里面定义 无序列表 （",[23,140687,140688],{},"ul > li > a",[1829,140690,140691,140692,140694,140695,140698],{},"每个 ",[23,140693,1829],{}," 都有一个高度（",[23,140696,140697],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[1829,140700,140677,140701,140703,140704,122147],{},[23,140702,1829],{}," 里面的a设置文字大小（",[23,140705,140706],{},"14px",[1829,140708,140677,140709,140711,140712,140714,140715,140717],{},[23,140710,1829],{}," 设置 ",[23,140713,129612],{},"，当鼠标移入的时候，让",[23,140716,1829],{},"的背景变成白色，让里面的文字变成红色",[1829,140719,140720,140722,140723,140725,140726,140728],{},[23,140721,1829],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[23,140724,1829],{},"的右侧，那么给",[23,140727,1829],{},"设置相对定位",[19,140730,140731],{},"一定要注意相关性",[19,140733,140016],{},[231,140735,140736],{"className":233,"code":140019,"language":235,"meta":236,"style":236},[23,140737,140738,140746,140756,140766],{"__ignoreMap":236},[240,140739,140740,140742,140744],{"class":242,"line":243},[240,140741,330],{"class":253},[240,140743,139178],{"class":436},[240,140745,258],{"class":257},[240,140747,140748,140750,140752,140754],{"class":242,"line":250},[240,140749,139185],{"class":264},[240,140751,268],{"class":257},[240,140753,9603],{"class":443},[240,140755,274],{"class":257},[240,140757,140758,140760,140762,140764],{"class":242,"line":261},[240,140759,265],{"class":264},[240,140761,268],{"class":257},[240,140763,271],{"class":264},[240,140765,274],{"class":257},[240,140767,140768],{"class":242,"line":277},[240,140769,312],{"class":257},[19,140771,140056],{},[231,140773,140774],{"className":233,"code":140019,"language":235,"meta":236,"style":236},[23,140775,140776,140784,140794,140804],{"__ignoreMap":236},[240,140777,140778,140780,140782],{"class":242,"line":243},[240,140779,330],{"class":253},[240,140781,139178],{"class":436},[240,140783,258],{"class":257},[240,140785,140786,140788,140790,140792],{"class":242,"line":250},[240,140787,139185],{"class":264},[240,140789,268],{"class":257},[240,140791,9603],{"class":443},[240,140793,274],{"class":257},[240,140795,140796,140798,140800,140802],{"class":242,"line":261},[240,140797,265],{"class":264},[240,140799,268],{"class":257},[240,140801,271],{"class":264},[240,140803,274],{"class":257},[240,140805,140806],{"class":242,"line":277},[240,140807,312],{"class":257},[19,140809,140810],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[19,140812,140813,140814,140817],{},"2 号盒子左侧浮动，",[23,140815,140816],{},"navitems"," 导航栏组",[3100,140819,140820,140825,140834],{},[1829,140821,140822,140823],{},"里面结构是 ",[23,140824,140688],{},[1829,140826,140827,140828,140830,140831,140833],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[23,140829,254],{},"左右的",[23,140832,32829],{},"把两侧撑开",[1829,140835,140836],{},"让文字垂直居中（行高等于高度）",[219,140838],{"style":221,"src":140839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[19,140841,140842],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[19,140844,140016],{},[231,140846,140848],{"className":233,"code":140847,"language":235,"meta":236,"style":236},".box {\n  float: left;\n}\n",[23,140849,140850,140856,140866],{"__ignoreMap":236},[240,140851,140852,140854],{"class":242,"line":243},[240,140853,132025],{"class":436},[240,140855,258],{"class":257},[240,140857,140858,140860,140862,140864],{"class":242,"line":250},[240,140859,132657],{"class":264},[240,140861,268],{"class":257},[240,140863,813],{"class":264},[240,140865,274],{"class":257},[240,140867,140868],{"class":242,"line":261},[240,140869,312],{"class":257},[19,140871,140056],{},[231,140873,140874],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,140875,140876,140882,140892],{"__ignoreMap":236},[240,140877,140878,140880],{"class":242,"line":243},[240,140879,132025],{"class":436},[240,140881,258],{"class":257},[240,140883,140884,140886,140888,140890],{"class":242,"line":250},[240,140885,132657],{"class":264},[240,140887,268],{"class":257},[240,140889,813],{"class":264},[240,140891,274],{"class":257},[240,140893,140894],{"class":242,"line":261},[240,140895,312],{"class":257},[19,140897,140898],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[219,140900],{"style":221,"src":140901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[231,140903,140904],{"className":233,"code":132334,"language":235,"meta":236,"style":236},[23,140905,140906,140912,140928],{"__ignoreMap":236},[240,140907,140908,140910],{"class":242,"line":243},[240,140909,330],{"class":253},[240,140911,258],{"class":257},[240,140913,140914,140916,140918,140920,140922,140924,140926],{"class":242,"line":250},[240,140915,72813],{"class":264},[240,140917,268],{"class":257},[240,140919,1643],{"class":264},[240,140921,289],{"class":288},[240,140923,53463],{"class":264},[240,140925,131569],{"class":264},[240,140927,274],{"class":257},[240,140929,140930],{"class":242,"line":261},[240,140931,312],{"class":257},[32,140933,140935],{"id":140934},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[219,140937],{"style":221,"src":140938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[3100,140940,140941,140946,140951],{},[1829,140942,140943,140945],{},[23,140944,133380],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[1829,140947,140948,140950],{},[23,140949,133380],{}," 里面有一个大的版心",[1829,140952,140953,140954,140957,140958],{},"版心里面包含 1 号盒子，",[23,140955,140956],{},"mod_service"," 是服务模块，mod 是模块的意思",[3100,140959,140960,140965,140978,140994,140999],{},[1829,140961,140677,140962,140964],{},[23,140963,140956],{}," 设置高度（80px）和下边框",[1829,140966,140967,140968,140971,140972,140974,140975,140977],{},"在里面定义 ",[23,140969,140970],{},"ul > li"," ,每个",[23,140973,1829],{}," 宽度是300px 高度是 50px，给每个",[23,140976,1829],{},"设置35px的左内边距",[1829,140979,140980,140981,140983,140984,140986,140987,140989,140990,20357,140992,122147],{},"在每个",[23,140982,1829],{},"里面，放一个 ",[23,140985,24857],{},"（里面放图标），一个",[23,140988,330],{},"（里面放",[23,140991,330],{},[23,140993,19],{},[1829,140995,140677,140996,140998],{},[23,140997,24857],{},"设置浮动，让h5与这个div左右排列",[1829,141000,141001],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[19,141003,140016],{},[231,141005,141007],{"className":233,"code":141006,"language":235,"meta":236,"style":236},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[23,141008,141009,141015,141027,141039,141066],{"__ignoreMap":236},[240,141010,141011,141013],{"class":242,"line":243},[240,141012,135934],{"class":436},[240,141014,258],{"class":257},[240,141016,141017,141019,141021,141023,141025],{"class":242,"line":250},[240,141018,280],{"class":264},[240,141020,268],{"class":257},[240,141022,1000],{"class":264},[240,141024,289],{"class":288},[240,141026,274],{"class":257},[240,141028,141029,141031,141033,141035,141037],{"class":242,"line":261},[240,141030,297],{"class":264},[240,141032,268],{"class":257},[240,141034,1000],{"class":264},[240,141036,289],{"class":288},[240,141038,274],{"class":257},[240,141040,141041,141043,141045,141047,141049,141051,141053,141055,141058,141060,141062,141064],{"class":242,"line":277},[240,141042,1216],{"class":264},[240,141044,268],{"class":257},[240,141046,786],{"class":264},[240,141048,789],{"class":257},[240,141050,135973],{"class":792},[240,141052,1230],{"class":257},[240,141054,892],{"class":264},[240,141056,141057],{"class":264}," -10",[240,141059,289],{"class":288},[240,141061,135992],{"class":264},[240,141063,289],{"class":288},[240,141065,274],{"class":257},[240,141067,141068],{"class":242,"line":294},[240,141069,312],{"class":257},[19,141071,140056],{},[231,141073,141074],{"className":233,"code":141006,"language":235,"meta":236,"style":236},[23,141075,141076,141082,141094,141106,141132],{"__ignoreMap":236},[240,141077,141078,141080],{"class":242,"line":243},[240,141079,135934],{"class":436},[240,141081,258],{"class":257},[240,141083,141084,141086,141088,141090,141092],{"class":242,"line":250},[240,141085,280],{"class":264},[240,141087,268],{"class":257},[240,141089,1000],{"class":264},[240,141091,289],{"class":288},[240,141093,274],{"class":257},[240,141095,141096,141098,141100,141102,141104],{"class":242,"line":261},[240,141097,297],{"class":264},[240,141099,268],{"class":257},[240,141101,1000],{"class":264},[240,141103,289],{"class":288},[240,141105,274],{"class":257},[240,141107,141108,141110,141112,141114,141116,141118,141120,141122,141124,141126,141128,141130],{"class":242,"line":277},[240,141109,1216],{"class":264},[240,141111,268],{"class":257},[240,141113,786],{"class":264},[240,141115,789],{"class":257},[240,141117,135973],{"class":792},[240,141119,1230],{"class":257},[240,141121,892],{"class":264},[240,141123,141057],{"class":264},[240,141125,289],{"class":288},[240,141127,135992],{"class":264},[240,141129,289],{"class":288},[240,141131,274],{"class":257},[240,141133,141134],{"class":242,"line":294},[240,141135,312],{"class":257},[19,141137,141138],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[3100,141140,141141,141144,141150,141156,141168],{},[1829,141142,141143],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[1829,141145,141146,141147,122147],{},"里面的布局利用 自定义列表来实现（",[23,141148,141149],{},"dl > dt + dd",[1829,141151,140677,141152,141155],{},[23,141153,141154],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[1829,141157,140677,141158,141161,141162,20357,141164,141167],{},[23,141159,141160],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[23,141163,141160],{},[23,141165,141166],{},"dd","之间有些距离",[1829,141169,141170],{},"最后一个 dl 结构和样式不一样，需要单独设置",[19,141172,140016],{},[231,141174,141175],{"className":233,"code":140366,"language":235,"meta":236,"style":236},[23,141176,141177,141183,141195],{"__ignoreMap":236},[240,141178,141179,141181],{"class":242,"line":243},[240,141180,330],{"class":253},[240,141182,258],{"class":257},[240,141184,141185,141187,141189,141191,141193],{"class":242,"line":250},[240,141186,72393],{"class":264},[240,141188,268],{"class":257},[240,141190,1274],{"class":264},[240,141192,53498],{"class":264},[240,141194,274],{"class":257},[240,141196,141197],{"class":242,"line":261},[240,141198,312],{"class":257},[19,141200,140056],{},[231,141202,141203],{"className":233,"code":140366,"language":235,"meta":236,"style":236},[23,141204,141205,141211,141223],{"__ignoreMap":236},[240,141206,141207,141209],{"class":242,"line":243},[240,141208,330],{"class":253},[240,141210,258],{"class":257},[240,141212,141213,141215,141217,141219,141221],{"class":242,"line":250},[240,141214,72393],{"class":264},[240,141216,268],{"class":257},[240,141218,1274],{"class":264},[240,141220,53498],{"class":264},[240,141222,274],{"class":257},[240,141224,141225],{"class":242,"line":261},[240,141226,312],{"class":257},[19,141228,141229],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[3100,141231,141232,141241,141244,141255],{},[1829,141233,141234,141235,141237,141238,141240],{},"分为上下两块，上面是 ",[23,141236,133397],{}," 友情链接，下面是 ",[23,141239,133390],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[1829,141242,141243],{},"把内容分别复制到相应模块中",[1829,141245,140677,141246,141248,141249,141251,141252,141254],{},[23,141247,133397],{}," 设置 15px 的下外边距，给",[23,141250,133397],{}," 里面 的 ",[23,141253,254],{}," 标签设置 左右 3px 的外边距",[1829,141256,141257,141258,141260],{},"给",[23,141259,133390],{}," 设置 20px 的行高",[19,141262,140016],{},[231,141264,141265],{"className":233,"code":140366,"language":235,"meta":236,"style":236},[23,141266,141267,141273,141285],{"__ignoreMap":236},[240,141268,141269,141271],{"class":242,"line":243},[240,141270,330],{"class":253},[240,141272,258],{"class":257},[240,141274,141275,141277,141279,141281,141283],{"class":242,"line":250},[240,141276,72393],{"class":264},[240,141278,268],{"class":257},[240,141280,1274],{"class":264},[240,141282,53498],{"class":264},[240,141284,274],{"class":257},[240,141286,141287],{"class":242,"line":261},[240,141288,312],{"class":257},[19,141290,140056],{},[231,141292,141293],{"className":233,"code":140366,"language":235,"meta":236,"style":236},[23,141294,141295,141301,141313],{"__ignoreMap":236},[240,141296,141297,141299],{"class":242,"line":243},[240,141298,330],{"class":253},[240,141300,258],{"class":257},[240,141302,141303,141305,141307,141309,141311],{"class":242,"line":250},[240,141304,72393],{"class":264},[240,141306,268],{"class":257},[240,141308,1274],{"class":264},[240,141310,53498],{"class":264},[240,141312,274],{"class":257},[240,141314,141315],{"class":242,"line":261},[240,141316,312],{"class":257},[19,141318,141319],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[2019,141321,141322],{},"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":236,"searchDepth":250,"depth":250,"links":141324},[141325,141326,141327,141334],{"id":139605,"depth":250,"text":139606},{"id":139624,"depth":250,"text":139625},{"id":139651,"depth":250,"text":139652,"children":141328},[141329,141330,141331,141332,141333],{"id":139655,"depth":261,"text":139656},{"id":139668,"depth":261,"text":139669},{"id":139692,"depth":261,"text":139693},{"id":139714,"depth":261,"text":139715},{"id":139786,"depth":261,"text":139787},{"id":139912,"depth":250,"text":139913,"children":141335},[141336,141337,141338,141339,141341],{"id":139916,"depth":261,"text":139917},{"id":139923,"depth":261,"text":139924},{"id":140095,"depth":261,"text":140096},{"id":140636,"depth":261,"text":141340},"15.4.4 nav导航模块制作",{"id":140934,"depth":261,"text":140935},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":139597,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":141348,"title":141349,"body":141350,"description":2048,"extension":2049,"meta":143752,"navigation":2051,"path":143753,"seo":143754,"stem":143755,"__hash__":143756},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":141351,"toc":143729},[141352,141355,141359,141363,141375,141378,141381,141384,141395,141397,141421,141423,141447,141452,141455,141457,141493,141495,141531,141534,141539,141542,141545,141548,141578,141585,141588,141598,141600,141634,141637,141671,141677,141694,141696,141732,141734,141770,141775,141800,141802,141828,141830,141854,141861,141864,141928,141930,141972,141974,142014,142021,142026,142028,142058,142060,142090,142094,142097,142104,142116,142118,142144,142146,142170,142173,142175,142199,142205,142215,142217,142247,142249,142279,142286,142327,142329,142365,142367,142403,142407,142410,142413,142416,142422,142427,142430,142453,142456,142480,142483,142507,142512,142515,142518,142521,142524,142527,142601,142603,142633,142635,142665,142668,142671,142703,142707,142711,142725,142734,142737,142742,142744,142838,142840,142934,142957,142959,142983,142985,143009,143016,143019,143029,143031,143055,143060,143068,143070,143100,143105,143145,143147,143173,143175,143201,143205,143208,143213,143216,143220,143228,143235,143243,143245,143275,143277,143307,143315,143318,143321,143323,143353,143355,143385,143388,143393,143395,143419,143421,143445,143448,143533,143535,143559,143561,143585,143589,143591,143615,143617,143651,143655,143669,143672,143677,143680,143685,143688,143718,143726],[10,141353,141349],{"id":141354},"_16-品优购项目下篇-主体与页面开发",[14,141356,141358],{"id":141357},"_161-项目主体模块制作","16.1 项目主体模块制作",[32,141360,141362],{"id":141361},"_1611-首页制作","16.1.1 首页制作",[19,141364,141365,141367,141368,141370,141371,141374],{},[68,141366,103969],{}," 主体模块是 ",[68,141369,75973],{}," 里面专有的，注意需要新的样式文件 ",[68,141372,141373],{},"index.css，"," 就不要写在common.css中了",[219,141376],{"style":221,"src":141377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[219,141379],{"style":221,"src":141380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[19,141382,141383],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[3100,141385,141386,141389,141392],{},[1829,141387,141388],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[1829,141390,141391],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[1829,141393,141394],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[19,141396,140016],{},[231,141398,141399],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,141400,141401,141407,141417],{"__ignoreMap":236},[240,141402,141403,141405],{"class":242,"line":243},[240,141404,132025],{"class":436},[240,141406,258],{"class":257},[240,141408,141409,141411,141413,141415],{"class":242,"line":250},[240,141410,132657],{"class":264},[240,141412,268],{"class":257},[240,141414,813],{"class":264},[240,141416,274],{"class":257},[240,141418,141419],{"class":242,"line":261},[240,141420,312],{"class":257},[19,141422,140056],{},[231,141424,141425],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,141426,141427,141433,141443],{"__ignoreMap":236},[240,141428,141429,141431],{"class":242,"line":243},[240,141430,132025],{"class":436},[240,141432,258],{"class":257},[240,141434,141435,141437,141439,141441],{"class":242,"line":250},[240,141436,132657],{"class":264},[240,141438,268],{"class":257},[240,141440,813],{"class":264},[240,141442,274],{"class":257},[240,141444,141445],{"class":242,"line":261},[240,141446,312],{"class":257},[1826,141448,141449],{},[1829,141450,141451],{},"左侧focus模块制作",[219,141453],{"style":221,"src":141454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[19,141456,140016],{},[231,141458,141459],{"className":233,"code":129774,"language":235,"meta":236,"style":236},[23,141460,141461,141469,141479,141489],{"__ignoreMap":236},[240,141462,141463,141465,141467],{"class":242,"line":243},[240,141464,55756],{"class":253},[240,141466,63824],{"class":436},[240,141468,258],{"class":257},[240,141470,141471,141473,141475,141477],{"class":242,"line":250},[240,141472,129789],{"class":264},[240,141474,268],{"class":257},[240,141476,56823],{"class":264},[240,141478,274],{"class":257},[240,141480,141481,141483,141485,141487],{"class":242,"line":261},[240,141482,72717],{"class":264},[240,141484,268],{"class":257},[240,141486,826],{"class":264},[240,141488,274],{"class":257},[240,141490,141491],{"class":242,"line":277},[240,141492,312],{"class":257},[19,141494,140056],{},[231,141496,141497],{"className":233,"code":129774,"language":235,"meta":236,"style":236},[23,141498,141499,141507,141517,141527],{"__ignoreMap":236},[240,141500,141501,141503,141505],{"class":242,"line":243},[240,141502,55756],{"class":253},[240,141504,63824],{"class":436},[240,141506,258],{"class":257},[240,141508,141509,141511,141513,141515],{"class":242,"line":250},[240,141510,129789],{"class":264},[240,141512,268],{"class":257},[240,141514,56823],{"class":264},[240,141516,274],{"class":257},[240,141518,141519,141521,141523,141525],{"class":242,"line":261},[240,141520,72717],{"class":264},[240,141522,268],{"class":257},[240,141524,826],{"class":264},[240,141526,274],{"class":257},[240,141528,141529],{"class":242,"line":277},[240,141530,312],{"class":257},[19,141532,141533],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[1826,141535,141536],{"start":250},[1829,141537,141538],{},"右侧newsflash模块制作",[219,141540],{"style":221,"src":141541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[19,141543,141544],{},"右侧的模块 分为上中下三个盒子",[19,141546,141547],{},"结构代码：",[231,141549,141550],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,141551,141552],{"__ignoreMap":236},[240,141553,141554,141556,141558,141560,141562,141564,141566,141568,141570,141572,141574,141576],{"class":242,"line":243},[240,141555,431],{"class":257},[240,141557,219],{"class":253},[240,141559,57172],{"class":436},[240,141561,440],{"class":257},[240,141563,135694],{"class":443},[240,141565,57180],{"class":436},[240,141567,440],{"class":257},[240,141569,135701],{"class":443},[240,141571,135704],{"class":436},[240,141573,440],{"class":257},[240,141575,135709],{"class":443},[240,141577,447],{"class":257},[19,141579,141580,141581,141584],{},"1 号盒子为 ",[23,141582,141583],{},"news"," 新闻模块 高度为 165px",[219,141586],{"style":221,"src":141587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[19,141589,141590,141591,141594,141595],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[23,141592,141593],{},"news-hd","，下面是 ",[23,141596,141597],{},"news-bd",[19,141599,141547],{},[231,141601,141602],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,141603,141604,141608,141622,141626],{"__ignoreMap":236},[240,141605,141606],{"class":242,"line":243},[240,141607,132288],{"class":246},[240,141609,141610,141612,141614,141616,141618,141620],{"class":242,"line":250},[240,141611,431],{"class":257},[240,141613,330],{"class":253},[240,141615,437],{"class":436},[240,141617,440],{"class":257},[240,141619,132301],{"class":443},[240,141621,447],{"class":257},[240,141623,141624],{"class":242,"line":261},[240,141625,132308],{"class":257},[240,141627,141628,141630,141632],{"class":242,"line":277},[240,141629,592],{"class":257},[240,141631,330],{"class":253},[240,141633,447],{"class":257},[19,141635,141636],{},"样式代码：",[231,141638,141639],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,141640,141641,141645,141659,141663],{"__ignoreMap":236},[240,141642,141643],{"class":242,"line":243},[240,141644,132288],{"class":246},[240,141646,141647,141649,141651,141653,141655,141657],{"class":242,"line":250},[240,141648,431],{"class":257},[240,141650,330],{"class":253},[240,141652,437],{"class":436},[240,141654,440],{"class":257},[240,141656,132301],{"class":443},[240,141658,447],{"class":257},[240,141660,141661],{"class":242,"line":261},[240,141662,132308],{"class":257},[240,141664,141665,141667,141669],{"class":242,"line":277},[240,141666,592],{"class":257},[240,141668,330],{"class":253},[240,141670,447],{"class":257},[19,141672,141673,141674,141676],{},"上面是",[23,141675,141593],{},"，设置高度是 33px，设置下边框",[3100,141678,141679,141685],{},[1829,141680,141681,141682,141684],{},"里面放一个",[23,141683,24857],{}," 标题",[1829,141686,141687,141688,141690,141691,141693],{},"放一个a",[23,141689,104604],{},"，内容是 更多，然后让 ",[23,141692,254],{}," 进行右浮动，三角用伪元素设置字体图标就好",[19,141695,141547],{},[231,141697,141698],{"className":233,"code":140019,"language":235,"meta":236,"style":236},[23,141699,141700,141708,141718,141728],{"__ignoreMap":236},[240,141701,141702,141704,141706],{"class":242,"line":243},[240,141703,330],{"class":253},[240,141705,139178],{"class":436},[240,141707,258],{"class":257},[240,141709,141710,141712,141714,141716],{"class":242,"line":250},[240,141711,139185],{"class":264},[240,141713,268],{"class":257},[240,141715,9603],{"class":443},[240,141717,274],{"class":257},[240,141719,141720,141722,141724,141726],{"class":242,"line":261},[240,141721,265],{"class":264},[240,141723,268],{"class":257},[240,141725,271],{"class":264},[240,141727,274],{"class":257},[240,141729,141730],{"class":242,"line":277},[240,141731,312],{"class":257},[19,141733,141636],{},[231,141735,141736],{"className":233,"code":140019,"language":235,"meta":236,"style":236},[23,141737,141738,141746,141756,141766],{"__ignoreMap":236},[240,141739,141740,141742,141744],{"class":242,"line":243},[240,141741,330],{"class":253},[240,141743,139178],{"class":436},[240,141745,258],{"class":257},[240,141747,141748,141750,141752,141754],{"class":242,"line":250},[240,141749,139185],{"class":264},[240,141751,268],{"class":257},[240,141753,9603],{"class":443},[240,141755,274],{"class":257},[240,141757,141758,141760,141762,141764],{"class":242,"line":261},[240,141759,265],{"class":264},[240,141761,268],{"class":257},[240,141763,271],{"class":264},[240,141765,274],{"class":257},[240,141767,141768],{"class":242,"line":277},[240,141769,312],{"class":257},[19,141771,141772,141773],{},"下面是",[23,141774,141597],{},[3100,141776,141777,141785],{},[1829,141778,141779,141780,102929,141782,141784],{},"里面包含 ",[23,141781,3100],{},[23,141783,1829],{}," 还有链接",[1829,141786,141257,141787,141789,141790,141792,141793,141796,141797],{},[23,141788,1829],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[23,141791,132843],{}," 2.设置 ",[23,141794,141795],{},"white-space: nowrap;"," 3. 设置 ",[23,141798,141799],{},"text-overflow: ellipsis;",[19,141801,141547],{},[231,141803,141805],{"className":233,"code":141804,"language":235,"meta":236,"style":236},"div {\n  overflow: hidden;\n}\n",[23,141806,141807,141813,141824],{"__ignoreMap":236},[240,141808,141809,141811],{"class":242,"line":243},[240,141810,330],{"class":253},[240,141812,258],{"class":257},[240,141814,141815,141818,141820,141822],{"class":242,"line":250},[240,141816,141817],{"class":264},"  overflow",[240,141819,268],{"class":257},[240,141821,63640],{"class":264},[240,141823,274],{"class":257},[240,141825,141826],{"class":242,"line":261},[240,141827,312],{"class":257},[19,141829,141636],{},[231,141831,141832],{"className":233,"code":141804,"language":235,"meta":236,"style":236},[23,141833,141834,141840,141850],{"__ignoreMap":236},[240,141835,141836,141838],{"class":242,"line":243},[240,141837,330],{"class":253},[240,141839,258],{"class":257},[240,141841,141842,141844,141846,141848],{"class":242,"line":250},[240,141843,141817],{"class":264},[240,141845,268],{"class":257},[240,141847,63640],{"class":264},[240,141849,274],{"class":257},[240,141851,141852],{"class":242,"line":261},[240,141853,312],{"class":257},[19,141855,141856,141857,141860],{},"2 号盒子为 ",[23,141858,141859],{},"lifeservice"," 生活服务模块 高度为 209px",[219,141862],{"style":221,"src":141863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[3100,141865,141866,141869,141879,141903,141914],{},[1829,141867,141868],{},"设置边框（左右下边框）",[1829,141870,141871,141872,141875,141876,141878],{},"里面的内容 是 ",[23,141873,141874],{},"ul > 12*li","，给",[23,141877,1829],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[1829,141880,141881,141882],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[3100,141883,141884,141889,141898],{},[1829,141885,141886,141888],{},[23,141887,141859],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[1829,141890,141891,141892,141894,141895,141897],{},"可以让 ",[23,141893,141859],{}," 里面的 ",[23,141896,3100],{}," 宽度为 252，就可以装的下 4 个 小 li",[1829,141899,141900,141902],{},[23,141901,141859],{}," 盒子 overflow 隐藏多余的部分就可以了",[1829,141904,118377,141905,141907,141908,141910,141911,141913],{},[23,141906,1829],{}," 里面放一个 ",[23,141909,2541],{},"（里面放图标），下面的文本用 ",[23,141912,19],{}," 标签包裹",[1829,141915,140677,141916,141918,141919,141921,141922,140711,141924,141927],{},[23,141917,2541],{}," 设置 24px宽和28px的高（注意 ",[23,141920,2541],{}," 是行内元素， 转成行内块），给 ",[23,141923,1829],{},[23,141925,141926],{},"text-align:center"," 让里面内容居中显示",[19,141929,141547],{},[231,141931,141933],{"className":233,"code":141932,"language":235,"meta":236,"style":236},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[23,141934,141935,141953,141958,141968],{"__ignoreMap":236},[240,141936,141937,141939,141941,141943,141945,141947,141949,141951],{"class":242,"line":243},[240,141938,240],{"class":253},[240,141940,1277],{"class":257},[240,141942,254],{"class":253},[240,141944,1277],{"class":257},[240,141946,25500],{"class":253},[240,141948,1277],{"class":257},[240,141950,68],{"class":253},[240,141952,258],{"class":257},[240,141954,141955],{"class":242,"line":250},[240,141956,141957],{"class":246},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[240,141959,141960,141962,141964,141966],{"class":242,"line":261},[240,141961,265],{"class":264},[240,141963,268],{"class":257},[240,141965,341],{"class":264},[240,141967,274],{"class":257},[240,141969,141970],{"class":242,"line":277},[240,141971,312],{"class":257},[19,141973,141636],{},[231,141975,141976],{"className":233,"code":141932,"language":235,"meta":236,"style":236},[23,141977,141978,141996,142000,142010],{"__ignoreMap":236},[240,141979,141980,141982,141984,141986,141988,141990,141992,141994],{"class":242,"line":243},[240,141981,240],{"class":253},[240,141983,1277],{"class":257},[240,141985,254],{"class":253},[240,141987,1277],{"class":257},[240,141989,25500],{"class":253},[240,141991,1277],{"class":257},[240,141993,68],{"class":253},[240,141995,258],{"class":257},[240,141997,141998],{"class":242,"line":250},[240,141999,141957],{"class":246},[240,142001,142002,142004,142006,142008],{"class":242,"line":261},[240,142003,265],{"class":264},[240,142005,268],{"class":257},[240,142007,341],{"class":264},[240,142009,274],{"class":257},[240,142011,142012],{"class":242,"line":277},[240,142013,312],{"class":257},[19,142015,142016,142017,142020],{},"3 号盒子为 ",[23,142018,142019],{},"bargain"," 特价商品",[3100,142022,142023],{},[1829,142024,142025],{},"这个比较简单，直接插入一张图片即可",[19,142027,141547],{},[231,142029,142030],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,142031,142032],{"__ignoreMap":236},[240,142033,142034,142036,142038,142040,142042,142044,142046,142048,142050,142052,142054,142056],{"class":242,"line":243},[240,142035,431],{"class":257},[240,142037,219],{"class":253},[240,142039,57172],{"class":436},[240,142041,440],{"class":257},[240,142043,135694],{"class":443},[240,142045,57180],{"class":436},[240,142047,440],{"class":257},[240,142049,135701],{"class":443},[240,142051,135704],{"class":436},[240,142053,440],{"class":257},[240,142055,135709],{"class":443},[240,142057,447],{"class":257},[19,142059,141636],{},[231,142061,142062],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,142063,142064],{"__ignoreMap":236},[240,142065,142066,142068,142070,142072,142074,142076,142078,142080,142082,142084,142086,142088],{"class":242,"line":243},[240,142067,431],{"class":257},[240,142069,219],{"class":253},[240,142071,57172],{"class":436},[240,142073,440],{"class":257},[240,142075,135694],{"class":443},[240,142077,57180],{"class":436},[240,142079,440],{"class":257},[240,142081,135701],{"class":443},[240,142083,135704],{"class":436},[240,142085,440],{"class":257},[240,142087,135709],{"class":443},[240,142089,447],{"class":257},[32,142091,142093],{"id":142092},"_1612-推荐模块制作","16.1.2 推荐模块制作",[219,142095],{"style":221,"src":142096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[19,142098,142099,142100,142103],{},"大盒子 ",[23,142101,142102],{},"recom"," 推荐模块 recommend",[3100,142105,142106],{},[1829,142107,142108,142109,142111,142112,142115],{},"给这个 ",[23,142110,142102],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[23,142113,142114],{},"#ebebeb","），设置距离上边 12px",[19,142117,141547],{},[231,142119,142121],{"className":233,"code":142120,"language":235,"meta":236,"style":236},"div {\n  background-color: #f0f0f0;\n}\n",[23,142122,142123,142129,142140],{"__ignoreMap":236},[240,142124,142125,142127],{"class":242,"line":243},[240,142126,330],{"class":253},[240,142128,258],{"class":257},[240,142130,142131,142133,142135,142138],{"class":242,"line":250},[240,142132,690],{"class":264},[240,142134,268],{"class":257},[240,142136,142137],{"class":264},"#f0f0f0",[240,142139,274],{"class":257},[240,142141,142142],{"class":242,"line":261},[240,142143,312],{"class":257},[19,142145,141636],{},[231,142147,142148],{"className":233,"code":142120,"language":235,"meta":236,"style":236},[23,142149,142150,142156,142166],{"__ignoreMap":236},[240,142151,142152,142154],{"class":242,"line":243},[240,142153,330],{"class":253},[240,142155,258],{"class":257},[240,142157,142158,142160,142162,142164],{"class":242,"line":250},[240,142159,690],{"class":264},[240,142161,268],{"class":257},[240,142163,142137],{"class":264},[240,142165,274],{"class":257},[240,142167,142168],{"class":242,"line":261},[240,142169,312],{"class":257},[19,142171,142172],{},"里面包含 2 个盒子， 浮动即可",[19,142174,141547],{},[231,142176,142177],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,142178,142179,142185,142195],{"__ignoreMap":236},[240,142180,142181,142183],{"class":242,"line":243},[240,142182,132025],{"class":436},[240,142184,258],{"class":257},[240,142186,142187,142189,142191,142193],{"class":242,"line":250},[240,142188,132657],{"class":264},[240,142190,268],{"class":257},[240,142192,813],{"class":264},[240,142194,274],{"class":257},[240,142196,142197],{"class":242,"line":261},[240,142198,312],{"class":257},[19,142200,142201,142202],{},"1 号盒子 ",[23,142203,142204],{},"recom_hd",[3100,142206,142207,142210],{},[1829,142208,142209],{},"设置宽度205px，高度163px",[1829,142211,141681,142212,142214],{},[23,142213,219],{},"标签，插入图片即可",[19,142216,141547],{},[231,142218,142219],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,142220,142221],{"__ignoreMap":236},[240,142222,142223,142225,142227,142229,142231,142233,142235,142237,142239,142241,142243,142245],{"class":242,"line":243},[240,142224,431],{"class":257},[240,142226,219],{"class":253},[240,142228,57172],{"class":436},[240,142230,440],{"class":257},[240,142232,135694],{"class":443},[240,142234,57180],{"class":436},[240,142236,440],{"class":257},[240,142238,135701],{"class":443},[240,142240,135704],{"class":436},[240,142242,440],{"class":257},[240,142244,135709],{"class":443},[240,142246,447],{"class":257},[19,142248,141636],{},[231,142250,142251],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,142252,142253],{"__ignoreMap":236},[240,142254,142255,142257,142259,142261,142263,142265,142267,142269,142271,142273,142275,142277],{"class":242,"line":243},[240,142256,431],{"class":257},[240,142258,219],{"class":253},[240,142260,57172],{"class":436},[240,142262,440],{"class":257},[240,142264,135694],{"class":443},[240,142266,57180],{"class":436},[240,142268,440],{"class":257},[240,142270,135701],{"class":443},[240,142272,135704],{"class":436},[240,142274,440],{"class":257},[240,142276,135709],{"class":443},[240,142278,447],{"class":257},[19,142280,142281,142282,142285],{},"2 号盒子 ",[23,142283,142284],{},"recom_bd"," ，注意里面的小竖线",[3100,142287,142288,142299,142302,142307,142312],{},[1829,142289,142290,142291,142293,142294,142296,142297],{},"右侧结构里面放 ",[23,142292,3100],{}," 包含 4个 ",[23,142295,1829],{},"，每个li里面包含一个",[23,142298,219],{},[1829,142300,142301],{},"直接利用切片工具把里面的内容当成一张图片",[1829,142303,140677,142304,142306],{},[23,142305,1829],{}," 设置浮动",[1829,142308,140677,142309,142311],{},[23,142310,219],{}," 设置宽高，宽度 248px，高度 163px",[1829,142313,142314,142315,141875,142318,142320,142321,142323,142324],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[23,142316,142317],{},"top 10px",[23,142319,1829],{},"设置相对定位（注意，最后一个",[23,142322,1829],{},"不用设置伪元素），可以利用 ",[23,142325,142326],{},"nth-child(-n+3){...}",[19,142328,141547],{},[231,142330,142331],{"className":233,"code":140019,"language":235,"meta":236,"style":236},[23,142332,142333,142341,142351,142361],{"__ignoreMap":236},[240,142334,142335,142337,142339],{"class":242,"line":243},[240,142336,330],{"class":253},[240,142338,139178],{"class":436},[240,142340,258],{"class":257},[240,142342,142343,142345,142347,142349],{"class":242,"line":250},[240,142344,139185],{"class":264},[240,142346,268],{"class":257},[240,142348,9603],{"class":443},[240,142350,274],{"class":257},[240,142352,142353,142355,142357,142359],{"class":242,"line":261},[240,142354,265],{"class":264},[240,142356,268],{"class":257},[240,142358,271],{"class":264},[240,142360,274],{"class":257},[240,142362,142363],{"class":242,"line":277},[240,142364,312],{"class":257},[19,142366,141636],{},[231,142368,142369],{"className":233,"code":140019,"language":235,"meta":236,"style":236},[23,142370,142371,142379,142389,142399],{"__ignoreMap":236},[240,142372,142373,142375,142377],{"class":242,"line":243},[240,142374,330],{"class":253},[240,142376,139178],{"class":436},[240,142378,258],{"class":257},[240,142380,142381,142383,142385,142387],{"class":242,"line":250},[240,142382,139185],{"class":264},[240,142384,268],{"class":257},[240,142386,9603],{"class":443},[240,142388,274],{"class":257},[240,142390,142391,142393,142395,142397],{"class":242,"line":261},[240,142392,265],{"class":264},[240,142394,268],{"class":257},[240,142396,271],{"class":264},[240,142398,274],{"class":257},[240,142400,142401],{"class":242,"line":277},[240,142402,312],{"class":257},[32,142404,142406],{"id":142405},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[219,142408],{"style":221,"src":142409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[19,142411,142412],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[19,142414,142415],{},"第一楼是家用电器模块： 里面包含两个盒子",[19,142417,142418,142421],{},[23,142419,142420],{},"box_hd"," 制作",[19,142423,142201,142424,142426],{},[23,142425,142420],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[219,142428],{"style":221,"src":142429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[3100,142431,142432,142437,142442,142445],{},[1829,142433,142434,142436],{},[23,142435,142420],{}," 给 30px 的高度，2个像素的下边框",[1829,142438,142439,142440],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[23,142441,140688],{},[1829,142443,142444],{},"左侧盒左浮动，右侧盒子右浮动",[1829,142446,142447,142449,142450,142452],{},[23,142448,254],{},"标签之间的距离用左右的",[23,142451,32829],{},"撑开即可",[19,142454,142455],{},"结构代码",[231,142457,142458],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,142459,142460,142466,142476],{"__ignoreMap":236},[240,142461,142462,142464],{"class":242,"line":243},[240,142463,132025],{"class":436},[240,142465,258],{"class":257},[240,142467,142468,142470,142472,142474],{"class":242,"line":250},[240,142469,132657],{"class":264},[240,142471,268],{"class":257},[240,142473,813],{"class":264},[240,142475,274],{"class":257},[240,142477,142478],{"class":242,"line":261},[240,142479,312],{"class":257},[19,142481,142482],{},"样式代码",[231,142484,142485],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,142486,142487,142493,142503],{"__ignoreMap":236},[240,142488,142489,142491],{"class":242,"line":243},[240,142490,132025],{"class":436},[240,142492,258],{"class":257},[240,142494,142495,142497,142499,142501],{"class":242,"line":250},[240,142496,132657],{"class":264},[240,142498,268],{"class":257},[240,142500,813],{"class":264},[240,142502,274],{"class":257},[240,142504,142505],{"class":242,"line":261},[240,142506,312],{"class":257},[19,142508,142509,142421],{},[23,142510,142511],{},"box_bd",[19,142513,142514],{},"2 号盒子 box_bd，不要给高度",[219,142516],{"style":221,"src":142517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[19,142519,142520],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[19,142522,142523],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[19,142525,142526],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[3100,142528,142529,142541,142557],{},[1829,142530,142531,142533,142534,142537,142538,142540],{},[23,142532,142511],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[23,142535,142536],{},"tab_content","，在",[23,142539,142536],{}," 里面包裹tab选项卡对应的内容",[1829,142542,142543,142544,142547,142548,142550,142551,142553,142554,142556],{},"内容被一个大盒子包裹（",[23,142545,142546],{},"tab_list_item","），里面是 ",[23,142549,3100],{}," 包裹 5个 ",[23,142552,1829],{},"，每个",[23,142555,1829],{},"设置对应的宽度，然后设置浮动",[1829,142558,142559,142560,142562,142563,142565,142566],{},"而这5个",[23,142561,1829],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[23,142564,1829],{},"设置",[3100,142567,142568,142586,142589],{},[1829,142569,142570,142571,142573,142574,142576,142577,142579,142580,142582,142583,142585],{},"第一个小 ",[23,142572,1829],{}," 分为上下结构，上面是 ",[23,142575,3100],{}," 包裹 ",[23,142578,1829],{}," ，",[23,142581,1829],{},"里面包裹 ",[23,142584,254],{},"，下面插入一张图片",[1829,142587,142588],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[1829,142590,142591,142592,142594,142595,142597,142598,142600],{},"后面的小 ",[23,142593,1829],{}," 里面先放一个",[23,142596,254],{},"标签，然后在",[23,142599,254],{},"标签里面插入图片即可",[19,142602,142455],{},[231,142604,142605],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,142606,142607],{"__ignoreMap":236},[240,142608,142609,142611,142613,142615,142617,142619,142621,142623,142625,142627,142629,142631],{"class":242,"line":243},[240,142610,431],{"class":257},[240,142612,219],{"class":253},[240,142614,57172],{"class":436},[240,142616,440],{"class":257},[240,142618,135694],{"class":443},[240,142620,57180],{"class":436},[240,142622,440],{"class":257},[240,142624,135701],{"class":443},[240,142626,135704],{"class":436},[240,142628,440],{"class":257},[240,142630,135709],{"class":443},[240,142632,447],{"class":257},[19,142634,142482],{},[231,142636,142637],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,142638,142639],{"__ignoreMap":236},[240,142640,142641,142643,142645,142647,142649,142651,142653,142655,142657,142659,142661,142663],{"class":242,"line":243},[240,142642,431],{"class":257},[240,142644,219],{"class":253},[240,142646,57172],{"class":436},[240,142648,440],{"class":257},[240,142650,135694],{"class":443},[240,142652,57180],{"class":436},[240,142654,440],{"class":257},[240,142656,135701],{"class":443},[240,142658,135704],{"class":436},[240,142660,440],{"class":257},[240,142662,135709],{"class":443},[240,142664,447],{"class":257},[19,142666,142667],{},"tab栏切换需求！！！！！！介绍：",[219,142669],{"style":221,"src":142670},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[3100,142672,142673,142681,142687,142690],{},[1829,142674,142675,142678,142679],{},[23,142676,142677],{},"tab","栏的布局是 ",[23,142680,140688],{},[1829,142682,142683,142684,142686],{},"有多少个",[23,142685,142677],{},"选项卡，那么对应就有多少个内容",[1829,142688,142689],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[1829,142691,142692,142693,142696,142697,142699,142700,142702],{},"等后面我们学习了",[23,142694,142695],{},"js","之后，我们就会配合",[23,142698,142695],{},"来实现，",[23,142701,142677],{},"栏的切换",[14,142704,142706],{"id":142705},"_162-列表制作","16.2 列表制作",[32,142708,142710],{"id":142709},"_1621-准备工作","16.2.1 准备工作",[3100,142712,142713,142716,142719,142722],{},[1829,142714,142715],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[1829,142717,142718],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[1829,142720,142721],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[1829,142723,142724],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[32,142726,142728,142729,102929,142731,142733],{"id":142727},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[23,142730,133182],{},[23,142732,55648],{}," 修改",[219,142735],{"style":221,"src":142736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[3100,142738,142739],{},[1829,142740,142741],{},"秒杀盒子 sk（ second kill ） 定位即可",[19,142743,141547],{},[231,142745,142746],{"className":233,"code":133609,"language":235,"meta":236,"style":236},[23,142747,142748,142752,142766,142770,142784,142788,142802,142806,142820,142824],{"__ignoreMap":236},[240,142749,142750],{"class":242,"line":243},[240,142751,133616],{"class":246},[240,142753,142754,142756,142758,142760,142762,142764],{"class":242,"line":250},[240,142755,133621],{"class":436},[240,142757,81721],{"class":257},[240,142759,1072],{"class":264},[240,142761,268],{"class":257},[240,142763,133630],{"class":264},[240,142765,1655],{"class":257},[240,142767,142768],{"class":242,"line":261},[240,142769,133637],{"class":246},[240,142771,142772,142774,142776,142778,142780,142782],{"class":242,"line":277},[240,142773,133642],{"class":436},[240,142775,81721],{"class":257},[240,142777,1072],{"class":264},[240,142779,268],{"class":257},[240,142781,56698],{"class":264},[240,142783,1655],{"class":257},[240,142785,142786],{"class":242,"line":294},[240,142787,133657],{"class":246},[240,142789,142790,142792,142794,142796,142798,142800],{"class":242,"line":309},[240,142791,133662],{"class":436},[240,142793,81721],{"class":257},[240,142795,1072],{"class":264},[240,142797,268],{"class":257},[240,142799,56765],{"class":264},[240,142801,1655],{"class":257},[240,142803,142804],{"class":242,"line":529},[240,142805,133677],{"class":246},[240,142807,142808,142810,142812,142814,142816,142818],{"class":242,"line":549},[240,142809,133682],{"class":436},[240,142811,81721],{"class":257},[240,142813,1072],{"class":264},[240,142815,268],{"class":257},[240,142817,1158],{"class":264},[240,142819,1655],{"class":257},[240,142821,142822],{"class":242,"line":569},[240,142823,133697],{"class":246},[240,142825,142826,142828,142830,142832,142834,142836],{"class":242,"line":589},[240,142827,133702],{"class":436},[240,142829,81721],{"class":257},[240,142831,1072],{"class":264},[240,142833,268],{"class":257},[240,142835,133711],{"class":264},[240,142837,1655],{"class":257},[19,142839,141636],{},[231,142841,142842],{"className":233,"code":133609,"language":235,"meta":236,"style":236},[23,142843,142844,142848,142862,142866,142880,142884,142898,142902,142916,142920],{"__ignoreMap":236},[240,142845,142846],{"class":242,"line":243},[240,142847,133616],{"class":246},[240,142849,142850,142852,142854,142856,142858,142860],{"class":242,"line":250},[240,142851,133621],{"class":436},[240,142853,81721],{"class":257},[240,142855,1072],{"class":264},[240,142857,268],{"class":257},[240,142859,133630],{"class":264},[240,142861,1655],{"class":257},[240,142863,142864],{"class":242,"line":261},[240,142865,133637],{"class":246},[240,142867,142868,142870,142872,142874,142876,142878],{"class":242,"line":277},[240,142869,133642],{"class":436},[240,142871,81721],{"class":257},[240,142873,1072],{"class":264},[240,142875,268],{"class":257},[240,142877,56698],{"class":264},[240,142879,1655],{"class":257},[240,142881,142882],{"class":242,"line":294},[240,142883,133657],{"class":246},[240,142885,142886,142888,142890,142892,142894,142896],{"class":242,"line":309},[240,142887,133662],{"class":436},[240,142889,81721],{"class":257},[240,142891,1072],{"class":264},[240,142893,268],{"class":257},[240,142895,56765],{"class":264},[240,142897,1655],{"class":257},[240,142899,142900],{"class":242,"line":529},[240,142901,133677],{"class":246},[240,142903,142904,142906,142908,142910,142912,142914],{"class":242,"line":549},[240,142905,133682],{"class":436},[240,142907,81721],{"class":257},[240,142909,1072],{"class":264},[240,142911,268],{"class":257},[240,142913,1158],{"class":264},[240,142915,1655],{"class":257},[240,142917,142918],{"class":242,"line":569},[240,142919,133697],{"class":246},[240,142921,142922,142924,142926,142928,142930,142932],{"class":242,"line":589},[240,142923,133702],{"class":436},[240,142925,81721],{"class":257},[240,142927,1072],{"class":264},[240,142929,268],{"class":257},[240,142931,133711],{"class":264},[240,142933,1655],{"class":257},[3100,142935,142936,142947],{},[1829,142937,142938,142939,142942,142943,102929,142945],{},"1 号盒子左侧浮动 ",[23,142940,142941],{},"sk_list"," 里面包含 ",[23,142944,3100],{},[23,142946,1829],{},[1829,142948,142949,142950,142942,142953,102929,142955],{},"2 号盒子左侧浮动 ",[23,142951,142952],{},"sk_con",[23,142954,3100],{},[23,142956,1829],{},[19,142958,141547],{},[231,142960,142961],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,142962,142963,142969,142979],{"__ignoreMap":236},[240,142964,142965,142967],{"class":242,"line":243},[240,142966,132025],{"class":436},[240,142968,258],{"class":257},[240,142970,142971,142973,142975,142977],{"class":242,"line":250},[240,142972,132657],{"class":264},[240,142974,268],{"class":257},[240,142976,813],{"class":264},[240,142978,274],{"class":257},[240,142980,142981],{"class":242,"line":261},[240,142982,312],{"class":257},[19,142984,141636],{},[231,142986,142987],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,142988,142989,142995,143005],{"__ignoreMap":236},[240,142990,142991,142993],{"class":242,"line":243},[240,142992,132025],{"class":436},[240,142994,258],{"class":257},[240,142996,142997,142999,143001,143003],{"class":242,"line":250},[240,142998,132657],{"class":264},[240,143000,268],{"class":257},[240,143002,813],{"class":264},[240,143004,274],{"class":257},[240,143006,143007],{"class":242,"line":261},[240,143008,312],{"class":257},[32,143010,143012,143013],{"id":143011},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[23,143014,143015],{},"sk_container",[219,143017],{"style":221,"src":143018},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[3100,143020,143021,143026],{},[1829,143022,142201,143023,143025],{},[23,143024,143015],{}," 给宽度 1200，不要给高度",[1829,143027,143028],{},"一定不要忘记清除浮动",[19,143030,141547],{},[231,143032,143033],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,143034,143035,143041,143051],{"__ignoreMap":236},[240,143036,143037,143039],{"class":242,"line":243},[240,143038,132025],{"class":436},[240,143040,258],{"class":257},[240,143042,143043,143045,143047,143049],{"class":242,"line":250},[240,143044,132657],{"class":264},[240,143046,268],{"class":257},[240,143048,813],{"class":264},[240,143050,274],{"class":257},[240,143052,143053],{"class":242,"line":261},[240,143054,312],{"class":257},[1826,143056,143057],{},[1829,143058,143059],{},"sk_hd制作",[3100,143061,143062],{},[1829,143063,142281,143064,143067],{},[23,143065,143066],{},"sk_hd"," ，插入图片即可",[19,143069,141547],{},[231,143071,143072],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,143073,143074],{"__ignoreMap":236},[240,143075,143076,143078,143080,143082,143084,143086,143088,143090,143092,143094,143096,143098],{"class":242,"line":243},[240,143077,431],{"class":257},[240,143079,219],{"class":253},[240,143081,57172],{"class":436},[240,143083,440],{"class":257},[240,143085,135694],{"class":443},[240,143087,57180],{"class":436},[240,143089,440],{"class":257},[240,143091,135701],{"class":443},[240,143093,135704],{"class":436},[240,143095,440],{"class":257},[240,143097,135709],{"class":443},[240,143099,447],{"class":257},[1826,143101,143102],{"start":250},[1829,143103,143104],{},"sk_bd制作",[3100,143106,143107],{},[1829,143108,143109,143110,143113,143114,102929,143116,143118],{},"3 号盒子 ",[23,143111,143112],{},"sk_bd"," ，里面包含很多的 ",[23,143115,3100],{},[23,143117,1829],{},[3100,143119,143120,143129],{},[1829,143121,143122,143123,143125,143126,143128],{},"当鼠标移入到 ",[23,143124,1829],{}," 上面的时候显示红色的边框，在这里先给 ",[23,143127,1829],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[1829,143130,143131,143132,143134,143135,143137,143138,143141,143142,143144],{},"由于给每个 ",[23,143133,1829],{}," 都设置了外边距，导致一行的最后一个 ",[23,143136,1829],{}," 掉了下来，在这里我们利用 ",[23,143139,143140],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[23,143143,1829],{},"，去掉外边距就好了",[19,143146,141547],{},[231,143148,143149],{"className":233,"code":140366,"language":235,"meta":236,"style":236},[23,143150,143151,143157,143169],{"__ignoreMap":236},[240,143152,143153,143155],{"class":242,"line":243},[240,143154,330],{"class":253},[240,143156,258],{"class":257},[240,143158,143159,143161,143163,143165,143167],{"class":242,"line":250},[240,143160,72393],{"class":264},[240,143162,268],{"class":257},[240,143164,1274],{"class":264},[240,143166,53498],{"class":264},[240,143168,274],{"class":257},[240,143170,143171],{"class":242,"line":261},[240,143172,312],{"class":257},[19,143174,141636],{},[231,143176,143177],{"className":233,"code":140366,"language":235,"meta":236,"style":236},[23,143178,143179,143185,143197],{"__ignoreMap":236},[240,143180,143181,143183],{"class":242,"line":243},[240,143182,330],{"class":253},[240,143184,258],{"class":257},[240,143186,143187,143189,143191,143193,143195],{"class":242,"line":250},[240,143188,72393],{"class":264},[240,143190,268],{"class":257},[240,143192,1274],{"class":264},[240,143194,53498],{"class":264},[240,143196,274],{"class":257},[240,143198,143199],{"class":242,"line":261},[240,143200,312],{"class":257},[14,143202,143204],{"id":143203},"_163-注册页面制作","16.3 注册页面制作",[219,143206],{"style":221,"src":143207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[19,143209,143210,143212],{},[68,143211,10976],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[219,143214],{"style":221,"src":143215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[32,143217,143219],{"id":143218},"_1631-准备工作","16.3.1 准备工作",[3100,143221,143222,143225],{},[1829,143223,143224],{},"创建register.html，引入 base.css，引入favicon图标",[1829,143226,143227],{},"创建register.css ，在html页面进行引入",[32,143229,143231,143232,143234],{"id":143230},"_1632-header-头部实现","16.3.2 ",[23,143233,133182],{}," 头部实现",[3100,143236,143237,143240],{},[1829,143238,143239],{},"整个内容用 版心 进行包裹",[1829,143241,143242],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[19,143244,141547],{},[231,143246,143247],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,143248,143249],{"__ignoreMap":236},[240,143250,143251,143253,143255,143257,143259,143261,143263,143265,143267,143269,143271,143273],{"class":242,"line":243},[240,143252,431],{"class":257},[240,143254,219],{"class":253},[240,143256,57172],{"class":436},[240,143258,440],{"class":257},[240,143260,135694],{"class":443},[240,143262,57180],{"class":436},[240,143264,440],{"class":257},[240,143266,135701],{"class":443},[240,143268,135704],{"class":436},[240,143270,440],{"class":257},[240,143272,135709],{"class":443},[240,143274,447],{"class":257},[19,143276,141636],{},[231,143278,143279],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,143280,143281],{"__ignoreMap":236},[240,143282,143283,143285,143287,143289,143291,143293,143295,143297,143299,143301,143303,143305],{"class":242,"line":243},[240,143284,431],{"class":257},[240,143286,219],{"class":253},[240,143288,57172],{"class":436},[240,143290,440],{"class":257},[240,143292,135694],{"class":443},[240,143294,57180],{"class":436},[240,143296,440],{"class":257},[240,143298,135701],{"class":443},[240,143300,135704],{"class":436},[240,143302,440],{"class":257},[240,143304,135709],{"class":443},[240,143306,447],{"class":257},[32,143308,143310,143311,143314],{"id":143309},"_1633-registerarea-主体模块实现","16.3.3 ",[23,143312,143313],{},"registerarea"," 主体模块实现",[219,143316],{"style":221,"src":143317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[19,143319,143320],{},"整个大盒子 高度为 522px，设置4个边框",[19,143322,141547],{},[231,143324,143325],{"className":233,"code":132334,"language":235,"meta":236,"style":236},[23,143326,143327,143333,143349],{"__ignoreMap":236},[240,143328,143329,143331],{"class":242,"line":243},[240,143330,330],{"class":253},[240,143332,258],{"class":257},[240,143334,143335,143337,143339,143341,143343,143345,143347],{"class":242,"line":250},[240,143336,72813],{"class":264},[240,143338,268],{"class":257},[240,143340,1643],{"class":264},[240,143342,289],{"class":288},[240,143344,53463],{"class":264},[240,143346,131569],{"class":264},[240,143348,274],{"class":257},[240,143350,143351],{"class":242,"line":261},[240,143352,312],{"class":257},[19,143354,141636],{},[231,143356,143357],{"className":233,"code":132334,"language":235,"meta":236,"style":236},[23,143358,143359,143365,143381],{"__ignoreMap":236},[240,143360,143361,143363],{"class":242,"line":243},[240,143362,330],{"class":253},[240,143364,258],{"class":257},[240,143366,143367,143369,143371,143373,143375,143377,143379],{"class":242,"line":250},[240,143368,72813],{"class":264},[240,143370,268],{"class":257},[240,143372,1643],{"class":264},[240,143374,289],{"class":288},[240,143376,53463],{"class":264},[240,143378,131569],{"class":264},[240,143380,274],{"class":257},[240,143382,143383],{"class":242,"line":261},[240,143384,312],{"class":257},[19,143386,143387],{},"1号盒子 是一个 h3 标签，放标题",[3100,143389,143390],{},[1829,143391,143392],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[19,143394,141547],{},[231,143396,143397],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,143398,143399,143405,143415],{"__ignoreMap":236},[240,143400,143401,143403],{"class":242,"line":243},[240,143402,132025],{"class":436},[240,143404,258],{"class":257},[240,143406,143407,143409,143411,143413],{"class":242,"line":250},[240,143408,132657],{"class":264},[240,143410,268],{"class":257},[240,143412,813],{"class":264},[240,143414,274],{"class":257},[240,143416,143417],{"class":242,"line":261},[240,143418,312],{"class":257},[19,143420,141636],{},[231,143422,143423],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,143424,143425,143431,143441],{"__ignoreMap":236},[240,143426,143427,143429],{"class":242,"line":243},[240,143428,132025],{"class":436},[240,143430,258],{"class":257},[240,143432,143433,143435,143437,143439],{"class":242,"line":250},[240,143434,132657],{"class":264},[240,143436,268],{"class":257},[240,143438,813],{"class":264},[240,143440,274],{"class":257},[240,143442,143443],{"class":242,"line":261},[240,143444,312],{"class":257},[19,143446,143447],{},"2号盒子 里面放注册的内容",[3100,143449,143450,143453,143462,143476,143489,143492,143495,143513,143527],{},[1829,143451,143452],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[1829,143454,143455,143456,143458,143459,143461],{},"里面的内容利用 ",[23,143457,3100],{}," 包含 ",[23,143460,1829],{}," 来实现的（不需要用表格）",[1829,143463,140691,143464,143466,143467,143469,143470,143472,143473,143475],{},[23,143465,1829],{}," 里面，左侧放 ",[23,143468,35554],{}," 标签， 中间放",[23,143471,55756],{}," 标签， 右侧放 ",[23,143474,240],{}," 提示信息",[1829,143477,143478,143479,143481,143482,143484,143485,143488],{},"左侧 ",[23,143480,35554],{},"里面的文字都是右对齐，我们可以给",[23,143483,35554],{},"设置一个宽度（88px），然后利用",[23,143486,143487],{},"text-align"," 来设置右对齐",[1829,143490,143491],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[1829,143493,143494],{},"右侧 span修饰一下文字颜色",[1829,143496,143497,143498],{},"提示信息的样式优化",[3100,143499,143500,143503,143506],{},[1829,143501,143502],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[1829,143504,143505],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[1829,143507,143508,143509,143512],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[23,143510,143511],{},"vertical-algin"," 来设置 图片与文字对齐方式",[1829,143514,143515,143516],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[3100,143517,143518,143524],{},[1829,143519,143520,143521,143523],{},"设置 ",[23,143522,25500],{}," 的 左右 12px 的内边距，设置一下文字颜色",[1829,143525,143526],{},"分别设置 背景颜色",[1829,143528,143529,143530,143532],{},"同意协议 和 完成注册 都是用 ",[23,143531,1829],{}," 进行包裹",[19,143534,141547],{},[231,143536,143537],{"className":233,"code":142120,"language":235,"meta":236,"style":236},[23,143538,143539,143545,143555],{"__ignoreMap":236},[240,143540,143541,143543],{"class":242,"line":243},[240,143542,330],{"class":253},[240,143544,258],{"class":257},[240,143546,143547,143549,143551,143553],{"class":242,"line":250},[240,143548,690],{"class":264},[240,143550,268],{"class":257},[240,143552,142137],{"class":264},[240,143554,274],{"class":257},[240,143556,143557],{"class":242,"line":261},[240,143558,312],{"class":257},[19,143560,141636],{},[231,143562,143563],{"className":233,"code":142120,"language":235,"meta":236,"style":236},[23,143564,143565,143571,143581],{"__ignoreMap":236},[240,143566,143567,143569],{"class":242,"line":243},[240,143568,330],{"class":253},[240,143570,258],{"class":257},[240,143572,143573,143575,143577,143579],{"class":242,"line":250},[240,143574,690],{"class":264},[240,143576,268],{"class":257},[240,143578,142137],{"class":264},[240,143580,274],{"class":257},[240,143582,143583],{"class":242,"line":261},[240,143584,312],{"class":257},[32,143586,143588],{"id":143587},"_1634-底部实现","16.3.4 底部实现",[19,143590,141547],{},[231,143592,143593],{"className":233,"code":142120,"language":235,"meta":236,"style":236},[23,143594,143595,143601,143611],{"__ignoreMap":236},[240,143596,143597,143599],{"class":242,"line":243},[240,143598,330],{"class":253},[240,143600,258],{"class":257},[240,143602,143603,143605,143607,143609],{"class":242,"line":250},[240,143604,690],{"class":264},[240,143606,268],{"class":257},[240,143608,142137],{"class":264},[240,143610,274],{"class":257},[240,143612,143613],{"class":242,"line":261},[240,143614,312],{"class":257},[19,143616,141636],{},[231,143618,143619],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,143620,143621,143625,143639,143643],{"__ignoreMap":236},[240,143622,143623],{"class":242,"line":243},[240,143624,132288],{"class":246},[240,143626,143627,143629,143631,143633,143635,143637],{"class":242,"line":250},[240,143628,431],{"class":257},[240,143630,330],{"class":253},[240,143632,437],{"class":436},[240,143634,440],{"class":257},[240,143636,132301],{"class":443},[240,143638,447],{"class":257},[240,143640,143641],{"class":242,"line":261},[240,143642,132308],{"class":257},[240,143644,143645,143647,143649],{"class":242,"line":277},[240,143646,592],{"class":257},[240,143648,330],{"class":253},[240,143650,447],{"class":257},[14,143652,143654],{"id":143653},"_164-项目总结","16.4 项目总结",[1826,143656,143657,143660,143663,143666],{},[1829,143658,143659],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[1829,143661,143662],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[1829,143664,143665],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[1829,143667,143668],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[219,143670],{"style":221,"src":143671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[1826,143673,143674],{"start":294},[1829,143675,143676],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[219,143678],{"style":221,"src":143679},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[1826,143681,143682],{"start":309},[1829,143683,143684],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[219,143686],{"style":221,"src":143687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[231,143689,143690],{"className":417,"code":138334,"language":419,"meta":236,"style":236},[23,143691,143692],{"__ignoreMap":236},[240,143693,143694,143696,143698,143700,143702,143704,143706,143708,143710,143712,143714,143716],{"class":242,"line":243},[240,143695,431],{"class":257},[240,143697,55756],{"class":253},[240,143699,55759],{"class":436},[240,143701,440],{"class":257},[240,143703,64622],{"class":443},[240,143705,16869],{"class":436},[240,143707,440],{"class":257},[240,143709,138355],{"class":443},[240,143711,62948],{"class":436},[240,143713,440],{"class":257},[240,143715,138362],{"class":443},[240,143717,447],{"class":257},[1826,143719,143720,143723],{"start":529},[1829,143721,143722],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[1829,143724,143725],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[2019,143727,143728],{},"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":236,"searchDepth":250,"depth":250,"links":143730},[143731,143736,143743,143751],{"id":141357,"depth":250,"text":141358,"children":143732},[143733,143734,143735],{"id":141361,"depth":261,"text":141362},{"id":142092,"depth":261,"text":142093},{"id":142405,"depth":261,"text":142406},{"id":142705,"depth":250,"text":142706,"children":143737},[143738,143739,143741],{"id":142709,"depth":261,"text":142710},{"id":142727,"depth":261,"text":143740},"16.2.2 列表页 header 和 nav 修改",{"id":143011,"depth":261,"text":143742},"16.2.3 列表页主体 sk_container",{"id":143203,"depth":250,"text":143204,"children":143744},[143745,143746,143748,143750],{"id":143218,"depth":261,"text":143219},{"id":143230,"depth":261,"text":143747},"16.3.2 header 头部实现",{"id":143309,"depth":261,"text":143749},"16.3.3 registerarea 主体模块实现",{"id":143587,"depth":261,"text":143588},{"id":143653,"depth":250,"text":143654},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":141349,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":143758,"title":143759,"body":143760,"description":2048,"extension":2049,"meta":143868,"navigation":2051,"path":143869,"seo":143870,"stem":143871,"__hash__":143872},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":143761,"toc":143863},[143762,143765,143769,143772,143775,143784,143793,143797,143802,143809,143827,143830,143833,143836,143839,143842,143845,143848,143851,143854,143857,143860],[10,143763,143759],{"id":143764},"_17-web服务器与网站发布",[14,143766,143768],{"id":143767},"_171-web服务器","17.1 Web服务器",[19,143770,143771],{},"把自己网站上传到服务器上，可以让其他人访问",[219,143773],{"style":221,"src":143774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[19,143776,143777,143780,143781],{},[68,143778,143779],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[68,143782,143783],{},"Web 服务器等",[19,143785,143786,143787,102929,143790,27687],{},"根据服务器在网络中所在的位置不同，又可分为 ",[68,143788,143789],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[68,143791,143792],{},"远程服务器",[32,143794,143796],{"id":143795},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[19,143798,143799],{},[68,143800,143801],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[19,143803,143804,143805],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[254,143806,143807],{"href":143807,"rel":143808},"http:\u002F\u002Ffree.3v.do\u002F",[25811],[3100,143810,143811,143814,143817,143824],{},[1829,143812,143813],{},"去免费空间网站注册账号。",[1829,143815,143816],{},"记录下主机名、用户名、密码、域名。",[1829,143818,143819,143820,143823],{},"利用 ",[23,143821,143822],{},"utftp"," 软件 上传网站到远程服务器",[1829,143825,143826],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[19,143828,143829],{},"使用软件上传，对上传软件文件进行解压",[219,143831],{"style":221,"src":143832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[219,143834],{"style":221,"src":143835},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[19,143837,143838],{},"输入刚刚申请的服务器账号信息：",[219,143840],{"style":221,"src":143841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[219,143843],{"style":221,"src":143844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[219,143846],{"style":221,"src":143847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[219,143849],{"style":221,"src":143850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[19,143852,143853],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[219,143855],{"style":221,"src":143856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[19,143858,143859],{},"浏览器输入域名即可访问",[19,143861,143862],{},"首页一定必须是index",{"title":236,"searchDepth":250,"depth":250,"links":143864},[143865],{"id":143767,"depth":250,"text":143768,"children":143866},[143867],{"id":143795,"depth":261,"text":143796},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":143759,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":143874,"title":143875,"body":143876,"description":2048,"extension":2049,"meta":144803,"navigation":2051,"path":144804,"seo":144805,"stem":144806,"__hash__":144807},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":143877,"toc":144786},[143878,143881,143885,143888,143891,143902,143905,143909,143913,143918,143921,143924,143927,143930,143934,143960,143964,143968,143971,143974,143978,144011,144015,144018,144021,144085,144089,144093,144096,144099,144102,144106,144151,144155,144158,144188,144192,144196,144199,144202,144206,144209,144278,144281,144389,144391,144397,144401,144404,144407,144503,144506,144510,144534,144538,144541,144545,144548,144552,144555,144558,144561,144564,144568,144571,144574,144578,144582,144585,144588,144591,144594,144598,144601,144605,144608,144611,144656,144660,144664,144667,144670,144673,144705,144709,144712,144746,144750,144753,144783],[10,143879,143875],{"id":143880},"_18-2d动画与3d转换",[14,143882,143884],{"id":143883},"_181-css3-2d转换","18.1 CSS3 2D转换",[19,143886,143887],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[19,143889,143890],{},"转换（transform）你可以简单理解为变形",[3100,143892,143893,143896,143899],{},[1829,143894,143895],{},"移动：translate",[1829,143897,143898],{},"旋转：rotate",[1829,143900,143901],{},"缩放：scale",[219,143903],{"style":221,"src":143904},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[32,143906,143908],{"id":143907},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[23945,143910,143912],{"id":143911},"_18111-translate介绍","18.1.1.1 translate介绍",[19,143914,143915,143916],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[68,143917,134836],{},[219,143919],{"style":221,"src":143920},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[19,143922,143923],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[19,143925,143926],{},"对于行内元素无效",[19,143928,143929],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[23945,143931,143933],{"id":143932},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[231,143935,143936],{"className":233,"code":140366,"language":235,"meta":236,"style":236},[23,143937,143938,143944,143956],{"__ignoreMap":236},[240,143939,143940,143942],{"class":242,"line":243},[240,143941,330],{"class":253},[240,143943,258],{"class":257},[240,143945,143946,143948,143950,143952,143954],{"class":242,"line":250},[240,143947,72393],{"class":264},[240,143949,268],{"class":257},[240,143951,1274],{"class":264},[240,143953,53498],{"class":264},[240,143955,274],{"class":257},[240,143957,143958],{"class":242,"line":261},[240,143959,312],{"class":257},[32,143961,143963],{"id":143962},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[23945,143965,143967],{"id":143966},"_18121-rotate介绍","18.1.2.1 rotate介绍",[19,143969,143970],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[219,143972],{"style":221,"src":143973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[23945,143975,143977],{"id":143976},"_18122-旋转效果","18.1.2.2 旋转效果",[231,143979,143981],{"className":233,"code":143980,"language":235,"meta":236,"style":236},"div {\n  transform: rotate(45deg);\n}\n",[23,143982,143983,143989,144007],{"__ignoreMap":236},[240,143984,143985,143987],{"class":242,"line":243},[240,143986,330],{"class":253},[240,143988,258],{"class":257},[240,143990,143991,143993,143995,143998,144000,144002,144005],{"class":242,"line":250},[240,143992,138161],{"class":264},[240,143994,268],{"class":257},[240,143996,143997],{"class":264},"rotate",[240,143999,789],{"class":257},[240,144001,2628],{"class":264},[240,144003,144004],{"class":288},"deg",[240,144006,796],{"class":257},[240,144008,144009],{"class":242,"line":261},[240,144010,312],{"class":257},[23945,144012,144014],{"id":144013},"_18123-三角做法","18.1.2.3 三角做法",[19,144016,144017],{},"该下标当经过最外层大盒子时会实现向上反转",[219,144019],{"style":221,"src":144020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[231,144022,144023],{"className":233,"code":136697,"language":235,"meta":236,"style":236},[23,144024,144025,144029,144035,144045,144055,144071,144081],{"__ignoreMap":236},[240,144026,144027],{"class":242,"line":243},[240,144028,136704],{"class":246},[240,144030,144031,144033],{"class":242,"line":250},[240,144032,136709],{"class":436},[240,144034,258],{"class":257},[240,144036,144037,144039,144041,144043],{"class":242,"line":261},[240,144038,280],{"class":264},[240,144040,268],{"class":257},[240,144042,1274],{"class":264},[240,144044,274],{"class":257},[240,144046,144047,144049,144051,144053],{"class":242,"line":277},[240,144048,297],{"class":264},[240,144050,268],{"class":257},[240,144052,1274],{"class":264},[240,144054,274],{"class":257},[240,144056,144057,144059,144061,144063,144065,144067,144069],{"class":242,"line":294},[240,144058,72813],{"class":264},[240,144060,268],{"class":257},[240,144062,2546],{"class":264},[240,144064,289],{"class":288},[240,144066,53463],{"class":264},[240,144068,65914],{"class":264},[240,144070,274],{"class":257},[240,144072,144073,144075,144077,144079],{"class":242,"line":309},[240,144074,136752],{"class":264},[240,144076,268],{"class":257},[240,144078,1799],{"class":264},[240,144080,274],{"class":257},[240,144082,144083],{"class":242,"line":529},[240,144084,312],{"class":257},[32,144086,144088],{"id":144087},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[23945,144090,144092],{"id":144091},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[19,144094,144095],{},"设置中心点",[219,144097],{"style":221,"src":144098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[19,144100,144101],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[23945,144103,144105],{"id":144104},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[231,144107,144109],{"className":233,"code":144108,"language":235,"meta":236,"style":236},"\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",[23,144110,144111,144116,144122,144137,144142,144147],{"__ignoreMap":236},[240,144112,144113],{"class":242,"line":243},[240,144114,144115],{"class":246},"\u002F* 转换中心点 *\u002F\n",[240,144117,144118,144120],{"class":242,"line":250},[240,144119,330],{"class":253},[240,144121,258],{"class":257},[240,144123,144124,144127,144129,144131,144133,144135],{"class":242,"line":261},[240,144125,144126],{"class":264},"  transform-origin",[240,144128,268],{"class":257},[240,144130,971],{"class":264},[240,144132,1037],{"class":264},[240,144134,132040],{"class":257},[240,144136,136850],{"class":246},[240,144138,144139],{"class":242,"line":277},[240,144140,144141],{"class":246},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[240,144143,144144],{"class":242,"line":294},[240,144145,144146],{"class":246},"  \u002F* transform-origin: left top; *\u002F\n",[240,144148,144149],{"class":242,"line":309},[240,144150,312],{"class":257},[23945,144152,144154],{"id":144153},"_18133-旋转案例","18.1.3.3 旋转案例",[219,144156],{"style":221,"src":144157},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[231,144159,144160],{"className":233,"code":143980,"language":235,"meta":236,"style":236},[23,144161,144162,144168,144184],{"__ignoreMap":236},[240,144163,144164,144166],{"class":242,"line":243},[240,144165,330],{"class":253},[240,144167,258],{"class":257},[240,144169,144170,144172,144174,144176,144178,144180,144182],{"class":242,"line":250},[240,144171,138161],{"class":264},[240,144173,268],{"class":257},[240,144175,143997],{"class":264},[240,144177,789],{"class":257},[240,144179,2628],{"class":264},[240,144181,144004],{"class":288},[240,144183,796],{"class":257},[240,144185,144186],{"class":242,"line":261},[240,144187,312],{"class":257},[32,144189,144191],{"id":144190},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[23945,144193,144195],{"id":144194},"_18141-scale介绍","18.1.4.1 scale介绍",[19,144197,144198],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[219,144200],{"style":221,"src":144201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[23945,144203,144205],{"id":144204},"_18142-分页按钮","18.1.4.2 分页按钮",[219,144207],{"style":221,"src":144208},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[231,144210,144212],{"className":233,"code":144211,"language":235,"meta":236,"style":236},"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",[23,144213,144214,144220,144236,144240,144244,144249,144255,144269,144274],{"__ignoreMap":236},[240,144215,144216,144218],{"class":242,"line":243},[240,144217,330],{"class":253},[240,144219,258],{"class":257},[240,144221,144222,144224,144226,144229,144231,144234],{"class":242,"line":250},[240,144223,138161],{"class":264},[240,144225,268],{"class":257},[240,144227,144228],{"class":264},"scale",[240,144230,789],{"class":257},[240,144232,144233],{"class":264},"1.2",[240,144235,796],{"class":257},[240,144237,144238],{"class":242,"line":261},[240,144239,312],{"class":257},[240,144241,144242],{"class":242,"line":277},[240,144243,137638],{"class":257},[240,144245,144246],{"class":242,"line":294},[240,144247,144248],{"class":246},"\u002F* 2D 缩放 *\u002F\n",[240,144250,144251,144253],{"class":242,"line":309},[240,144252,330],{"class":253},[240,144254,258],{"class":257},[240,144256,144257,144259,144261,144263,144265,144267],{"class":242,"line":529},[240,144258,138161],{"class":264},[240,144260,268],{"class":257},[240,144262,144228],{"class":264},[240,144264,789],{"class":257},[240,144266,144233],{"class":264},[240,144268,796],{"class":257},[240,144270,144271],{"class":242,"line":549},[240,144272,144273],{"class":246},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[240,144275,144276],{"class":242,"line":569},[240,144277,312],{"class":257},[19,144279,144280],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[231,144282,144284],{"className":233,"code":144283,"language":235,"meta":236,"style":236},"\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",[23,144285,144286,144291,144301,144322,144343,144347,144352,144358,144385],{"__ignoreMap":236},[240,144287,144288],{"class":242,"line":243},[240,144289,144290],{"class":246},"\u002F* 定义动画 *\u002F\n",[240,144292,144293,144296,144299],{"class":242,"line":250},[240,144294,144295],{"class":288},"@keyframes",[240,144297,144298],{"class":792}," move",[240,144300,258],{"class":257},[240,144302,144303,144306,144308,144310,144312,144315,144317,144319],{"class":242,"line":261},[240,144304,144305],{"class":436},"  0%",[240,144307,81721],{"class":257},[240,144309,50080],{"class":264},[240,144311,268],{"class":257},[240,144313,144314],{"class":264},"translateX",[240,144316,789],{"class":257},[240,144318,1274],{"class":264},[240,144320,144321],{"class":257},"); }\n",[240,144323,144324,144327,144329,144331,144333,144335,144337,144339,144341],{"class":242,"line":277},[240,144325,144326],{"class":436},"  100%",[240,144328,81721],{"class":257},[240,144330,50080],{"class":264},[240,144332,268],{"class":257},[240,144334,144314],{"class":264},[240,144336,789],{"class":257},[240,144338,285],{"class":264},[240,144340,289],{"class":288},[240,144342,144321],{"class":257},[240,144344,144345],{"class":242,"line":294},[240,144346,312],{"class":257},[240,144348,144349],{"class":242,"line":309},[240,144350,144351],{"class":246},"\u002F* 调用动画 *\u002F\n",[240,144353,144354,144356],{"class":242,"line":529},[240,144355,330],{"class":253},[240,144357,258],{"class":257},[240,144359,144360,144363,144365,144367,144369,144371,144373,144375,144377,144380,144383],{"class":242,"line":549},[240,144361,144362],{"class":264},"  animation",[240,144364,268],{"class":257},[240,144366,136863],{"class":264},[240,144368,27065],{"class":264},[240,144370,2793],{"class":288},[240,144372,80594],{"class":264},[240,144374,6045],{"class":264},[240,144376,2793],{"class":288},[240,144378,144379],{"class":264}," infinite",[240,144381,144382],{"class":264}," alternate",[240,144384,274],{"class":257},[240,144386,144387],{"class":242,"line":569},[240,144388,312],{"class":257},[19,144390,144280],{},[231,144392,144395],{"className":144393,"code":144394,"language":7139},[7137],"\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",[23,144396,144394],{"__ignoreMap":236},[23945,144398,144400],{"id":144399},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[19,144402,144403],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[219,144405],{"style":221,"src":144406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[231,144408,144409],{"className":233,"code":144283,"language":235,"meta":236,"style":236},[23,144410,144411,144415,144423,144441,144461,144465,144469,144475,144499],{"__ignoreMap":236},[240,144412,144413],{"class":242,"line":243},[240,144414,144290],{"class":246},[240,144416,144417,144419,144421],{"class":242,"line":250},[240,144418,144295],{"class":288},[240,144420,144298],{"class":792},[240,144422,258],{"class":257},[240,144424,144425,144427,144429,144431,144433,144435,144437,144439],{"class":242,"line":261},[240,144426,144305],{"class":436},[240,144428,81721],{"class":257},[240,144430,50080],{"class":264},[240,144432,268],{"class":257},[240,144434,144314],{"class":264},[240,144436,789],{"class":257},[240,144438,1274],{"class":264},[240,144440,144321],{"class":257},[240,144442,144443,144445,144447,144449,144451,144453,144455,144457,144459],{"class":242,"line":277},[240,144444,144326],{"class":436},[240,144446,81721],{"class":257},[240,144448,50080],{"class":264},[240,144450,268],{"class":257},[240,144452,144314],{"class":264},[240,144454,789],{"class":257},[240,144456,285],{"class":264},[240,144458,289],{"class":288},[240,144460,144321],{"class":257},[240,144462,144463],{"class":242,"line":294},[240,144464,312],{"class":257},[240,144466,144467],{"class":242,"line":309},[240,144468,144351],{"class":246},[240,144470,144471,144473],{"class":242,"line":529},[240,144472,330],{"class":253},[240,144474,258],{"class":257},[240,144476,144477,144479,144481,144483,144485,144487,144489,144491,144493,144495,144497],{"class":242,"line":549},[240,144478,144362],{"class":264},[240,144480,268],{"class":257},[240,144482,136863],{"class":264},[240,144484,27065],{"class":264},[240,144486,2793],{"class":288},[240,144488,80594],{"class":264},[240,144490,6045],{"class":264},[240,144492,2793],{"class":288},[240,144494,144379],{"class":264},[240,144496,144382],{"class":264},[240,144498,274],{"class":257},[240,144500,144501],{"class":242,"line":569},[240,144502,312],{"class":257},[19,144504,144505],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[32,144507,144509],{"id":144508},"_1823-知识点回顾","18.2.3 知识点回顾",[231,144511,144512],{"className":233,"code":874,"language":235,"meta":236,"style":236},[23,144513,144514,144520,144530],{"__ignoreMap":236},[240,144515,144516,144518],{"class":242,"line":243},[240,144517,330],{"class":253},[240,144519,258],{"class":257},[240,144521,144522,144524,144526,144528],{"class":242,"line":250},[240,144523,887],{"class":264},[240,144525,268],{"class":257},[240,144527,892],{"class":264},[240,144529,274],{"class":257},[240,144531,144532],{"class":242,"line":261},[240,144533,312],{"class":257},[14,144535,144537],{"id":144536},"_183-3d-转换","18.3 3D 转换",[19,144539,144540],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[32,144542,144544],{"id":144543},"_1831-坐标轴认识","18.3.1 坐标轴认识",[219,144546],{"style":221,"src":144547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[32,144549,144551],{"id":144550},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[219,144553],{"style":221,"src":144554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[19,144556,144557],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[19,144559,144560],{},"translate3d的效果需要搭配透视perspective来使用",[219,144562],{"style":221,"src":144563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[32,144565,144567],{"id":144566},"_1833-透视-perspective","18.3.3 透视 perspective",[219,144569],{"style":221,"src":144570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[19,144572,144573],{},"透视写在父盒子上，单位为像素",[32,144575,144577],{"id":144576},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[23945,144579,144581],{"id":144580},"_18341-分开解释","18.3.4.1 分开解释",[219,144583],{"style":221,"src":144584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[219,144586],{"style":221,"src":144587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[219,144589],{"style":221,"src":144590},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[19,144592,144593],{},"总结来说就是左手原则",[23945,144595,144597],{"id":144596},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[219,144599],{"style":221,"src":144600},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[32,144602,144604],{"id":144603},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[219,144606],{"style":221,"src":144607},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[219,144609],{"style":221,"src":144610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[231,144612,144614],{"className":233,"code":144613,"language":235,"meta":236,"style":236},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[23,144615,144616,144622,144635,144652],{"__ignoreMap":236},[240,144617,144618,144620],{"class":242,"line":243},[240,144619,330],{"class":253},[240,144621,258],{"class":257},[240,144623,144624,144627,144629,144631,144633],{"class":242,"line":250},[240,144625,144626],{"class":264},"  perspective",[240,144628,268],{"class":257},[240,144630,66997],{"class":264},[240,144632,289],{"class":288},[240,144634,274],{"class":257},[240,144636,144637,144639,144641,144644,144646,144648,144650],{"class":242,"line":261},[240,144638,138161],{"class":264},[240,144640,268],{"class":257},[240,144642,144643],{"class":264},"rotateX",[240,144645,789],{"class":257},[240,144647,2628],{"class":264},[240,144649,144004],{"class":288},[240,144651,796],{"class":257},[240,144653,144654],{"class":242,"line":277},[240,144655,312],{"class":257},[32,144657,144659],{"id":144658},"_1836-案例","18.3.6 案例",[23945,144661,144663],{"id":144662},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[219,144665],{"style":221,"src":144666},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[219,144668],{"style":221,"src":144669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[219,144671],{"style":221,"src":144672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[231,144674,144676],{"className":233,"code":144675,"language":235,"meta":236,"style":236},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[23,144677,144678,144683,144689,144701],{"__ignoreMap":236},[240,144679,144680],{"class":242,"line":243},[240,144681,144682],{"class":246},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[240,144684,144685,144687],{"class":242,"line":250},[240,144686,135174],{"class":436},[240,144688,258],{"class":257},[240,144690,144691,144693,144695,144697,144699],{"class":242,"line":261},[240,144692,144626],{"class":264},[240,144694,268],{"class":257},[240,144696,66997],{"class":264},[240,144698,289],{"class":288},[240,144700,274],{"class":257},[240,144702,144703],{"class":242,"line":277},[240,144704,312],{"class":257},[23945,144706,144708],{"id":144707},"_18362-3d导航栏","18.3.6.2 3D导航栏",[219,144710],{"style":221,"src":144711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[231,144713,144714],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,144715,144716,144720,144734,144738],{"__ignoreMap":236},[240,144717,144718],{"class":242,"line":243},[240,144719,132288],{"class":246},[240,144721,144722,144724,144726,144728,144730,144732],{"class":242,"line":250},[240,144723,431],{"class":257},[240,144725,330],{"class":253},[240,144727,437],{"class":436},[240,144729,440],{"class":257},[240,144731,132301],{"class":443},[240,144733,447],{"class":257},[240,144735,144736],{"class":242,"line":261},[240,144737,132308],{"class":257},[240,144739,144740,144742,144744],{"class":242,"line":277},[240,144741,592],{"class":257},[240,144743,330],{"class":253},[240,144745,447],{"class":257},[23945,144747,144749],{"id":144748},"_18363-旋转木马","18.3.6.3 旋转木马",[219,144751],{"style":221,"src":144752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[231,144754,144755],{"className":233,"code":143980,"language":235,"meta":236,"style":236},[23,144756,144757,144763,144779],{"__ignoreMap":236},[240,144758,144759,144761],{"class":242,"line":243},[240,144760,330],{"class":253},[240,144762,258],{"class":257},[240,144764,144765,144767,144769,144771,144773,144775,144777],{"class":242,"line":250},[240,144766,138161],{"class":264},[240,144768,268],{"class":257},[240,144770,143997],{"class":264},[240,144772,789],{"class":257},[240,144774,2628],{"class":264},[240,144776,144004],{"class":288},[240,144778,796],{"class":257},[240,144780,144781],{"class":242,"line":261},[240,144782,312],{"class":257},[2019,144784,144785],{},"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":236,"searchDepth":250,"depth":250,"links":144787},[144788,144795],{"id":143883,"depth":250,"text":143884,"children":144789},[144790,144791,144792,144793,144794],{"id":143907,"depth":261,"text":143908},{"id":143962,"depth":261,"text":143963},{"id":144087,"depth":261,"text":144088},{"id":144190,"depth":261,"text":144191},{"id":144508,"depth":261,"text":144509},{"id":144536,"depth":250,"text":144537,"children":144796},[144797,144798,144799,144800,144801,144802],{"id":144543,"depth":261,"text":144544},{"id":144550,"depth":261,"text":144551},{"id":144566,"depth":261,"text":144567},{"id":144576,"depth":261,"text":144577},{"id":144603,"depth":261,"text":144604},{"id":144658,"depth":261,"text":144659},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":143875,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":144809,"title":144810,"body":144811,"description":2048,"extension":2049,"meta":145014,"navigation":2051,"path":145015,"seo":145016,"stem":145017,"__hash__":145018},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":144812,"toc":145003},[144813,144816,144820,144823,144826,144830,144833,144836,144839,144843,144846,144850,144853,144857,144860,144864,144878,144882,144907,144910,144913,144930,144934,144938,144941,144944,144948,144951,144954,144972,144976,144979,144993,144997,145000],[10,144814,144810],{"id":144815},"_19-移动端基础-前缀现状与视口",[14,144817,144819],{"id":144818},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[219,144821],{"style":221,"src":144822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[19,144824,144825],{},"意思就是加个前缀，增加兼容性",[14,144827,144829],{"id":144828},"_192-移动端现状认识","19.2 移动端现状认识",[219,144831],{"style":221,"src":144832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[19,144834,144835],{},"调试方法：",[219,144837],{"style":221,"src":144838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[14,144840,144842],{"id":144841},"_193-视口","19.3 视口",[19,144844,144845],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[32,144847,144849],{"id":144848},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[219,144851],{"style":221,"src":144852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[32,144854,144856],{"id":144855},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[219,144858],{"style":221,"src":144859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[32,144861,144863],{"id":144862},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[3100,144865,144866,144869,144872,144875],{},[1829,144867,144868],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[1829,144870,144871],{},"理想视口，对设备来讲，是最理想的视口尺寸",[1829,144873,144874],{},"需要手动添写meta视口标签通知浏览器操作",[1829,144876,144877],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[32,144879,144881],{"id":144880},"_1934-meta视口标签","19.3.4 meta视口标签",[231,144883,144885],{"className":417,"code":144884,"language":419,"meta":236,"style":236},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[23,144886,144887],{"__ignoreMap":236},[240,144888,144889,144891,144893,144895,144897,144899,144901,144903,144905],{"class":242,"line":243},[240,144890,431],{"class":257},[240,144892,53288],{"class":253},[240,144894,16869],{"class":436},[240,144896,440],{"class":257},[240,144898,53335],{"class":443},[240,144900,53315],{"class":436},[240,144902,440],{"class":257},[240,144904,53342],{"class":443},[240,144906,447],{"class":257},[219,144908],{"style":221,"src":144909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[19,144911,144912],{},"标准视口设置：",[1826,144914,144915,144918,144921,144924,144927],{},[1829,144916,144917],{},"视口宽度和设备保持一致",[1829,144919,144920],{},"视口的默认缩放比例1.0",[1829,144922,144923],{},"不允许用户自行缩放",[1829,144925,144926],{},"最大允许的缩放比例1.0",[1829,144928,144929],{},"最小允许的缩放比例1.0",[32,144931,144933],{"id":144932},"_1935-二倍图","19.3.5 二倍图",[23945,144935,144937],{"id":144936},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[219,144939],{"style":221,"src":144940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[219,144942],{"style":221,"src":144943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[23945,144945,144947],{"id":144946},"_19352-多倍图","19.3.5.2 多倍图",[219,144949],{"style":221,"src":144950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[19,144952,144953],{},"二倍图法，代码如下：",[231,144955,144957],{"className":233,"code":144956,"language":235,"meta":236,"style":236},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[23,144958,144959,144964],{"__ignoreMap":236},[240,144960,144961],{"class":242,"line":243},[240,144962,144963],{"class":246},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[240,144965,144966,144969],{"class":242,"line":250},[240,144967,144968],{"class":253},"background-size",[240,144970,144971],{"class":257},": 50% 50%;\n",[23945,144973,144975],{"id":144974},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[219,144977],{"style":221,"src":144978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[1826,144980,144981,144984,144987,144990],{},[1829,144982,144983],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[1829,144985,144986],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[1829,144988,144989],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[1829,144991,144992],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[23945,144994,144996],{"id":144995},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[219,144998],{"style":221,"src":144999},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[2019,145001,145002],{},"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":236,"searchDepth":250,"depth":250,"links":145004},[145005,145006,145007],{"id":144818,"depth":250,"text":144819},{"id":144828,"depth":250,"text":144829},{"id":144841,"depth":250,"text":144842,"children":145008},[145009,145010,145011,145012,145013],{"id":144848,"depth":261,"text":144849},{"id":144855,"depth":261,"text":144856},{"id":144862,"depth":261,"text":144863},{"id":144880,"depth":261,"text":144881},{"id":144932,"depth":261,"text":144933},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":144810,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":145020,"title":145021,"body":145022,"description":2048,"extension":2049,"meta":145899,"navigation":2051,"path":145900,"seo":145901,"stem":145902,"__hash__":145903},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":145023,"toc":145883},[145024,145027,145031,145038,145041,145048,145051,145056,145059,145063,145067,145074,145077,145080,145084,145087,145090,145093,145096,145099,145103,145106,145110,145112,145115,145118,145121,145124,145126,145129,145131,145161,145163,145193,145197,145200,145204,145207,145224,145227,145230,145306,145308,145311,145314,145317,145320,145322,145325,145328,145332,145354,145357,145360,145364,145367,145373,145376,145380,145383,145386,145390,145393,145396,145399,145403,145406,145409,145412,145415,145419,145422,145426,145433,145436,145439,145442,145445,145455,145458,145461,145468,145471,145475,145478,145481,145485,145488,145491,145494,145539,145542,145545,145548,145550,145679,145681,145719,145722,145725,145727,145845,145847,145881],[10,145025,145021],{"id":145026},"_20-移动端布局实战上篇",[14,145028,145030],{"id":145029},"_201-移动端主流方案","20.1 移动端主流方案",[1826,145032,145033],{},[1829,145034,145035],{},[68,145036,145037],{},"单独移动端页面（主流）",[219,145039],{"style":221,"src":145040},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[1826,145042,145043],{"start":250},[1829,145044,145045],{},[68,145046,145047],{},"响应式兼容PC移动端",[219,145049],{"style":221,"src":145050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[1826,145052,145053],{"start":261},[1829,145054,145055],{},"两种页面选型布局方式",[219,145057],{"style":221,"src":145058},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[14,145060,145062],{"id":145061},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[32,145064,145066],{"id":145065},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[19,145068,145069,145070],{},"官网地址： ",[254,145071,145072],{"href":145072,"rel":145073},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[25811],[219,145075],{"style":221,"src":145076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[219,145078],{"style":221,"src":145079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[32,145081,145083],{"id":145082},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[219,145085],{"style":221,"src":145086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[219,145088],{"style":221,"src":145089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[19,145091,145092],{},"去除高亮：",[19,145094,145095],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[19,145097,145098],{},"-webkit- tap-highlight-color: transparent;",[14,145100,145102],{"id":145101},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[219,145104],{"style":221,"src":145105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[14,145107,145109],{"id":145108},"_204-流式布局案例","20.4 流式布局案例",[19,145111,87],{},[19,145113,145114],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[19,145116,145117],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[19,145119,145120],{},"图片格式：",[219,145122],{"style":221,"src":145123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[19,145125,137220],{},[219,145127],{"style":221,"src":145128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[19,145130,141547],{},[231,145132,145133],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,145134,145135],{"__ignoreMap":236},[240,145136,145137,145139,145141,145143,145145,145147,145149,145151,145153,145155,145157,145159],{"class":242,"line":243},[240,145138,431],{"class":257},[240,145140,219],{"class":253},[240,145142,57172],{"class":436},[240,145144,440],{"class":257},[240,145146,135694],{"class":443},[240,145148,57180],{"class":436},[240,145150,440],{"class":257},[240,145152,135701],{"class":443},[240,145154,135704],{"class":436},[240,145156,440],{"class":257},[240,145158,135709],{"class":443},[240,145160,447],{"class":257},[19,145162,141636],{},[231,145164,145165],{"className":417,"code":135679,"language":419,"meta":236,"style":236},[23,145166,145167],{"__ignoreMap":236},[240,145168,145169,145171,145173,145175,145177,145179,145181,145183,145185,145187,145189,145191],{"class":242,"line":243},[240,145170,431],{"class":257},[240,145172,219],{"class":253},[240,145174,57172],{"class":436},[240,145176,440],{"class":257},[240,145178,135694],{"class":443},[240,145180,57180],{"class":436},[240,145182,440],{"class":257},[240,145184,135701],{"class":443},[240,145186,135704],{"class":436},[240,145188,440],{"class":257},[240,145190,135709],{"class":443},[240,145192,447],{"class":257},[14,145194,145196],{"id":145195},"_205-flex布局","20.5 flex布局",[219,145198],{"style":221,"src":145199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[32,145201,145203],{"id":145202},"_2051-布局原理","20.5.1 布局原理",[19,145205,145206],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[3100,145208,145209,145212,145215,145218,145221],{},[1829,145210,145211],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[1829,145213,145214],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[1829,145216,145217],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[1829,145219,145220],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[1829,145222,145223],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[19,145225,145226],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[19,145228,145229],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[231,145231,145233],{"className":233,"code":145232,"language":235,"meta":236,"style":236},"\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",[23,145234,145235,145240,145247,145257,145269,145280,145291,145302],{"__ignoreMap":236},[240,145236,145237],{"class":242,"line":243},[240,145238,145239],{"class":246},"\u002F* Flex 弹性布局 *\u002F\n",[240,145241,145242,145245],{"class":242,"line":250},[240,145243,145244],{"class":436},".container",[240,145246,258],{"class":257},[240,145248,145249,145251,145253,145255],{"class":242,"line":261},[240,145250,265],{"class":264},[240,145252,268],{"class":257},[240,145254,53420],{"class":264},[240,145256,274],{"class":257},[240,145258,145259,145262,145264,145267],{"class":242,"line":277},[240,145260,145261],{"class":264},"  flex-direction",[240,145263,268],{"class":257},[240,145265,145266],{"class":264},"row",[240,145268,274],{"class":257},[240,145270,145271,145274,145276,145278],{"class":242,"line":294},[240,145272,145273],{"class":264},"  justify-content",[240,145275,268],{"class":257},[240,145277,53607],{"class":264},[240,145279,274],{"class":257},[240,145281,145282,145285,145287,145289],{"class":242,"line":309},[240,145283,145284],{"class":264},"  align-items",[240,145286,268],{"class":257},[240,145288,971],{"class":264},[240,145290,274],{"class":257},[240,145292,145293,145296,145298,145300],{"class":242,"line":529},[240,145294,145295],{"class":264},"  flex-wrap",[240,145297,268],{"class":257},[240,145299,80524],{"class":264},[240,145301,274],{"class":257},[240,145303,145304],{"class":242,"line":549},[240,145305,312],{"class":257},[19,145307,72376],{},[19,145309,145310],{},".form-item .male-label {",[19,145312,145313],{},"   margin-right: 20px;",[19,145315,145316],{},"   display: inline-flex;",[19,145318,145319],{},"   align-items: center;",[19,145321,3040],{},[219,145323],{"style":221,"src":145324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[219,145326],{"style":221,"src":145327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[32,145329,145331],{"id":145330},"_2052-常见父项属性","20.5.2 常见父项属性",[1826,145333,145334,145337,145340,145343,145346,145349,145352],{},[1829,145335,145336],{},"flex-direction：设置主轴的方向",[1829,145338,145339],{},"justify-content：设置主轴上的子元素排列方式",[1829,145341,145342],{},"flex-wrap：设置子元素是否换行",[1829,145344,145345],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[1829,145347,145348],{},"align-items：设置侧轴上的子元素排列方式（单行）",[1829,145350,145351],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[1829,145353,145336],{},[219,145355],{"style":221,"src":145356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[219,145358],{"style":221,"src":145359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[1826,145361,145362],{"start":250},[1829,145363,145339],{},[219,145365],{"style":221,"src":145366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[19,145368,145369,145372],{},[23,145370,145371],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[19,145374,145375],{},"跟着主轴走",[1826,145377,145378],{"start":261},[1829,145379,145342],{},[219,145381],{"style":221,"src":145382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[19,145384,145385],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[1826,145387,145388],{"start":277},[1829,145389,145345],{},[219,145391],{"style":221,"src":145392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[19,145394,145395],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[19,145397,145398],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[1826,145400,145401],{"start":294},[1829,145402,145348],{},[219,145404],{"style":221,"src":145405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[19,145407,145408],{},"align-items与align-content之间的区别：",[19,145410,145411],{},"单找items，多找content",[219,145413],{"style":221,"src":145414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[1826,145416,145417],{"start":309},[1829,145418,145351],{},[219,145420],{"style":221,"src":145421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[32,145423,145425],{"id":145424},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[1826,145427,145428],{},[1829,145429,145430],{},[68,145431,145432],{},"flex 属性",[19,145434,145435],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[219,145437],{"style":221,"src":145438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[19,145440,145441],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[19,145443,145444],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[1826,145446,145447],{"start":250},[1829,145448,145449,15744,145452],{},[68,145450,145451],{},"align-self",[68,145453,145454],{},"控制子项自己在侧轴上的排列方式",[219,145456],{"style":221,"src":145457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[19,145459,145460],{},"单个子盒子在父盒子侧轴上的排列方式",[1826,145462,145463],{"start":261},[1829,145464,145465,145467],{},[68,145466,97210],{}," 属性定义项目的排列顺序",[219,145469],{"style":221,"src":145470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[32,145472,145474],{"id":145473},"_2054-背景线性渐变","20.5.4 背景线性渐变",[219,145476],{"style":221,"src":145477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[19,145479,145480],{},"必须要添加浏览器的私有前缀",[32,145482,145484],{"id":145483},"_2055-携程网首页案例","20.5.5 携程网首页案例",[19,145486,145487],{},"学到最重要的知识：",[19,145489,145490],{},"flex处理这样的布局思路",[219,145492],{"style":221,"src":145493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[231,145495,145497],{"className":233,"code":145496,"language":235,"meta":236,"style":236},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[23,145498,145499,145505,145515,145525,145535],{"__ignoreMap":236},[240,145500,145501,145503],{"class":242,"line":243},[240,145502,145244],{"class":436},[240,145504,258],{"class":257},[240,145506,145507,145509,145511,145513],{"class":242,"line":250},[240,145508,265],{"class":264},[240,145510,268],{"class":257},[240,145512,53420],{"class":264},[240,145514,274],{"class":257},[240,145516,145517,145519,145521,145523],{"class":242,"line":261},[240,145518,145273],{"class":264},[240,145520,268],{"class":257},[240,145522,971],{"class":264},[240,145524,274],{"class":257},[240,145526,145527,145529,145531,145533],{"class":242,"line":277},[240,145528,145284],{"class":264},[240,145530,268],{"class":257},[240,145532,971],{"class":264},[240,145534,274],{"class":257},[240,145536,145537],{"class":242,"line":294},[240,145538,312],{"class":257},[19,145540,145541],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[19,145543,145544],{},"使用属性选择器",[219,145546],{"style":221,"src":145547},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[19,145549,70812],{},[231,145551,145553],{"className":417,"code":145552,"language":419,"meta":236,"style":236},"\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",[23,145554,145555,145560,145574,145579,145599,145604,145623,145628,145647,145652,145671],{"__ignoreMap":236},[240,145556,145557],{"class":242,"line":243},[240,145558,145559],{"class":246},"\u003C!-- 携程网移动端案例结构 -->\n",[240,145561,145562,145564,145566,145568,145570,145572],{"class":242,"line":250},[240,145563,431],{"class":257},[240,145565,330],{"class":253},[240,145567,437],{"class":436},[240,145569,440],{"class":257},[240,145571,94236],{"class":443},[240,145573,447],{"class":257},[240,145575,145576],{"class":242,"line":261},[240,145577,145578],{"class":246},"  \u003C!-- 搜索栏 -->\n",[240,145580,145581,145583,145585,145587,145589,145592,145595,145597],{"class":242,"line":277},[240,145582,452],{"class":257},[240,145584,330],{"class":253},[240,145586,437],{"class":436},[240,145588,440],{"class":257},[240,145590,145591],{"class":443},"\"search-index\"",[240,145593,145594],{"class":257},">...\u003C\u002F",[240,145596,330],{"class":253},[240,145598,447],{"class":257},[240,145600,145601],{"class":242,"line":294},[240,145602,145603],{"class":246},"  \u003C!-- 焦点图 -->\n",[240,145605,145606,145608,145610,145612,145614,145617,145619,145621],{"class":242,"line":309},[240,145607,452],{"class":257},[240,145609,330],{"class":253},[240,145611,437],{"class":436},[240,145613,440],{"class":257},[240,145615,145616],{"class":443},"\"focus\"",[240,145618,145594],{"class":257},[240,145620,330],{"class":253},[240,145622,447],{"class":257},[240,145624,145625],{"class":242,"line":529},[240,145626,145627],{"class":246},"  \u003C!-- 主导航 -->\n",[240,145629,145630,145632,145634,145636,145638,145641,145643,145645],{"class":242,"line":549},[240,145631,452],{"class":257},[240,145633,330],{"class":253},[240,145635,437],{"class":436},[240,145637,440],{"class":257},[240,145639,145640],{"class":443},"\"local-nav\"",[240,145642,145594],{"class":257},[240,145644,330],{"class":253},[240,145646,447],{"class":257},[240,145648,145649],{"class":242,"line":569},[240,145650,145651],{"class":246},"  \u003C!-- 子导航 -->\n",[240,145653,145654,145656,145658,145660,145662,145665,145667,145669],{"class":242,"line":589},[240,145655,452],{"class":257},[240,145657,330],{"class":253},[240,145659,437],{"class":436},[240,145661,440],{"class":257},[240,145663,145664],{"class":443},"\"nav-common\"",[240,145666,145594],{"class":257},[240,145668,330],{"class":253},[240,145670,447],{"class":257},[240,145672,145673,145675,145677],{"class":242,"line":715},[240,145674,592],{"class":257},[240,145676,330],{"class":253},[240,145678,447],{"class":257},[19,145680,72376],{},[231,145682,145683],{"className":233,"code":138629,"language":235,"meta":236,"style":236},[23,145684,145685,145699,145715],{"__ignoreMap":236},[240,145686,145687,145689,145691,145693,145695,145697],{"class":242,"line":243},[240,145688,55756],{"class":253},[240,145690,2985],{"class":257},[240,145692,105017],{"class":436},[240,145694,440],{"class":288},[240,145696,64622],{"class":443},[240,145698,138646],{"class":257},[240,145700,145701,145703,145705,145707,145709,145711,145713],{"class":242,"line":250},[240,145702,72813],{"class":264},[240,145704,268],{"class":257},[240,145706,1643],{"class":264},[240,145708,289],{"class":288},[240,145710,53463],{"class":264},[240,145712,131757],{"class":264},[240,145714,274],{"class":257},[240,145716,145717],{"class":242,"line":261},[240,145718,312],{"class":257},[19,145720,145721],{},"总代码和效果展示：",[219,145723],{"style":221,"src":145724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[19,145726,70812],{},[231,145728,145729],{"className":417,"code":145552,"language":419,"meta":236,"style":236},[23,145730,145731,145735,145749,145753,145771,145775,145793,145797,145815,145819,145837],{"__ignoreMap":236},[240,145732,145733],{"class":242,"line":243},[240,145734,145559],{"class":246},[240,145736,145737,145739,145741,145743,145745,145747],{"class":242,"line":250},[240,145738,431],{"class":257},[240,145740,330],{"class":253},[240,145742,437],{"class":436},[240,145744,440],{"class":257},[240,145746,94236],{"class":443},[240,145748,447],{"class":257},[240,145750,145751],{"class":242,"line":261},[240,145752,145578],{"class":246},[240,145754,145755,145757,145759,145761,145763,145765,145767,145769],{"class":242,"line":277},[240,145756,452],{"class":257},[240,145758,330],{"class":253},[240,145760,437],{"class":436},[240,145762,440],{"class":257},[240,145764,145591],{"class":443},[240,145766,145594],{"class":257},[240,145768,330],{"class":253},[240,145770,447],{"class":257},[240,145772,145773],{"class":242,"line":294},[240,145774,145603],{"class":246},[240,145776,145777,145779,145781,145783,145785,145787,145789,145791],{"class":242,"line":309},[240,145778,452],{"class":257},[240,145780,330],{"class":253},[240,145782,437],{"class":436},[240,145784,440],{"class":257},[240,145786,145616],{"class":443},[240,145788,145594],{"class":257},[240,145790,330],{"class":253},[240,145792,447],{"class":257},[240,145794,145795],{"class":242,"line":529},[240,145796,145627],{"class":246},[240,145798,145799,145801,145803,145805,145807,145809,145811,145813],{"class":242,"line":549},[240,145800,452],{"class":257},[240,145802,330],{"class":253},[240,145804,437],{"class":436},[240,145806,440],{"class":257},[240,145808,145640],{"class":443},[240,145810,145594],{"class":257},[240,145812,330],{"class":253},[240,145814,447],{"class":257},[240,145816,145817],{"class":242,"line":569},[240,145818,145651],{"class":246},[240,145820,145821,145823,145825,145827,145829,145831,145833,145835],{"class":242,"line":589},[240,145822,452],{"class":257},[240,145824,330],{"class":253},[240,145826,437],{"class":436},[240,145828,440],{"class":257},[240,145830,145664],{"class":443},[240,145832,145594],{"class":257},[240,145834,330],{"class":253},[240,145836,447],{"class":257},[240,145838,145839,145841,145843],{"class":242,"line":715},[240,145840,592],{"class":257},[240,145842,330],{"class":253},[240,145844,447],{"class":257},[19,145846,72376],{},[231,145848,145849],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,145850,145851,145855,145869,145873],{"__ignoreMap":236},[240,145852,145853],{"class":242,"line":243},[240,145854,132288],{"class":246},[240,145856,145857,145859,145861,145863,145865,145867],{"class":242,"line":250},[240,145858,431],{"class":257},[240,145860,330],{"class":253},[240,145862,437],{"class":436},[240,145864,440],{"class":257},[240,145866,132301],{"class":443},[240,145868,447],{"class":257},[240,145870,145871],{"class":242,"line":261},[240,145872,132308],{"class":257},[240,145874,145875,145877,145879],{"class":242,"line":277},[240,145876,592],{"class":257},[240,145878,330],{"class":253},[240,145880,447],{"class":257},[2019,145882,139578],{},{"title":236,"searchDepth":250,"depth":250,"links":145884},[145885,145886,145890,145891,145892],{"id":145029,"depth":250,"text":145030},{"id":145061,"depth":250,"text":145062,"children":145887},[145888,145889],{"id":145065,"depth":261,"text":145066},{"id":145082,"depth":261,"text":145083},{"id":145101,"depth":250,"text":145102},{"id":145108,"depth":250,"text":145109},{"id":145195,"depth":250,"text":145196,"children":145893},[145894,145895,145896,145897,145898],{"id":145202,"depth":261,"text":145203},{"id":145330,"depth":261,"text":145331},{"id":145424,"depth":261,"text":145425},{"id":145473,"depth":261,"text":145474},{"id":145483,"depth":261,"text":145484},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":145021,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":145905,"title":145906,"body":145907,"description":2048,"extension":2049,"meta":147134,"navigation":2051,"path":147135,"seo":147136,"stem":147137,"__hash__":147138},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":145908,"toc":147112},[145909,145912,145916,145920,145923,145926,145930,145935,145938,145941,145944,145947,145950,146007,146010,146015,146018,146021,146025,146036,146040,146043,146046,146053,146058,146062,146065,146071,146074,146078,146081,146088,146091,146094,146101,146104,146111,146114,146117,146124,146127,146130,146132,146149,146153,146156,146159,146162,146166,146169,146172,146175,146178,146181,146184,146186,146189,146192,146254,146257,146367,146374,146380,146383,146386,146390,146393,146397,146402,146405,146412,146415,146421,146426,146429,146432,146435,146438,146441,146444,146447,146450,146506,146508,146534,146538,146541,146544,146547,146555,146558,146561,146565,146621,146624,146628,146634,146645,146648,146653,146656,146659,146665,146668,146671,146674,146677,146680,146683,146686,146689,146714,146720,146723,146726,146729,146732,146735,146738,146743,146746,146749,146752,146760,146763,146770,146773,146776,146778,146802,146804,146807,146810,146813,146816,146819,146822,146825,146859,146862,146865,146899,146906,146909,146912,146915,146918,146921,146924,146931,146934,146937,146940,146943,146950,146953,146956,146963,146966,146969,146973,146976,146979,146982,146985,146988,146991,146994,146997,146999,147023,147025,147049,147053,147064,147067,147070,147073,147076,147079,147082,147085,147088,147091,147094,147097,147100,147103,147106,147109],[10,145910,145906],{"id":145911},"_21-移动端布局实战下篇",[14,145913,145915],{"id":145914},"_211-rem适配布局","21.1 rem适配布局",[32,145917,145919],{"id":145918},"_2111-rem单位","21.1.1 rem单位",[219,145921],{"style":221,"src":145922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[19,145924,145925],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[32,145927,145929],{"id":145928},"_2112-媒体查询","21.1.2 媒体查询",[1826,145931,145932],{},[1829,145933,145934],{},"参数介绍",[219,145936],{"style":221,"src":145937},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[219,145939],{"style":221,"src":145940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[219,145942],{"style":221,"src":145943},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[219,145945],{"style":221,"src":145946},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[219,145948],{"style":221,"src":145949},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[231,145951,145953],{"className":233,"code":145952,"language":235,"meta":236,"style":236},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[23,145954,145955,145960,145979,145986,145999,146003],{"__ignoreMap":236},[240,145956,145957],{"class":242,"line":243},[240,145958,145959],{"class":246},"\u002F* 媒体查询 *\u002F\n",[240,145961,145962,145965,145967,145970,145972,145975,145977],{"class":242,"line":250},[240,145963,145964],{"class":288},"@media",[240,145966,3612],{"class":257},[240,145968,145969],{"class":264},"max-width",[240,145971,268],{"class":257},[240,145973,145974],{"class":264},"768",[240,145976,289],{"class":288},[240,145978,14392],{"class":257},[240,145980,145981,145984],{"class":242,"line":261},[240,145982,145983],{"class":436},"  .container",[240,145985,258],{"class":257},[240,145987,145988,145991,145993,145995,145997],{"class":242,"line":277},[240,145989,145990],{"class":264},"    width",[240,145992,268],{"class":257},[240,145994,285],{"class":264},[240,145996,2429],{"class":288},[240,145998,274],{"class":257},[240,146000,146001],{"class":242,"line":294},[240,146002,129247],{"class":257},[240,146004,146005],{"class":242,"line":309},[240,146006,312],{"class":257},[19,146008,146009],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[1826,146011,146012],{"start":250},[1829,146013,146014],{},"引入资源",[219,146016],{"style":221,"src":146017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[19,146019,146020],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[32,146022,146024],{"id":146023},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[3100,146026,146027,146030,146033],{},[1829,146028,146029],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[1829,146031,146032],{},"媒体查询可以根据不同设备宽度来修改样式",[1829,146034,146035],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[14,146037,146039],{"id":146038},"_212-less基础","21.2 Less基础",[19,146041,146042],{},"css冗余度较高，不利于复用，没有很好的计算能力",[19,146044,146045],{},"Less可以解决该问题，它是css的扩展语言",[19,146047,146048,146049],{},"Less中文网址： ",[254,146050,146051],{"href":146051,"rel":146052},"http:\u002F\u002Flesscss.cn\u002F",[25811],[19,146054,146055],{},[68,146056,146057],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[32,146059,146061],{"id":146060},"_2121-less安装","21.2.1 less安装",[19,146063,146064],{},"如果使用vscode，则无需进行下方安装步骤",[19,146066,146067],{},[254,146068,146069],{"href":146069,"rel":146070},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[25811],[219,146072],{"style":221,"src":146073},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[32,146075,146077],{"id":146076},"_2122-less使用","21.2.2 less使用",[19,146079,146080],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[1826,146082,146083],{},[1829,146084,146085],{},[68,146086,146087],{},"Less 变量",[219,146089],{"style":221,"src":146090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[219,146092],{"style":221,"src":146093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[1826,146095,146096],{"start":250},[1829,146097,146098],{},[68,146099,146100],{},"Less 编译",[219,146102],{"style":221,"src":146103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[1826,146105,146106],{"start":261},[1829,146107,146108],{},[68,146109,146110],{},"Less 嵌套",[219,146112],{"style":221,"src":146113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[219,146115],{"style":221,"src":146116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[1826,146118,146119],{"start":277},[1829,146120,146121],{},[68,146122,146123],{},"Less 运算",[219,146125],{"style":221,"src":146126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[19,146128,146129],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[19,146131,87],{},[3100,146133,146134,146137,146140,146143,146146],{},[1829,146135,146136],{},"乘号（*）和除号（\u002F）的写法",[1829,146138,146139],{},"运算符中间左右有个空格隔开 1px + 5",[1829,146141,146142],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[1829,146144,146145],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[1829,146147,146148],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[14,146150,146152],{"id":146151},"_213-rem-适配方案","21.3 rem 适配方案",[19,146154,146155],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[19,146157,146158],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[219,146160],{"style":221,"src":146161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[32,146163,146165],{"id":146164},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[19,146167,146168],{},"rem + 媒体查询 + less 技术",[219,146170],{"style":221,"src":146171},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[19,146173,146174],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[19,146176,146177],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[219,146179],{"style":221,"src":146180},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[19,146182,146183],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[19,146185,16582],{},[219,146187],{"style":221,"src":146188},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[19,146190,146191],{},"index.html:",[231,146193,146195],{"className":233,"code":146194,"language":235,"meta":236,"style":236},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[23,146196,146197,146202,146208,146224,146228,146234,146250],{"__ignoreMap":236},[240,146198,146199],{"class":242,"line":243},[240,146200,146201],{"class":246},"\u002F* rem 适配方案 *\u002F\n",[240,146203,146204,146206],{"class":242,"line":250},[240,146205,52581],{"class":253},[240,146207,258],{"class":257},[240,146209,146210,146212,146214,146217,146219,146221],{"class":242,"line":261},[240,146211,72546],{"class":264},[240,146213,268],{"class":257},[240,146215,146216],{"class":264},"62.5",[240,146218,2429],{"class":288},[240,146220,132040],{"class":257},[240,146222,146223],{"class":246},"\u002F* 1rem = 10px *\u002F\n",[240,146225,146226],{"class":242,"line":277},[240,146227,312],{"class":257},[240,146229,146230,146232],{"class":242,"line":294},[240,146231,132025],{"class":436},[240,146233,258],{"class":257},[240,146235,146236,146238,146240,146242,146245,146247],{"class":242,"line":309},[240,146237,280],{"class":264},[240,146239,268],{"class":257},[240,146241,2546],{"class":264},[240,146243,146244],{"class":288},"rem",[240,146246,132040],{"class":257},[240,146248,146249],{"class":246},"\u002F* 100px *\u002F\n",[240,146251,146252],{"class":242,"line":529},[240,146253,312],{"class":257},[19,146255,146256],{},"common.less",[231,146258,146260],{"className":233,"code":146259,"language":235,"meta":236,"style":236},"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",[23,146261,146262,146268,146283,146287,146293,146307,146311,146315,146319,146325,146339,146343,146349,146363],{"__ignoreMap":236},[240,146263,146264,146266],{"class":242,"line":243},[240,146265,52581],{"class":253},[240,146267,258],{"class":257},[240,146269,146270,146272,146274,146276,146278,146280],{"class":242,"line":250},[240,146271,72546],{"class":264},[240,146273,268],{"class":257},[240,146275,146216],{"class":264},[240,146277,2429],{"class":288},[240,146279,28013],{"class":257},[240,146281,146282],{"class":246},"\u002F* 10px *\u002F\n",[240,146284,146285],{"class":242,"line":261},[240,146286,312],{"class":257},[240,146288,146289,146291],{"class":242,"line":277},[240,146290,330],{"class":253},[240,146292,258],{"class":257},[240,146294,146295,146297,146299,146301,146303,146305],{"class":242,"line":294},[240,146296,280],{"class":264},[240,146298,268],{"class":257},[240,146300,2546],{"class":264},[240,146302,146244],{"class":288},[240,146304,28013],{"class":257},[240,146306,146249],{"class":246},[240,146308,146309],{"class":242,"line":309},[240,146310,312],{"class":257},[240,146312,146313],{"class":242,"line":529},[240,146314,137638],{"class":257},[240,146316,146317],{"class":242,"line":549},[240,146318,146201],{"class":246},[240,146320,146321,146323],{"class":242,"line":569},[240,146322,52581],{"class":253},[240,146324,258],{"class":257},[240,146326,146327,146329,146331,146333,146335,146337],{"class":242,"line":589},[240,146328,72546],{"class":264},[240,146330,268],{"class":257},[240,146332,146216],{"class":264},[240,146334,2429],{"class":288},[240,146336,132040],{"class":257},[240,146338,146223],{"class":246},[240,146340,146341],{"class":242,"line":715},[240,146342,312],{"class":257},[240,146344,146345,146347],{"class":242,"line":727},[240,146346,132025],{"class":436},[240,146348,258],{"class":257},[240,146350,146351,146353,146355,146357,146359,146361],{"class":242,"line":1730},[240,146352,280],{"class":264},[240,146354,268],{"class":257},[240,146356,2546],{"class":264},[240,146358,146244],{"class":288},[240,146360,132040],{"class":257},[240,146362,146249],{"class":246},[240,146364,146365],{"class":242,"line":3582},[240,146366,312],{"class":257},[19,146368,146369,146370,146373],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[25500,146371,146372],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[231,146375,146378],{"className":146376,"code":146377,"language":7139},[7137],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[23,146379,146377],{"__ignoreMap":236},[19,146381,146382],{},"less保存时会自动变成.css文件",[19,146384,146385],{},"好好搞懂上述代码写法",[32,146387,146389],{"id":146388},"_2132-样式导入样式","21.3.2 样式导入样式",[219,146391],{"style":221,"src":146392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[32,146394,146396],{"id":146395},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[1826,146398,146399],{},[1829,146400,146401],{},"准备工作",[219,146403],{"style":221,"src":146404},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[19,146406,146407,146408],{},"github地址：",[254,146409,146410],{"href":146410,"rel":146411},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[25811],[19,146413,146414],{},"下载之后，将index.js文件拖到项目中就可以了",[19,146416,146417,146418],{},"js文件引入到index.html中使用的是",[23,146419,146420],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[1826,146422,146423],{"start":250},[1829,146424,146425],{},"vscode插件",[219,146427],{"style":221,"src":146428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[19,146430,146431],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[19,146433,146434],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[219,146436],{"style":221,"src":146437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[19,146439,146440],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[219,146442],{"style":221,"src":146443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[19,146445,146446],{},"修改成75就可以，alt+z为快捷键",[19,146448,146449],{},"index.css：",[231,146451,146452],{"className":233,"code":146194,"language":235,"meta":236,"style":236},[23,146453,146454,146458,146464,146478,146482,146488,146502],{"__ignoreMap":236},[240,146455,146456],{"class":242,"line":243},[240,146457,146201],{"class":246},[240,146459,146460,146462],{"class":242,"line":250},[240,146461,52581],{"class":253},[240,146463,258],{"class":257},[240,146465,146466,146468,146470,146472,146474,146476],{"class":242,"line":261},[240,146467,72546],{"class":264},[240,146469,268],{"class":257},[240,146471,146216],{"class":264},[240,146473,2429],{"class":288},[240,146475,132040],{"class":257},[240,146477,146223],{"class":246},[240,146479,146480],{"class":242,"line":277},[240,146481,312],{"class":257},[240,146483,146484,146486],{"class":242,"line":294},[240,146485,132025],{"class":436},[240,146487,258],{"class":257},[240,146489,146490,146492,146494,146496,146498,146500],{"class":242,"line":309},[240,146491,280],{"class":264},[240,146493,268],{"class":257},[240,146495,2546],{"class":264},[240,146497,146244],{"class":288},[240,146499,132040],{"class":257},[240,146501,146249],{"class":246},[240,146503,146504],{"class":242,"line":529},[240,146505,312],{"class":257},[19,146507,146191],{},[231,146509,146510],{"className":233,"code":128858,"language":235,"meta":236,"style":236},[23,146511,146512,146518,146530],{"__ignoreMap":236},[240,146513,146514,146516],{"class":242,"line":243},[240,146515,53738],{"class":253},[240,146517,258],{"class":257},[240,146519,146520,146522,146524,146526,146528],{"class":242,"line":250},[240,146521,72546],{"class":264},[240,146523,268],{"class":257},[240,146525,2700],{"class":264},[240,146527,289],{"class":288},[240,146529,274],{"class":257},[240,146531,146532],{"class":242,"line":261},[240,146533,312],{"class":257},[14,146535,146537],{"id":146536},"_214-响应式开发","21.4 响应式开发",[19,146539,146540],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[219,146542],{"style":221,"src":146543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[19,146545,146546],{},"做法：",[3100,146548,146549,146552],{},[1829,146550,146551],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[1829,146553,146554],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[219,146556],{"style":221,"src":146557},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[19,146559,146560],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[32,146562,146564],{"id":146563},"_2141-简单代码示范","21.4.1 简单代码示范",[231,146566,146567],{"className":233,"code":146194,"language":235,"meta":236,"style":236},[23,146568,146569,146573,146579,146593,146597,146603,146617],{"__ignoreMap":236},[240,146570,146571],{"class":242,"line":243},[240,146572,146201],{"class":246},[240,146574,146575,146577],{"class":242,"line":250},[240,146576,52581],{"class":253},[240,146578,258],{"class":257},[240,146580,146581,146583,146585,146587,146589,146591],{"class":242,"line":261},[240,146582,72546],{"class":264},[240,146584,268],{"class":257},[240,146586,146216],{"class":264},[240,146588,2429],{"class":288},[240,146590,132040],{"class":257},[240,146592,146223],{"class":246},[240,146594,146595],{"class":242,"line":277},[240,146596,312],{"class":257},[240,146598,146599,146601],{"class":242,"line":294},[240,146600,132025],{"class":436},[240,146602,258],{"class":257},[240,146604,146605,146607,146609,146611,146613,146615],{"class":242,"line":309},[240,146606,280],{"class":264},[240,146608,268],{"class":257},[240,146610,2546],{"class":264},[240,146612,146244],{"class":288},[240,146614,132040],{"class":257},[240,146616,146249],{"class":246},[240,146618,146619],{"class":242,"line":529},[240,146620,312],{"class":257},[19,146622,146623],{},"父盒子一般命名为container",[32,146625,146627],{"id":146626},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[19,146629,146630,146631],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[68,146632,146633],{},"使得 Web 开发更加快捷",[3100,146635,146636],{},[1829,146637,146638,146639],{},"官网：",[68,146640,146641],{},[254,146642,146643],{"href":146643,"rel":146644},"http:\u002F\u002Fgetbootstrap.com\u002F",[25811],[19,146646,146647],{},"可以直接去官网拿现成的东西",[1826,146649,146650],{},[1829,146651,146652],{},"Bootstrap的使用",[19,146654,146655],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[19,146657,146658],{},"Bootstrap 使用四步曲：",[19,146660,146661,146664],{},[68,146662,146663],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[219,146666],{"style":221,"src":146667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[19,146669,146670],{},"打开Bootstrap官网，然后下载",[219,146672],{"style":221,"src":146673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[219,146675],{"style":221,"src":146676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[19,146678,146679],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[19,146681,146682],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[19,146684,146685],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[219,146687],{"style":221,"src":146688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[231,146690,146692],{"className":233,"code":146691,"language":235,"meta":236,"style":236},".center {\n  color: red;\n}\n",[23,146693,146694,146700,146710],{"__ignoreMap":236},[240,146695,146696,146698],{"class":242,"line":243},[240,146697,128745],{"class":436},[240,146699,258],{"class":257},[240,146701,146702,146704,146706,146708],{"class":242,"line":250},[240,146703,678],{"class":264},[240,146705,268],{"class":257},[240,146707,1953],{"class":264},[240,146709,274],{"class":257},[240,146711,146712],{"class":242,"line":261},[240,146713,312],{"class":257},[19,146715,146716,146719],{},[23,146717,146718],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[219,146721],{"style":221,"src":146722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[219,146724],{"style":221,"src":146725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[219,146727],{"style":221,"src":146728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[19,146730,146731],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[219,146733],{"style":221,"src":146734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[19,146736,146737],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[1826,146739,146740],{"start":250},[1829,146741,146742],{},"布局容器",[219,146744],{"style":221,"src":146745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[19,146747,146748],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[19,146750,146751],{},"container-fluid用于移动式布局比较方便",[1826,146753,146754],{"start":261},[1829,146755,146756,146757],{},"bootstrap ",[68,146758,146759],{},"栅格系统原理",[219,146761],{"style":221,"src":146762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[1826,146764,146765],{"start":277},[1829,146766,146767],{},[68,146768,146769],{},"栅格选项参数",[219,146771],{"style":221,"src":146772},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[19,146774,146775],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[19,146777,16582],{},[231,146779,146780],{"className":233,"code":146691,"language":235,"meta":236,"style":236},[23,146781,146782,146788,146798],{"__ignoreMap":236},[240,146783,146784,146786],{"class":242,"line":243},[240,146785,128745],{"class":436},[240,146787,258],{"class":257},[240,146789,146790,146792,146794,146796],{"class":242,"line":250},[240,146791,678],{"class":264},[240,146793,268],{"class":257},[240,146795,1953],{"class":264},[240,146797,274],{"class":257},[240,146799,146800],{"class":242,"line":261},[240,146801,312],{"class":257},[19,146803,137220],{},[219,146805],{"style":221,"src":146806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[19,146808,146809],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[19,146811,146812],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[19,146814,146815],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[19,146817,146818],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[19,146820,146821],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[19,146823,146824],{},"汇总展示说明：",[231,146826,146827],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,146828,146829,146833,146847,146851],{"__ignoreMap":236},[240,146830,146831],{"class":242,"line":243},[240,146832,132288],{"class":246},[240,146834,146835,146837,146839,146841,146843,146845],{"class":242,"line":250},[240,146836,431],{"class":257},[240,146838,330],{"class":253},[240,146840,437],{"class":436},[240,146842,440],{"class":257},[240,146844,132301],{"class":443},[240,146846,447],{"class":257},[240,146848,146849],{"class":242,"line":261},[240,146850,132308],{"class":257},[240,146852,146853,146855,146857],{"class":242,"line":277},[240,146854,592],{"class":257},[240,146856,330],{"class":253},[240,146858,447],{"class":257},[219,146860],{"style":221,"src":146861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[19,146863,146864],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[231,146866,146867],{"className":417,"code":132281,"language":419,"meta":236,"style":236},[23,146868,146869,146873,146887,146891],{"__ignoreMap":236},[240,146870,146871],{"class":242,"line":243},[240,146872,132288],{"class":246},[240,146874,146875,146877,146879,146881,146883,146885],{"class":242,"line":250},[240,146876,431],{"class":257},[240,146878,330],{"class":253},[240,146880,437],{"class":436},[240,146882,440],{"class":257},[240,146884,132301],{"class":443},[240,146886,447],{"class":257},[240,146888,146889],{"class":242,"line":261},[240,146890,132308],{"class":257},[240,146892,146893,146895,146897],{"class":242,"line":277},[240,146894,592],{"class":257},[240,146896,330],{"class":253},[240,146898,447],{"class":257},[1826,146900,146901],{"start":294},[1829,146902,146903],{},[68,146904,146905],{},"列嵌套",[219,146907],{"style":221,"src":146908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[19,146910,146911],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[19,146913,146914],{},"没加row内部这样：",[219,146916],{"style":221,"src":146917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[19,146919,146920],{},"加上row之后内部为：",[219,146922],{"style":221,"src":146923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[1826,146925,146926],{"start":309},[1829,146927,146928],{},[68,146929,146930],{},"列偏移",[219,146932],{"style":221,"src":146933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[19,146935,146936],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[19,146938,146939],{},"要加偏移量，即偏移份数",[19,146941,146942],{},"偏移的份数=12-两个盒子的份数",[1826,146944,146945],{"start":529},[1829,146946,146947],{},[68,146948,146949],{},"列排序",[219,146951],{"style":221,"src":146952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[19,146954,146955],{},"pull拉左；push推右",[1826,146957,146958],{"start":549},[1829,146959,146960],{},[68,146961,146962],{},"响应式工具",[219,146964],{"style":221,"src":146965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[19,146967,146968],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[32,146970,146972],{"id":146971},"_2143-响应式小项目","21.4.3 响应式小项目",[19,146974,146975],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[19,146977,146978],{},"ul {",[19,146980,146981],{},"list-style: none;",[19,146983,146984],{},"margin:0;",[19,146986,146987],{},"padding:0; }",[219,146989],{"style":221,"src":146990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[219,146992],{"style":221,"src":146993},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[19,146995,146996],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[19,146998,70812],{},[231,147000,147001],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,147002,147003,147009,147019],{"__ignoreMap":236},[240,147004,147005,147007],{"class":242,"line":243},[240,147006,132025],{"class":436},[240,147008,258],{"class":257},[240,147010,147011,147013,147015,147017],{"class":242,"line":250},[240,147012,132657],{"class":264},[240,147014,268],{"class":257},[240,147016,813],{"class":264},[240,147018,274],{"class":257},[240,147020,147021],{"class":242,"line":261},[240,147022,312],{"class":257},[19,147024,72376],{},[231,147026,147027],{"className":233,"code":140847,"language":235,"meta":236,"style":236},[23,147028,147029,147035,147045],{"__ignoreMap":236},[240,147030,147031,147033],{"class":242,"line":243},[240,147032,132025],{"class":436},[240,147034,258],{"class":257},[240,147036,147037,147039,147041,147043],{"class":242,"line":250},[240,147038,132657],{"class":264},[240,147040,268],{"class":257},[240,147042,813],{"class":264},[240,147044,274],{"class":257},[240,147046,147047],{"class":242,"line":261},[240,147048,312],{"class":257},[14,147050,147052],{"id":147051},"_215-swiper-插件使用","21.5 swiper 插件使用",[3100,147054,147055,147058,147061],{},[1829,147056,147057],{},"下载需要的css和js文件html页面中 引入相关文件",[1829,147059,147060],{},"官网找到类似案例，复制html结构，css样式 js 语法",[1829,147062,147063],{},"根据需求定制修改模块",[219,147065],{"style":221,"src":147066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[19,147068,147069],{},"解压后将这两部分放到项目中",[219,147071],{"style":221,"src":147072},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[19,147074,147075],{},"这个插件可以帮助我们实现轮播图效果",[19,147077,147078],{},"用法：",[219,147080],{"style":221,"src":147081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[19,147083,147084],{},"找到自己喜欢的",[219,147086],{"style":221,"src":147087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[19,147089,147090],{},"右键，查看网页源代码",[219,147092],{"style":221,"src":147093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[19,147095,147096],{},"复制人家的结构内容",[19,147098,147099],{},"然后去看API文档：",[219,147101],{"style":221,"src":147102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[19,147104,147105],{},"可以看看如何修改样式",[19,147107,147108],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[2019,147110,147111],{},"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":236,"searchDepth":250,"depth":250,"links":147113},[147114,147119,147123,147128,147133],{"id":145914,"depth":250,"text":145915,"children":147115},[147116,147117,147118],{"id":145918,"depth":261,"text":145919},{"id":145928,"depth":261,"text":145929},{"id":146023,"depth":261,"text":146024},{"id":146038,"depth":250,"text":146039,"children":147120},[147121,147122],{"id":146060,"depth":261,"text":146061},{"id":146076,"depth":261,"text":146077},{"id":146151,"depth":250,"text":146152,"children":147124},[147125,147126,147127],{"id":146164,"depth":261,"text":146165},{"id":146388,"depth":261,"text":146389},{"id":146395,"depth":261,"text":146396},{"id":146536,"depth":250,"text":146537,"children":147129},[147130,147131,147132],{"id":146563,"depth":261,"text":146564},{"id":146626,"depth":261,"text":146627},{"id":146971,"depth":261,"text":146972},{"id":147051,"depth":250,"text":147052},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":145906,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":147140,"title":147141,"body":147142,"description":2048,"extension":2049,"meta":147362,"navigation":2051,"path":147363,"seo":147364,"stem":147365,"__hash__":147366},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":147143,"toc":147358},[147144,147147,147151,147154,147169,147174,147177,147182,147217,147222,147234,147239,147252,147257,147274,147279,147299,147304,147322,147325,147328,147331,147334,147338,147341,147344,147347,147350,147353,147356],[10,147145,147141],{"id":147146},"_22-代码提交与新型相对单位",[14,147148,147150],{"id":147149},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[19,147152,147153],{},"法1：",[1826,147155,147156,147163,147166],{},[1829,147157,147158,147159],{},"登录网站注册：",[254,147160,147161],{"href":147161,"rel":147162},"https:\u002F\u002Fgitee.com\u002F",[25811],[1829,147164,147165],{},"码云创建新的仓库",[1829,147167,147168],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[3100,147170,147171],{},[1829,147172,147173],{},"在网站根目录右键-- Git Bash Here",[219,147175],{"style":221,"src":147176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[3100,147178,147179],{},[1829,147180,147181],{},"如果是第一次利用git提交，请配置好全局选项",[231,147183,147185],{"className":119206,"code":147184,"language":119208,"meta":236,"style":236},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[23,147186,147187,147203],{"__ignoreMap":236},[240,147188,147189,147192,147194,147197,147200],{"class":242,"line":243},[240,147190,147191],{"class":436},"git",[240,147193,121629],{"class":443},[240,147195,147196],{"class":264}," --global",[240,147198,147199],{"class":443}," user.name",[240,147201,147202],{"class":443}," \"你的名字\"\n",[240,147204,147205,147207,147209,147211,147214],{"class":242,"line":250},[240,147206,147191],{"class":436},[240,147208,121629],{"class":443},[240,147210,147196],{"class":264},[240,147212,147213],{"class":443}," user.email",[240,147215,147216],{"class":443}," \"你的邮箱\"\n",[3100,147218,147219],{},[1829,147220,147221],{},"初始化仓库",[231,147223,147225],{"className":119206,"code":147224,"language":119208,"meta":236,"style":236},"git init\n",[23,147226,147227],{"__ignoreMap":236},[240,147228,147229,147231],{"class":242,"line":243},[240,147230,147191],{"class":436},[240,147232,147233],{"class":443}," init\n",[3100,147235,147236],{},[1829,147237,147238],{},"把本地文件放到暂存区",[231,147240,147242],{"className":119206,"code":147241,"language":119208,"meta":236,"style":236},"git add .\n",[23,147243,147244],{"__ignoreMap":236},[240,147245,147246,147248,147250],{"class":242,"line":243},[240,147247,147191],{"class":436},[240,147249,7161],{"class":443},[240,147251,30687],{"class":443},[3100,147253,147254],{},[1829,147255,147256],{},"把本地文件放到本地仓库里面",[231,147258,147260],{"className":119206,"code":147259,"language":119208,"meta":236,"style":236},"git commit -m \"first commit\"\n",[23,147261,147262],{"__ignoreMap":236},[240,147263,147264,147266,147269,147271],{"class":242,"line":243},[240,147265,147191],{"class":436},[240,147267,147268],{"class":443}," commit",[240,147270,102793],{"class":264},[240,147272,147273],{"class":443}," \"first commit\"\n",[3100,147275,147276],{},[1829,147277,147278],{},"链接远程仓库",[231,147280,147282],{"className":119206,"code":147281,"language":119208,"meta":236,"style":236},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[23,147283,147284],{"__ignoreMap":236},[240,147285,147286,147288,147291,147293,147296],{"class":242,"line":243},[240,147287,147191],{"class":436},[240,147289,147290],{"class":443}," remote",[240,147292,7161],{"class":443},[240,147294,147295],{"class":443}," origin",[240,147297,147298],{"class":443}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[3100,147300,147301],{},[1829,147302,147303],{},"把本地仓库的文件推送到远程仓库 push",[231,147305,147307],{"className":119206,"code":147306,"language":119208,"meta":236,"style":236},"git push -u origin master\n",[23,147308,147309],{"__ignoreMap":236},[240,147310,147311,147313,147315,147317,147319],{"class":242,"line":243},[240,147312,147191],{"class":436},[240,147314,30962],{"class":443},[240,147316,30236],{"class":264},[240,147318,147295],{"class":443},[240,147320,147321],{"class":443}," master\n",[219,147323],{"style":221,"src":147324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[19,147326,147327],{},"上方方法暂未实现，后边学完git后在整",[19,147329,147330],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[219,147332],{"style":221,"src":147333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[14,147335,147337],{"id":147336},"_222-新型相对单位","22.2 新型相对单位",[219,147339],{"style":221,"src":147340},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[219,147342],{"style":221,"src":147343},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[19,147345,147346],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[19,147348,147349],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[219,147351],{"style":221,"src":147352},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[19,147354,147355],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[2019,147357,25904],{},{"title":236,"searchDepth":250,"depth":250,"links":147359},[147360,147361],{"id":147149,"depth":250,"text":147150},{"id":147336,"depth":250,"text":147337},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":147141,"description":2048},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":147368,"title":147369,"body":147370,"description":147374,"extension":2049,"meta":147375,"navigation":2051,"path":147376,"seo":147377,"stem":147378,"__hash__":147379},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":147371,"toc":147372},[],{"title":236,"searchDepth":250,"depth":250,"links":147373},[],"自己正经开始学编程的第一门语言！",{"category":94752},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":147369,"description":147374},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":147381,"title":147382,"body":147383,"description":2048,"extension":2049,"meta":148530,"navigation":2051,"path":148531,"seo":148532,"stem":148533,"__hash__":148534},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":147384,"toc":148506},[147385,147388,147392,147395,147398,147423,147426,147432,147436,147439,147466,147469,147509,147512,147524,147527,147533,147537,147541,147568,147585,147592,147596,147599,147625,147628,147632,147635,147675,147678,147695,147701,147705,147710,147754,147757,147775,147778,147846,147850,147857,147860,147875,147878,147887,147890,147901,147904,147913,147916,147933,147936,147951,147955,147959,147962,147964,147984,147988,147991,147994,148005,148008,148014,148018,148024,148051,148054,148066,148069,148080,148083,148089,148093,148099,148149,148152,148194,148197,148230,148233,148267,148271,148274,148294,148297,148333,148336,148349,148353,148357,148363,148366,148379,148383,148386,148392,148395,148399,148402,148405,148454,148458,148474,148480,148487,148493,148503],[10,147386,147382],{"id":147387},"_1-python环境与第一个程序",[14,147389,147391],{"id":147390},"_11-什么是python","1.1 什么是Python",[19,147393,147394],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[19,147396,147397],{},"理解 Python 时抓住三个关键词：",[1826,147399,147400,147403,147406],{},[1829,147401,147402],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[1829,147404,147405],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[1829,147407,147408,147409,46,147412,46,147415,46,147418,46,147420,30331],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[23,147410,147411],{},"os",[23,147413,147414],{},"sys",[23,147416,147417],{},"json",[23,147419,59791],{},[23,147421,147422],{},"datetime",[19,147424,147425],{},"Python 程序的运行链路：",[231,147427,147430],{"className":147428,"code":147429,"language":7139,"meta":236},[7137],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[23,147431,147429],{"__ignoreMap":236},[14,147433,147435],{"id":147434},"_12-python解释器","1.2 Python解释器",[19,147437,147438],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[231,147440,147442],{"className":25768,"code":147441,"language":25770,"meta":236,"style":236},"python --version\npython3 --version\npython\npython3\n",[23,147443,147444,147450,147456,147461],{"__ignoreMap":236},[240,147445,147446,147448],{"class":242,"line":243},[240,147447,32326],{"class":436},[240,147449,28239],{"class":264},[240,147451,147452,147454],{"class":242,"line":250},[240,147453,102790],{"class":436},[240,147455,28239],{"class":264},[240,147457,147458],{"class":242,"line":261},[240,147459,147460],{"class":436},"python\n",[240,147462,147463],{"class":242,"line":277},[240,147464,147465],{"class":436},"python3\n",[19,147467,147468],{},"进入交互模式后，可以直接输入表达式：",[231,147470,147472],{"className":32324,"code":147471,"language":32326,"meta":236,"style":236},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[23,147473,147474,147485,147490,147504],{"__ignoreMap":236},[240,147475,147476,147479,147481,147483],{"class":242,"line":243},[240,147477,147478],{"class":288},">>>",[240,147480,27065],{"class":264},[240,147482,47512],{"class":288},[240,147484,49669],{"class":264},[240,147486,147487],{"class":242,"line":250},[240,147488,147489],{"class":264},"3\n",[240,147491,147492,147494,147497,147499,147502],{"class":242,"line":261},[240,147493,147478],{"class":288},[240,147495,147496],{"class":264}," print",[240,147498,789],{"class":257},[240,147500,147501],{"class":443},"\"hello python\"",[240,147503,2129],{"class":257},[240,147505,147506],{"class":242,"line":277},[240,147507,147508],{"class":257},"hello python\n",[19,147510,147511],{},"退出交互模式：",[231,147513,147515],{"className":32324,"code":147514,"language":32326,"meta":236,"style":236},"exit()\n",[23,147516,147517],{"__ignoreMap":236},[240,147518,147519,147522],{"class":242,"line":243},[240,147520,147521],{"class":264},"exit",[240,147523,3929],{"class":257},[19,147525,147526],{},"或使用快捷键：",[231,147528,147531],{"className":147529,"code":147530,"language":7139,"meta":236},[7137],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[23,147532,147530],{"__ignoreMap":236},[14,147534,147536],{"id":147535},"_13-安装python","1.3 安装Python",[32,147538,147540],{"id":147539},"_131-windows安装","1.3.1 Windows安装",[1826,147542,147543,147550,147553,147559,147565],{},[1829,147544,147545,147546],{},"打开 Python 官网：",[254,147547,147548],{"href":147548,"rel":147549},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[25811],[1829,147551,147552],{},"下载 Windows Installer。",[1829,147554,147555,147556,30331],{},"安装时勾选 ",[23,147557,147558],{},"Add Python to PATH",[1829,147560,147561,147562,30331],{},"点击 ",[23,147563,147564],{},"Install Now",[1829,147566,147567],{},"安装完成后打开命令提示符验证：",[231,147569,147571],{"className":25768,"code":147570,"language":25770,"meta":236,"style":236},"python --version\npip --version\n",[23,147572,147573,147579],{"__ignoreMap":236},[240,147574,147575,147577],{"class":242,"line":243},[240,147576,32326],{"class":436},[240,147578,28239],{"class":264},[240,147580,147581,147583],{"class":242,"line":250},[240,147582,25777],{"class":436},[240,147584,28239],{"class":264},[19,147586,147587,147588,147591],{},"如果提示 ",[23,147589,147590],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[32,147593,147595],{"id":147594},"_132-macos安装","1.3.2 macOS安装",[19,147597,147598],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[231,147600,147602],{"className":25768,"code":147601,"language":25770,"meta":236,"style":236},"brew install python\npython3 --version\npip3 --version\n",[23,147603,147604,147613,147619],{"__ignoreMap":236},[240,147605,147606,147609,147611],{"class":242,"line":243},[240,147607,147608],{"class":436},"brew",[240,147610,25780],{"class":443},[240,147612,126228],{"class":443},[240,147614,147615,147617],{"class":242,"line":250},[240,147616,102790],{"class":436},[240,147618,28239],{"class":264},[240,147620,147621,147623],{"class":242,"line":261},[240,147622,121610],{"class":436},[240,147624,28239],{"class":264},[19,147626,147627],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[32,147629,147631],{"id":147630},"_133-linux安装","1.3.3 Linux安装",[19,147633,147634],{},"Ubuntu\u002FDebian：",[231,147636,147638],{"className":25768,"code":147637,"language":25770,"meta":236,"style":236},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[23,147639,147640,147648,147663,147669],{"__ignoreMap":236},[240,147641,147642,147644,147646],{"class":242,"line":243},[240,147643,26523],{"class":436},[240,147645,119227],{"class":443},[240,147647,28188],{"class":443},[240,147649,147650,147652,147654,147656,147658,147660],{"class":242,"line":250},[240,147651,26523],{"class":436},[240,147653,119227],{"class":443},[240,147655,25780],{"class":443},[240,147657,106313],{"class":443},[240,147659,102709],{"class":443},[240,147661,147662],{"class":443}," python3-venv\n",[240,147664,147665,147667],{"class":242,"line":261},[240,147666,102790],{"class":436},[240,147668,28239],{"class":264},[240,147670,147671,147673],{"class":242,"line":277},[240,147672,121610],{"class":436},[240,147674,28239],{"class":264},[19,147676,147677],{},"Fedora：",[231,147679,147681],{"className":25768,"code":147680,"language":25770,"meta":236,"style":236},"sudo dnf install python3 python3-pip\n",[23,147682,147683],{"__ignoreMap":236},[240,147684,147685,147687,147689,147691,147693],{"class":242,"line":243},[240,147686,26523],{"class":436},[240,147688,28261],{"class":443},[240,147690,25780],{"class":443},[240,147692,106313],{"class":443},[240,147694,121675],{"class":443},[19,147696,147697,147698,147700],{},"Linux 上通常使用 ",[23,147699,102790],{}," 命令，避免和系统旧版本 Python 冲突。",[14,147702,147704],{"id":147703},"_14-pip包管理器","1.4 pip包管理器",[19,147706,147707,147709],{},[23,147708,25777],{}," 用来安装第三方库。",[231,147711,147713],{"className":25768,"code":147712,"language":25770,"meta":236,"style":236},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[23,147714,147715,147724,147733,147741,147747],{"__ignoreMap":236},[240,147716,147717,147719,147721],{"class":242,"line":243},[240,147718,25777],{"class":436},[240,147720,25780],{"class":443},[240,147722,147723],{"class":443}," requests\n",[240,147725,147726,147728,147731],{"class":242,"line":250},[240,147727,25777],{"class":436},[240,147729,147730],{"class":443}," uninstall",[240,147732,147723],{"class":443},[240,147734,147735,147737,147739],{"class":242,"line":261},[240,147736,25777],{"class":436},[240,147738,119484],{"class":443},[240,147740,147723],{"class":443},[240,147742,147743,147745],{"class":242,"line":277},[240,147744,25777],{"class":436},[240,147746,120865],{"class":443},[240,147748,147749,147751],{"class":242,"line":294},[240,147750,25777],{"class":436},[240,147752,147753],{"class":443}," freeze\n",[19,147755,147756],{},"国内网络较慢时可以临时使用镜像：",[231,147758,147760],{"className":25768,"code":147759,"language":25770,"meta":236,"style":236},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[23,147761,147762],{"__ignoreMap":236},[240,147763,147764,147766,147768,147771,147773],{"class":242,"line":243},[240,147765,25777],{"class":436},[240,147767,25780],{"class":443},[240,147769,147770],{"class":443}," requests",[240,147772,28376],{"class":264},[240,147774,121638],{"class":443},[19,147776,147777],{},"常见第三方库：",[802,147779,147780,147789],{},[805,147781,147782],{},[808,147783,147784,147787],{},[811,147785,147786],{},"库",[811,147788,817],{},[819,147790,147791,147799,147806,147814,147822,147830,147838],{},[808,147792,147793,147796],{},[824,147794,147795],{},"requests",[824,147797,147798],{},"网络请求",[808,147800,147801,147803],{},[824,147802,102537],{},[824,147804,147805],{},"数值计算",[808,147807,147808,147811],{},[824,147809,147810],{},"pandas",[824,147812,147813],{},"表格数据处理",[808,147815,147816,147819],{},[824,147817,147818],{},"matplotlib",[824,147820,147821],{},"绘图",[808,147823,147824,147827],{},[824,147825,147826],{},"pyecharts",[824,147828,147829],{},"ECharts 图表",[808,147831,147832,147835],{},[824,147833,147834],{},"flask",[824,147836,147837],{},"Web 后端",[808,147839,147840,147843],{},[824,147841,147842],{},"pytest",[824,147844,147845],{},"自动化测试",[14,147847,147849],{"id":147848},"_15-虚拟环境","1.5 虚拟环境",[19,147851,147852,147853,147856],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[23,147854,147855],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[19,147858,147859],{},"创建虚拟环境：",[231,147861,147863],{"className":25768,"code":147862,"language":25770,"meta":236,"style":236},"python -m venv .venv\n",[23,147864,147865],{"__ignoreMap":236},[240,147866,147867,147869,147871,147873],{"class":242,"line":243},[240,147868,32326],{"class":436},[240,147870,102793],{"class":264},[240,147872,102796],{"class":443},[240,147874,102799],{"class":443},[19,147876,147877],{},"Windows 激活：",[231,147879,147881],{"className":25768,"code":147880,"language":25770,"meta":236,"style":236},".venv\\Scripts\\activate\n",[23,147882,147883],{"__ignoreMap":236},[240,147884,147885],{"class":242,"line":243},[240,147886,147880],{"class":436},[19,147888,147889],{},"macOS\u002FLinux 激活：",[231,147891,147893],{"className":25768,"code":147892,"language":25770,"meta":236,"style":236},"source .venv\u002Fbin\u002Factivate\n",[23,147894,147895],{"__ignoreMap":236},[240,147896,147897,147899],{"class":242,"line":243},[240,147898,102804],{"class":264},[240,147900,102807],{"class":443},[19,147902,147903],{},"退出虚拟环境：",[231,147905,147907],{"className":25768,"code":147906,"language":25770,"meta":236,"style":236},"deactivate\n",[23,147908,147909],{"__ignoreMap":236},[240,147910,147911],{"class":242,"line":243},[240,147912,147906],{"class":436},[19,147914,147915],{},"保存依赖：",[231,147917,147919],{"className":25768,"code":147918,"language":25770,"meta":236,"style":236},"pip freeze > requirements.txt\n",[23,147920,147921],{"__ignoreMap":236},[240,147922,147923,147925,147928,147930],{"class":242,"line":243},[240,147924,25777],{"class":436},[240,147926,147927],{"class":443}," freeze",[240,147929,28168],{"class":288},[240,147931,147932],{"class":443}," requirements.txt\n",[19,147934,147935],{},"安装依赖：",[231,147937,147939],{"className":25768,"code":147938,"language":25770,"meta":236,"style":236},"pip install -r requirements.txt\n",[23,147940,147941],{"__ignoreMap":236},[240,147942,147943,147945,147947,147949],{"class":242,"line":243},[240,147944,25777],{"class":436},[240,147946,25780],{"class":443},[240,147948,121549],{"class":264},[240,147950,147932],{"class":443},[14,147952,147954],{"id":147953},"_16-开发工具","1.6 开发工具",[32,147956,147958],{"id":147957},"_161-pycharm","1.6.1 PyCharm",[19,147960,147961],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[19,147963,123972],{},[1826,147965,147966,147969,147972,147978,147981],{},[1829,147967,147968],{},"New Project：创建项目。",[1829,147970,147971],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[1829,147973,147974,147975,127893],{},"New Python File：创建 ",[23,147976,147977],{},".py",[1829,147979,147980],{},"Run：运行当前文件。",[1829,147982,147983],{},"Debug：断点调试。",[32,147985,147987],{"id":147986},"_162-vs-code","1.6.2 VS Code",[19,147989,147990],{},"VS Code 轻量，适合后续多语言开发。",[19,147992,147993],{},"建议安装插件：",[1826,147995,147996,147999,148002],{},[1829,147997,147998],{},"Python。",[1829,148000,148001],{},"Pylance。",[1829,148003,148004],{},"Jupyter。",[19,148006,148007],{},"选择解释器：",[231,148009,148012],{"className":148010,"code":148011,"language":7139,"meta":236},[7137],"Ctrl + Shift + P -> Python: Select Interpreter\n",[23,148013,148011],{"__ignoreMap":236},[14,148015,148017],{"id":148016},"_17-第一个python程序","1.7 第一个Python程序",[19,148019,148020,148021,26565],{},"创建文件 ",[23,148022,148023],{},"hello.py",[231,148025,148027],{"className":32324,"code":148026,"language":32326,"meta":236,"style":236},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[23,148028,148029,148040],{"__ignoreMap":236},[240,148030,148031,148033,148035,148038],{"class":242,"line":243},[240,148032,32361],{"class":264},[240,148034,789],{"class":257},[240,148036,148037],{"class":443},"\"Hello World\"",[240,148039,2129],{"class":257},[240,148041,148042,148044,148046,148049],{"class":242,"line":250},[240,148043,32361],{"class":264},[240,148045,789],{"class":257},[240,148047,148048],{"class":443},"\"你好，Python\"",[240,148050,2129],{"class":257},[19,148052,148053],{},"在终端运行：",[231,148055,148057],{"className":25768,"code":148056,"language":25770,"meta":236,"style":236},"python hello.py\n",[23,148058,148059],{"__ignoreMap":236},[240,148060,148061,148063],{"class":242,"line":243},[240,148062,32326],{"class":436},[240,148064,148065],{"class":443}," hello.py\n",[19,148067,148068],{},"或：",[231,148070,148072],{"className":25768,"code":148071,"language":25770,"meta":236,"style":236},"python3 hello.py\n",[23,148073,148074],{"__ignoreMap":236},[240,148075,148076,148078],{"class":242,"line":243},[240,148077,102790],{"class":436},[240,148079,148065],{"class":443},[19,148081,148082],{},"输出：",[231,148084,148087],{"className":148085,"code":148086,"language":7139,"meta":236},[7137],"Hello World\n你好，Python\n",[23,148088,148086],{"__ignoreMap":236},[14,148090,148092],{"id":148091},"_18-print函数","1.8 print函数",[19,148094,148095,148098],{},[23,148096,148097],{},"print()"," 用来输出内容。",[231,148100,148102],{"className":32324,"code":148101,"language":32326,"meta":236,"style":236},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[23,148103,148104,148114,148124,148134],{"__ignoreMap":236},[240,148105,148106,148108,148110,148112],{"class":242,"line":243},[240,148107,32361],{"class":264},[240,148109,789],{"class":257},[240,148111,7795],{"class":443},[240,148113,2129],{"class":257},[240,148115,148116,148118,148120,148122],{"class":242,"line":250},[240,148117,32361],{"class":264},[240,148119,789],{"class":257},[240,148121,285],{"class":264},[240,148123,2129],{"class":257},[240,148125,148126,148128,148130,148132],{"class":242,"line":261},[240,148127,32361],{"class":264},[240,148129,789],{"class":257},[240,148131,2169],{"class":264},[240,148133,2129],{"class":257},[240,148135,148136,148138,148140,148143,148145,148147],{"class":242,"line":277},[240,148137,32361],{"class":264},[240,148139,789],{"class":257},[240,148141,148142],{"class":443},"\"年龄:\"",[240,148144,1277],{"class":257},[240,148146,2748],{"class":264},[240,148148,2129],{"class":257},[19,148150,148151],{},"多个内容用逗号隔开，默认中间加空格：",[231,148153,148155],{"className":32324,"code":148154,"language":32326,"meta":236,"style":236},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[23,148156,148157,148167,148177],{"__ignoreMap":236},[240,148158,148159,148162,148164],{"class":242,"line":243},[240,148160,148161],{"class":257},"name ",[240,148163,440],{"class":288},[240,148165,148166],{"class":443}," \"张三\"\n",[240,148168,148169,148172,148174],{"class":242,"line":250},[240,148170,148171],{"class":257},"age ",[240,148173,440],{"class":288},[240,148175,148176],{"class":264}," 18\n",[240,148178,148179,148181,148183,148186,148189,148191],{"class":242,"line":261},[240,148180,32361],{"class":264},[240,148182,789],{"class":257},[240,148184,148185],{"class":443},"\"姓名:\"",[240,148187,148188],{"class":257},", name, ",[240,148190,148142],{"class":443},[240,148192,148193],{"class":257},", age)\n",[19,148195,148196],{},"修改分隔符：",[231,148198,148200],{"className":32324,"code":148199,"language":32326,"meta":236,"style":236},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[23,148201,148202],{"__ignoreMap":236},[240,148203,148204,148206,148208,148211,148213,148215,148217,148219,148221,148224,148226,148228],{"class":242,"line":243},[240,148205,32361],{"class":264},[240,148207,789],{"class":257},[240,148209,148210],{"class":443},"\"2024\"",[240,148212,1277],{"class":257},[240,148214,56251],{"class":443},[240,148216,1277],{"class":257},[240,148218,56251],{"class":443},[240,148220,1277],{"class":257},[240,148222,148223],{"class":792},"sep",[240,148225,440],{"class":288},[240,148227,34429],{"class":443},[240,148229,2129],{"class":257},[19,148231,148232],{},"修改结尾符：",[231,148234,148236],{"className":32324,"code":148235,"language":32326,"meta":236,"style":236},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[23,148237,148238,148256],{"__ignoreMap":236},[240,148239,148240,148242,148244,148246,148248,148250,148252,148254],{"class":242,"line":243},[240,148241,32361],{"class":264},[240,148243,789],{"class":257},[240,148245,7795],{"class":443},[240,148247,1277],{"class":257},[240,148249,47747],{"class":792},[240,148251,440],{"class":288},[240,148253,6311],{"class":443},[240,148255,2129],{"class":257},[240,148257,148258,148260,148262,148265],{"class":242,"line":250},[240,148259,32361],{"class":264},[240,148261,789],{"class":257},[240,148263,148264],{"class":443},"\"python\"",[240,148266,2129],{"class":257},[14,148268,148270],{"id":148269},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[19,148272,148273],{},"交互运行适合临时验证：",[231,148275,148277],{"className":32324,"code":148276,"language":32326,"meta":236,"style":236},">>> 10 * 3\n30\n",[23,148278,148279,148289],{"__ignoreMap":236},[240,148280,148281,148283,148285,148287],{"class":242,"line":243},[240,148282,147478],{"class":288},[240,148284,3991],{"class":264},[240,148286,8469],{"class":288},[240,148288,121946],{"class":264},[240,148290,148291],{"class":242,"line":250},[240,148292,148293],{"class":264},"30\n",[19,148295,148296],{},"脚本运行适合保存程序：",[231,148298,148300],{"className":32324,"code":148299,"language":32326,"meta":236,"style":236},"price = 8\ncount = 5\nprint(price * count)\n",[23,148301,148302,148312,148321],{"__ignoreMap":236},[240,148303,148304,148307,148309],{"class":242,"line":243},[240,148305,148306],{"class":257},"price ",[240,148308,440],{"class":288},[240,148310,148311],{"class":264}," 8\n",[240,148313,148314,148317,148319],{"class":242,"line":250},[240,148315,148316],{"class":257},"count ",[240,148318,440],{"class":288},[240,148320,56362],{"class":264},[240,148322,148323,148325,148328,148330],{"class":242,"line":261},[240,148324,32361],{"class":264},[240,148326,148327],{"class":257},"(price ",[240,148329,2554],{"class":288},[240,148331,148332],{"class":257}," count)\n",[19,148334,148335],{},"实际学习中推荐：",[1826,148337,148338,148341,148346],{},[1829,148339,148340],{},"临时试一个语法，用交互模式。",[1829,148342,148343,148344,127893],{},"写完整练习，用 ",[23,148345,147977],{},[1829,148347,148348],{},"写项目，用独立目录和虚拟环境。",[14,148350,148352],{"id":148351},"_110-常见错误","1.10 常见错误",[32,148354,148356],{"id":148355},"_1101-命令找不到","1.10.1 命令找不到",[231,148358,148361],{"className":148359,"code":148360,"language":7139,"meta":236},[7137],"python: command not found\n",[23,148362,148360],{"__ignoreMap":236},[19,148364,148365],{},"原因：",[1826,148367,148368,148371,148374],{},[1829,148369,148370],{},"没安装 Python。",[1829,148372,148373],{},"PATH 没配置。",[1829,148375,148376,148377,30331],{},"Linux\u002FmacOS 应该使用 ",[23,148378,102790],{},[32,148380,148382],{"id":148381},"_1102-文件名冲突","1.10.2 文件名冲突",[19,148384,148385],{},"不要把文件命名为：",[231,148387,148390],{"className":148388,"code":148389,"language":7139,"meta":236},[7137],"random.py\njson.py\ntime.py\nrequests.py\n",[23,148391,148389],{"__ignoreMap":236},[19,148393,148394],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[32,148396,148398],{"id":148397},"_1103-中文乱码","1.10.3 中文乱码",[19,148400,148401],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[19,148403,148404],{},"如果读写文件出现乱码，要明确指定编码：",[231,148406,148408],{"className":32324,"code":148407,"language":32326,"meta":236,"style":236},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[23,148409,148410,148444],{"__ignoreMap":236},[240,148411,148412,148414,148417,148419,148422,148424,148427,148429,148432,148434,148437,148439,148441],{"class":242,"line":243},[240,148413,109743],{"class":288},[240,148415,148416],{"class":264}," open",[240,148418,789],{"class":257},[240,148420,148421],{"class":443},"\"data.txt\"",[240,148423,1277],{"class":257},[240,148425,148426],{"class":443},"\"r\"",[240,148428,1277],{"class":257},[240,148430,148431],{"class":792},"encoding",[240,148433,440],{"class":288},[240,148435,148436],{"class":443},"\"utf-8\"",[240,148438,1230],{"class":257},[240,148440,33329],{"class":288},[240,148442,148443],{"class":257}," f:\n",[240,148445,148446,148449,148451],{"class":242,"line":250},[240,148447,148448],{"class":257},"    content ",[240,148450,440],{"class":288},[240,148452,148453],{"class":257}," f.read()\n",[14,148455,148457],{"id":148456},"_111-本章练习","1.11 本章练习",[1826,148459,148460,148463,148469],{},[1829,148461,148462],{},"安装 Python，并在终端输出版本号。",[1829,148464,148465,148466,148468],{},"新建 ",[23,148467,148023],{},"，输出自己的姓名、年龄、学习目标。",[1829,148470,106276,148471,148473],{},[23,148472,148097],{}," 输出下面格式：",[231,148475,148478],{"className":148476,"code":148477,"language":7139,"meta":236},[7137],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[23,148479,148477],{"__ignoreMap":236},[1826,148481,148482],{"start":277},[1829,148483,106276,148484,148486],{},[23,148485,148223],{}," 输出日期：",[231,148488,148491],{"className":148489,"code":148490,"language":7139,"meta":236},[7137],"2024-10-10\n",[23,148492,148490],{"__ignoreMap":236},[1826,148494,148495],{"start":294},[1829,148496,106276,148497,148499,148500,148502],{},[23,148498,47747],{}," 让两次 ",[23,148501,148097],{}," 输出在同一行。",[2019,148504,148505],{},"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":236,"searchDepth":250,"depth":250,"links":148507},[148508,148509,148510,148515,148516,148517,148521,148522,148523,148524,148529],{"id":147390,"depth":250,"text":147391},{"id":147434,"depth":250,"text":147435},{"id":147535,"depth":250,"text":147536,"children":148511},[148512,148513,148514],{"id":147539,"depth":261,"text":147540},{"id":147594,"depth":261,"text":147595},{"id":147630,"depth":261,"text":147631},{"id":147703,"depth":250,"text":147704},{"id":147848,"depth":250,"text":147849},{"id":147953,"depth":250,"text":147954,"children":148518},[148519,148520],{"id":147957,"depth":261,"text":147958},{"id":147986,"depth":261,"text":147987},{"id":148016,"depth":250,"text":148017},{"id":148091,"depth":250,"text":148092},{"id":148269,"depth":250,"text":148270},{"id":148351,"depth":250,"text":148352,"children":148525},[148526,148527,148528],{"id":148355,"depth":261,"text":148356},{"id":148381,"depth":261,"text":148382},{"id":148397,"depth":261,"text":148398},{"id":148456,"depth":250,"text":148457},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":147382,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":148536,"title":148537,"body":148538,"description":2048,"extension":2049,"meta":150942,"navigation":2051,"path":150943,"seo":150944,"stem":150945,"__hash__":150946},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":148539,"toc":150927},[148540,148543,148547,148550,148553,148570,148573,148615,148618,148622,148625,148628,148665,148668,148702,148705,148797,148801,148815,148818,148845,148848,148852,148955,148962,148965,148982,148986,148993,149182,149185,149258,149262,149265,149349,149352,149384,149388,149592,149595,149599,149605,149707,149710,149966,149970,149973,149976,149990,149992,150178,150182,150544,150550,150554,150557,150681,150684,150863,150866,150870,150903,150907,150924],[10,148541,148537],{"id":148542},"_10-json与pyecharts折线图",[14,148544,148546],{"id":148545},"_101-数据可视化","10.1 数据可视化",[19,148548,148549],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[19,148551,148552],{},"常见图表：",[1826,148554,148555,148558,148561,148564,148567],{},[1829,148556,148557],{},"折线图：看趋势。",[1829,148559,148560],{},"柱状图：看分类对比。",[1829,148562,148563],{},"饼图：看占比。",[1829,148565,148566],{},"地图：看地域分布。",[1829,148568,148569],{},"散点图：看两个变量之间的关系。",[19,148571,148572],{},"Python 可视化常用库：",[802,148574,148575,148583],{},[805,148576,148577],{},[808,148578,148579,148581],{},[811,148580,147786],{},[811,148582,25686],{},[819,148584,148585,148592,148600,148607],{},[808,148586,148587,148589],{},[824,148588,147818],{},[824,148590,148591],{},"基础、经典、可定制",[808,148593,148594,148597],{},[824,148595,148596],{},"seaborn",[824,148598,148599],{},"统计图表更美观",[808,148601,148602,148604],{},[824,148603,147826],{},[824,148605,148606],{},"生成交互式网页图表",[808,148608,148609,148612],{},[824,148610,148611],{},"plotly",[824,148613,148614],{},"交互图表能力强",[19,148616,148617],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[14,148619,148621],{"id":148620},"_102-json回顾","10.2 JSON回顾",[19,148623,148624],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[19,148626,148627],{},"Python 字典：",[231,148629,148631],{"className":32324,"code":148630,"language":32326,"meta":236,"style":236},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[23,148632,148633,148641,148652,148661],{"__ignoreMap":236},[240,148634,148635,148637,148639],{"class":242,"line":243},[240,148636,103569],{"class":257},[240,148638,440],{"class":288},[240,148640,258],{"class":257},[240,148642,148643,148646,148648,148650],{"class":242,"line":250},[240,148644,148645],{"class":443},"    \"name\"",[240,148647,268],{"class":257},[240,148649,71192],{"class":443},[240,148651,33412],{"class":257},[240,148653,148654,148657,148659],{"class":242,"line":261},[240,148655,148656],{"class":443},"    \"value\"",[240,148658,268],{"class":257},[240,148660,99371],{"class":264},[240,148662,148663],{"class":242,"line":277},[240,148664,312],{"class":257},[19,148666,148667],{},"JSON 字符串：",[231,148669,148672],{"className":148670,"code":148671,"language":147417,"meta":236,"style":236},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[23,148673,148674,148678,148689,148698],{"__ignoreMap":236},[240,148675,148676],{"class":242,"line":243},[240,148677,3504],{"class":257},[240,148679,148680,148683,148685,148687],{"class":242,"line":250},[240,148681,148682],{"class":264},"  \"name\"",[240,148684,268],{"class":257},[240,148686,71192],{"class":443},[240,148688,33412],{"class":257},[240,148690,148691,148694,148696],{"class":242,"line":261},[240,148692,148693],{"class":264},"  \"value\"",[240,148695,268],{"class":257},[240,148697,99371],{"class":264},[240,148699,148700],{"class":242,"line":277},[240,148701,312],{"class":257},[19,148703,148704],{},"Python 与 JSON 的转换：",[231,148706,148708],{"className":32324,"code":148707,"language":32326,"meta":236,"style":236},"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",[23,148709,148710,148717,148721,148746,148750,148769,148776,148780,148790],{"__ignoreMap":236},[240,148711,148712,148714],{"class":242,"line":243},[240,148713,32338],{"class":288},[240,148715,148716],{"class":257}," json\n",[240,148718,148719],{"class":242,"line":250},[240,148720,4353],{"emptyLinePlaceholder":2051},[240,148722,148723,148725,148727,148729,148731,148733,148735,148737,148740,148742,148744],{"class":242,"line":261},[240,148724,103569],{"class":257},[240,148726,440],{"class":288},[240,148728,6400],{"class":257},[240,148730,64602],{"class":443},[240,148732,268],{"class":257},[240,148734,71192],{"class":443},[240,148736,1277],{"class":257},[240,148738,148739],{"class":443},"\"value\"",[240,148741,268],{"class":257},[240,148743,285],{"class":264},[240,148745,312],{"class":257},[240,148747,148748],{"class":242,"line":277},[240,148749,4353],{"emptyLinePlaceholder":2051},[240,148751,148752,148755,148757,148760,148763,148765,148767],{"class":242,"line":294},[240,148753,148754],{"class":257},"json_text ",[240,148756,440],{"class":288},[240,148758,148759],{"class":257}," json.dumps(data, ",[240,148761,148762],{"class":792},"ensure_ascii",[240,148764,440],{"class":288},[240,148766,35933],{"class":264},[240,148768,2129],{"class":257},[240,148770,148771,148773],{"class":242,"line":309},[240,148772,32361],{"class":264},[240,148774,148775],{"class":257},"(json_text)\n",[240,148777,148778],{"class":242,"line":529},[240,148779,4353],{"emptyLinePlaceholder":2051},[240,148781,148782,148785,148787],{"class":242,"line":549},[240,148783,148784],{"class":257},"new_data ",[240,148786,440],{"class":288},[240,148788,148789],{"class":257}," json.loads(json_text)\n",[240,148791,148792,148794],{"class":242,"line":569},[240,148793,32361],{"class":264},[240,148795,148796],{"class":257},"(new_data)\n",[14,148798,148800],{"id":148799},"_103-安装pyecharts","10.3 安装pyecharts",[231,148802,148804],{"className":25768,"code":148803,"language":25770,"meta":236,"style":236},"pip install pyecharts\n",[23,148805,148806],{"__ignoreMap":236},[240,148807,148808,148810,148812],{"class":242,"line":243},[240,148809,25777],{"class":436},[240,148811,25780],{"class":443},[240,148813,148814],{"class":443}," pyecharts\n",[19,148816,148817],{},"验证：",[231,148819,148821],{"className":32324,"code":148820,"language":32326,"meta":236,"style":236},"import pyecharts\n\nprint(pyecharts.__version__)\n",[23,148822,148823,148829,148833],{"__ignoreMap":236},[240,148824,148825,148827],{"class":242,"line":243},[240,148826,32338],{"class":288},[240,148828,148814],{"class":257},[240,148830,148831],{"class":242,"line":250},[240,148832,4353],{"emptyLinePlaceholder":2051},[240,148834,148835,148837,148840,148843],{"class":242,"line":261},[240,148836,32361],{"class":264},[240,148838,148839],{"class":257},"(pyecharts.",[240,148841,148842],{"class":264},"__version__",[240,148844,2129],{"class":257},[19,148846,148847],{},"如果使用虚拟环境，要先激活环境再安装。",[14,148849,148851],{"id":148850},"_104-第一个折线图","10.4 第一个折线图",[231,148853,148855],{"className":32324,"code":148854,"language":32326,"meta":236,"style":236},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[23,148856,148857,148869,148873,148883,148913,148945],{"__ignoreMap":236},[240,148858,148859,148861,148864,148866],{"class":242,"line":243},[240,148860,32683],{"class":288},[240,148862,148863],{"class":257}," pyecharts.charts ",[240,148865,32338],{"class":288},[240,148867,148868],{"class":257}," Line\n",[240,148870,148871],{"class":242,"line":250},[240,148872,4353],{"emptyLinePlaceholder":2051},[240,148874,148875,148878,148880],{"class":242,"line":261},[240,148876,148877],{"class":257},"line ",[240,148879,440],{"class":288},[240,148881,148882],{"class":257}," Line()\n",[240,148884,148885,148888,148891,148893,148896,148898,148901,148903,148906,148908,148911],{"class":242,"line":277},[240,148886,148887],{"class":257},"line.add_xaxis([",[240,148889,148890],{"class":443},"\"周一\"",[240,148892,1277],{"class":257},[240,148894,148895],{"class":443},"\"周二\"",[240,148897,1277],{"class":257},[240,148899,148900],{"class":443},"\"周三\"",[240,148902,1277],{"class":257},[240,148904,148905],{"class":443},"\"周四\"",[240,148907,1277],{"class":257},[240,148909,148910],{"class":443},"\"周五\"",[240,148912,6609],{"class":257},[240,148914,148915,148918,148921,148923,148925,148927,148929,148931,148933,148935,148938,148940,148943],{"class":242,"line":294},[240,148916,148917],{"class":257},"line.add_yaxis(",[240,148919,148920],{"class":443},"\"销售额\"",[240,148922,79432],{"class":257},[240,148924,285],{"class":264},[240,148926,1277],{"class":257},[240,148928,1575],{"class":264},[240,148930,1277],{"class":257},[240,148932,2957],{"class":264},[240,148934,1277],{"class":257},[240,148936,148937],{"class":264},"150",[240,148939,1277],{"class":257},[240,148941,148942],{"class":264},"180",[240,148944,6609],{"class":257},[240,148946,148947,148950,148953],{"class":242,"line":309},[240,148948,148949],{"class":257},"line.render(",[240,148951,148952],{"class":443},"\"line.html\"",[240,148954,2129],{"class":257},[19,148956,148957,148958,148961],{},"运行后会生成 ",[23,148959,148960],{},"line.html","，用浏览器打开即可看到图表。",[19,148963,148964],{},"核心步骤：",[1826,148966,148967,148970,148973,148976,148979],{},[1829,148968,148969],{},"导入图表类。",[1829,148971,148972],{},"创建图表对象。",[1829,148974,148975],{},"添加 x 轴数据。",[1829,148977,148978],{},"添加 y 轴数据。",[1829,148980,148981],{},"渲染为 HTML。",[14,148983,148985],{"id":148984},"_105-全局配置","10.5 全局配置",[19,148987,148988,148989,148992],{},"常用配置在 ",[23,148990,148991],{},"pyecharts.options"," 中。",[231,148994,148996],{"className":32324,"code":148995,"language":32326,"meta":236,"style":236},"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",[23,148997,148998,149015,149025,149029,149037,149061,149089,149094,149113,149132,149150,149170,149174],{"__ignoreMap":236},[240,148999,149000,149002,149005,149007,149010,149012],{"class":242,"line":243},[240,149001,32683],{"class":288},[240,149003,149004],{"class":257}," pyecharts ",[240,149006,32338],{"class":288},[240,149008,149009],{"class":257}," options ",[240,149011,33329],{"class":288},[240,149013,149014],{"class":257}," opts\n",[240,149016,149017,149019,149021,149023],{"class":242,"line":250},[240,149018,32683],{"class":288},[240,149020,148863],{"class":257},[240,149022,32338],{"class":288},[240,149024,148868],{"class":257},[240,149026,149027],{"class":242,"line":261},[240,149028,4353],{"emptyLinePlaceholder":2051},[240,149030,149031,149033,149035],{"class":242,"line":277},[240,149032,148877],{"class":257},[240,149034,440],{"class":288},[240,149036,148882],{"class":257},[240,149038,149039,149041,149043,149045,149047,149049,149051,149053,149055,149057,149059],{"class":242,"line":294},[240,149040,148887],{"class":257},[240,149042,148890],{"class":443},[240,149044,1277],{"class":257},[240,149046,148895],{"class":443},[240,149048,1277],{"class":257},[240,149050,148900],{"class":443},[240,149052,1277],{"class":257},[240,149054,148905],{"class":443},[240,149056,1277],{"class":257},[240,149058,148910],{"class":443},[240,149060,6609],{"class":257},[240,149062,149063,149065,149067,149069,149071,149073,149075,149077,149079,149081,149083,149085,149087],{"class":242,"line":309},[240,149064,148917],{"class":257},[240,149066,148920],{"class":443},[240,149068,79432],{"class":257},[240,149070,285],{"class":264},[240,149072,1277],{"class":257},[240,149074,1575],{"class":264},[240,149076,1277],{"class":257},[240,149078,2957],{"class":264},[240,149080,1277],{"class":257},[240,149082,148937],{"class":264},[240,149084,1277],{"class":257},[240,149086,148942],{"class":264},[240,149088,6609],{"class":257},[240,149090,149091],{"class":242,"line":529},[240,149092,149093],{"class":257},"line.set_global_opts(\n",[240,149095,149096,149099,149101,149104,149106,149108,149111],{"class":242,"line":549},[240,149097,149098],{"class":792},"    title_opts",[240,149100,440],{"class":288},[240,149102,149103],{"class":257},"opts.TitleOpts(",[240,149105,53351],{"class":792},[240,149107,440],{"class":288},[240,149109,149110],{"class":443},"\"一周销售额\"",[240,149112,39993],{"class":257},[240,149114,149115,149118,149120,149123,149125,149127,149130],{"class":242,"line":569},[240,149116,149117],{"class":792},"    xaxis_opts",[240,149119,440],{"class":288},[240,149121,149122],{"class":257},"opts.AxisOpts(",[240,149124,81724],{"class":792},[240,149126,440],{"class":288},[240,149128,149129],{"class":443},"\"日期\"",[240,149131,39993],{"class":257},[240,149133,149134,149137,149139,149141,149143,149145,149148],{"class":242,"line":589},[240,149135,149136],{"class":792},"    yaxis_opts",[240,149138,440],{"class":288},[240,149140,149122],{"class":257},[240,149142,81724],{"class":792},[240,149144,440],{"class":288},[240,149146,149147],{"class":443},"\"金额\"",[240,149149,39993],{"class":257},[240,149151,149152,149155,149157,149160,149163,149165,149168],{"class":242,"line":715},[240,149153,149154],{"class":792},"    tooltip_opts",[240,149156,440],{"class":288},[240,149158,149159],{"class":257},"opts.TooltipOpts(",[240,149161,149162],{"class":792},"trigger",[240,149164,440],{"class":288},[240,149166,149167],{"class":443},"\"axis\"",[240,149169,39993],{"class":257},[240,149171,149172],{"class":242,"line":727},[240,149173,2129],{"class":257},[240,149175,149176,149178,149180],{"class":242,"line":1730},[240,149177,148949],{"class":257},[240,149179,148952],{"class":443},[240,149181,2129],{"class":257},[19,149183,149184],{},"常见全局配置：",[802,149186,149187,149196],{},[805,149188,149189],{},[808,149190,149191,149194],{},[811,149192,149193],{},"配置",[811,149195,817],{},[819,149197,149198,149208,149218,149228,149238,149248],{},[808,149199,149200,149205],{},[824,149201,149202],{},[23,149203,149204],{},"TitleOpts",[824,149206,149207],{},"标题",[808,149209,149210,149215],{},[824,149211,149212],{},[23,149213,149214],{},"LegendOpts",[824,149216,149217],{},"图例",[808,149219,149220,149225],{},[824,149221,149222],{},[23,149223,149224],{},"TooltipOpts",[824,149226,149227],{},"提示框",[808,149229,149230,149235],{},[824,149231,149232],{},[23,149233,149234],{},"AxisOpts",[824,149236,149237],{},"坐标轴",[808,149239,149240,149245],{},[824,149241,149242],{},[23,149243,149244],{},"VisualMapOpts",[824,149246,149247],{},"视觉映射",[808,149249,149250,149255],{},[824,149251,149252],{},[23,149253,149254],{},"DataZoomOpts",[824,149256,149257],{},"区域缩放",[14,149259,149261],{"id":149260},"_106-系列配置","10.6 系列配置",[19,149263,149264],{},"系列配置作用于某一组数据。",[231,149266,149268],{"className":32324,"code":149267,"language":32326,"meta":236,"style":236},"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",[23,149269,149270,149275,149286,149315,149326,149345],{"__ignoreMap":236},[240,149271,149272],{"class":242,"line":243},[240,149273,149274],{"class":257},"line.add_yaxis(\n",[240,149276,149277,149280,149282,149284],{"class":242,"line":250},[240,149278,149279],{"class":792},"    series_name",[240,149281,440],{"class":288},[240,149283,148920],{"class":443},[240,149285,33412],{"class":257},[240,149287,149288,149291,149293,149295,149297,149299,149301,149303,149305,149307,149309,149311,149313],{"class":242,"line":261},[240,149289,149290],{"class":792},"    y_axis",[240,149292,440],{"class":288},[240,149294,2985],{"class":257},[240,149296,285],{"class":264},[240,149298,1277],{"class":257},[240,149300,1575],{"class":264},[240,149302,1277],{"class":257},[240,149304,2957],{"class":264},[240,149306,1277],{"class":257},[240,149308,148937],{"class":264},[240,149310,1277],{"class":257},[240,149312,148942],{"class":264},[240,149314,89749],{"class":257},[240,149316,149317,149320,149322,149324],{"class":242,"line":277},[240,149318,149319],{"class":792},"    is_smooth",[240,149321,440],{"class":288},[240,149323,33422],{"class":264},[240,149325,33412],{"class":257},[240,149327,149328,149331,149333,149336,149339,149341,149343],{"class":242,"line":294},[240,149329,149330],{"class":792},"    label_opts",[240,149332,440],{"class":288},[240,149334,149335],{"class":257},"opts.LabelOpts(",[240,149337,149338],{"class":792},"is_show",[240,149340,440],{"class":288},[240,149342,33422],{"class":264},[240,149344,39993],{"class":257},[240,149346,149347],{"class":242,"line":309},[240,149348,2129],{"class":257},[19,149350,149351],{},"常用参数：",[1826,149353,149354,149360,149366,149372,149378],{},[1829,149355,149356,149359],{},[23,149357,149358],{},"series_name","：系列名称。",[1829,149361,149362,149365],{},[23,149363,149364],{},"y_axis","：y 轴数据。",[1829,149367,149368,149371],{},[23,149369,149370],{},"is_smooth","：是否平滑曲线。",[1829,149373,149374,149377],{},[23,149375,149376],{},"label_opts","：标签配置。",[1829,149379,149380,149383],{},[23,149381,149382],{},"symbol_size","：标记点大小。",[14,149385,149387],{"id":149386},"_107-多条折线","10.7 多条折线",[231,149389,149391],{"className":32324,"code":149390,"language":32326,"meta":236,"style":236},"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",[23,149392,149393,149407,149417,149421,149450,149454,149462,149467,149505,149542,149546,149563,149579,149583],{"__ignoreMap":236},[240,149394,149395,149397,149399,149401,149403,149405],{"class":242,"line":243},[240,149396,32683],{"class":288},[240,149398,149004],{"class":257},[240,149400,32338],{"class":288},[240,149402,149009],{"class":257},[240,149404,33329],{"class":288},[240,149406,149014],{"class":257},[240,149408,149409,149411,149413,149415],{"class":242,"line":250},[240,149410,32683],{"class":288},[240,149412,148863],{"class":257},[240,149414,32338],{"class":288},[240,149416,148868],{"class":257},[240,149418,149419],{"class":242,"line":261},[240,149420,4353],{"emptyLinePlaceholder":2051},[240,149422,149423,149426,149428,149430,149432,149434,149436,149438,149440,149442,149444,149446,149448],{"class":242,"line":277},[240,149424,149425],{"class":257},"dates ",[240,149427,440],{"class":288},[240,149429,54162],{"class":257},[240,149431,148890],{"class":443},[240,149433,1277],{"class":257},[240,149435,148895],{"class":443},[240,149437,1277],{"class":257},[240,149439,148900],{"class":443},[240,149441,1277],{"class":257},[240,149443,148905],{"class":443},[240,149445,1277],{"class":257},[240,149447,148910],{"class":443},[240,149449,35192],{"class":257},[240,149451,149452],{"class":242,"line":294},[240,149453,4353],{"emptyLinePlaceholder":2051},[240,149455,149456,149458,149460],{"class":242,"line":309},[240,149457,148877],{"class":257},[240,149459,440],{"class":288},[240,149461,148882],{"class":257},[240,149463,149464],{"class":242,"line":529},[240,149465,149466],{"class":257},"line.add_xaxis(dates)\n",[240,149468,149469,149471,149474,149476,149478,149480,149483,149485,149487,149489,149491,149493,149495,149497,149499,149501,149503],{"class":242,"line":549},[240,149470,148917],{"class":257},[240,149472,149473],{"class":443},"\"线上销售\"",[240,149475,79432],{"class":257},[240,149477,285],{"class":264},[240,149479,1277],{"class":257},[240,149481,149482],{"class":264},"130",[240,149484,1277],{"class":257},[240,149486,1575],{"class":264},[240,149488,1277],{"class":257},[240,149490,22995],{"class":264},[240,149492,1277],{"class":257},[240,149494,3676],{"class":264},[240,149496,114112],{"class":257},[240,149498,149370],{"class":792},[240,149500,440],{"class":288},[240,149502,33422],{"class":264},[240,149504,2129],{"class":257},[240,149506,149507,149509,149512,149514,149516,149518,149520,149522,149524,149526,149528,149530,149532,149534,149536,149538,149540],{"class":242,"line":569},[240,149508,148917],{"class":257},[240,149510,149511],{"class":443},"\"线下销售\"",[240,149513,79432],{"class":257},[240,149515,386],{"class":264},[240,149517,1277],{"class":257},[240,149519,2957],{"class":264},[240,149521,1277],{"class":257},[240,149523,285],{"class":264},[240,149525,1277],{"class":257},[240,149527,1575],{"class":264},[240,149529,1277],{"class":257},[240,149531,148937],{"class":264},[240,149533,114112],{"class":257},[240,149535,149370],{"class":792},[240,149537,440],{"class":288},[240,149539,33422],{"class":264},[240,149541,2129],{"class":257},[240,149543,149544],{"class":242,"line":589},[240,149545,149093],{"class":257},[240,149547,149548,149550,149552,149554,149556,149558,149561],{"class":242,"line":715},[240,149549,149098],{"class":792},[240,149551,440],{"class":288},[240,149553,149103],{"class":257},[240,149555,53351],{"class":792},[240,149557,440],{"class":288},[240,149559,149560],{"class":443},"\"线上线下销售趋势\"",[240,149562,39993],{"class":257},[240,149564,149565,149567,149569,149571,149573,149575,149577],{"class":242,"line":727},[240,149566,149154],{"class":792},[240,149568,440],{"class":288},[240,149570,149159],{"class":257},[240,149572,149162],{"class":792},[240,149574,440],{"class":288},[240,149576,149167],{"class":443},[240,149578,39993],{"class":257},[240,149580,149581],{"class":242,"line":1730},[240,149582,2129],{"class":257},[240,149584,149585,149587,149590],{"class":242,"line":3582},[240,149586,148949],{"class":257},[240,149588,149589],{"class":443},"\"sales.html\"",[240,149591,2129],{"class":257},[19,149593,149594],{},"多条折线适合比较不同指标或不同地区。",[14,149596,149598],{"id":149597},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[19,149600,149601,149602,26565],{},"假设 ",[23,149603,149604],{},"sales.json",[231,149606,149608],{"className":148670,"code":149607,"language":147417,"meta":236,"style":236},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[23,149609,149610,149615,149647,149675,149703],{"__ignoreMap":236},[240,149611,149612],{"class":242,"line":243},[240,149613,149614],{"class":257},"[\n",[240,149616,149617,149620,149623,149625,149627,149629,149632,149634,149636,149638,149641,149643,149645],{"class":242,"line":250},[240,149618,149619],{"class":257},"  {",[240,149621,149622],{"class":264},"\"date\"",[240,149624,268],{"class":257},[240,149626,148890],{"class":443},[240,149628,1277],{"class":257},[240,149630,149631],{"class":264},"\"online\"",[240,149633,268],{"class":257},[240,149635,285],{"class":264},[240,149637,1277],{"class":257},[240,149639,149640],{"class":264},"\"offline\"",[240,149642,268],{"class":257},[240,149644,386],{"class":264},[240,149646,6882],{"class":257},[240,149648,149649,149651,149653,149655,149657,149659,149661,149663,149665,149667,149669,149671,149673],{"class":242,"line":261},[240,149650,149619],{"class":257},[240,149652,149622],{"class":264},[240,149654,268],{"class":257},[240,149656,148895],{"class":443},[240,149658,1277],{"class":257},[240,149660,149631],{"class":264},[240,149662,268],{"class":257},[240,149664,149482],{"class":264},[240,149666,1277],{"class":257},[240,149668,149640],{"class":264},[240,149670,268],{"class":257},[240,149672,2957],{"class":264},[240,149674,6882],{"class":257},[240,149676,149677,149679,149681,149683,149685,149687,149689,149691,149693,149695,149697,149699,149701],{"class":242,"line":277},[240,149678,149619],{"class":257},[240,149680,149622],{"class":264},[240,149682,268],{"class":257},[240,149684,148900],{"class":443},[240,149686,1277],{"class":257},[240,149688,149631],{"class":264},[240,149690,268],{"class":257},[240,149692,1575],{"class":264},[240,149694,1277],{"class":257},[240,149696,149640],{"class":264},[240,149698,268],{"class":257},[240,149700,285],{"class":264},[240,149702,312],{"class":257},[240,149704,149705],{"class":242,"line":294},[240,149706,35192],{"class":257},[19,149708,149709],{},"读取并绘图：",[231,149711,149713],{"className":32324,"code":149712,"language":32326,"meta":236,"style":236},"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",[23,149714,149715,149721,149735,149745,149749,149781,149794,149798,149806,149815,149824,149828,149840,149849,149858,149867,149871,149879,149883,149900,149917,149921,149938,149954,149958],{"__ignoreMap":236},[240,149716,149717,149719],{"class":242,"line":243},[240,149718,32338],{"class":288},[240,149720,148716],{"class":257},[240,149722,149723,149725,149727,149729,149731,149733],{"class":242,"line":250},[240,149724,32683],{"class":288},[240,149726,149004],{"class":257},[240,149728,32338],{"class":288},[240,149730,149009],{"class":257},[240,149732,33329],{"class":288},[240,149734,149014],{"class":257},[240,149736,149737,149739,149741,149743],{"class":242,"line":261},[240,149738,32683],{"class":288},[240,149740,148863],{"class":257},[240,149742,32338],{"class":288},[240,149744,148868],{"class":257},[240,149746,149747],{"class":242,"line":277},[240,149748,4353],{"emptyLinePlaceholder":2051},[240,149750,149751,149753,149755,149757,149760,149762,149764,149766,149768,149770,149772,149774,149776,149779],{"class":242,"line":294},[240,149752,109743],{"class":288},[240,149754,148416],{"class":264},[240,149756,789],{"class":257},[240,149758,149759],{"class":443},"\"sales.json\"",[240,149761,1277],{"class":257},[240,149763,148426],{"class":443},[240,149765,1277],{"class":257},[240,149767,148431],{"class":792},[240,149769,440],{"class":288},[240,149771,148436],{"class":443},[240,149773,1230],{"class":257},[240,149775,33329],{"class":288},[240,149777,149778],{"class":792}," file",[240,149780,5691],{"class":257},[240,149782,149783,149785,149787,149790,149792],{"class":242,"line":309},[240,149784,103332],{"class":257},[240,149786,440],{"class":288},[240,149788,149789],{"class":257}," json.load(",[240,149791,47300],{"class":792},[240,149793,2129],{"class":257},[240,149795,149796],{"class":242,"line":529},[240,149797,4353],{"emptyLinePlaceholder":2051},[240,149799,149800,149802,149804],{"class":242,"line":549},[240,149801,149425],{"class":257},[240,149803,440],{"class":288},[240,149805,53776],{"class":257},[240,149807,149808,149811,149813],{"class":242,"line":569},[240,149809,149810],{"class":257},"online_sales ",[240,149812,440],{"class":288},[240,149814,53776],{"class":257},[240,149816,149817,149820,149822],{"class":242,"line":589},[240,149818,149819],{"class":257},"offline_sales ",[240,149821,440],{"class":288},[240,149823,53776],{"class":257},[240,149825,149826],{"class":242,"line":715},[240,149827,4353],{"emptyLinePlaceholder":2051},[240,149829,149830,149832,149835,149837],{"class":242,"line":727},[240,149831,4977],{"class":288},[240,149833,149834],{"class":257}," item ",[240,149836,27989],{"class":288},[240,149838,149839],{"class":257}," data:\n",[240,149841,149842,149845,149847],{"class":242,"line":1730},[240,149843,149844],{"class":257},"    dates.append(item[",[240,149846,149622],{"class":443},[240,149848,6609],{"class":257},[240,149850,149851,149854,149856],{"class":242,"line":3582},[240,149852,149853],{"class":257},"    online_sales.append(item[",[240,149855,149631],{"class":443},[240,149857,6609],{"class":257},[240,149859,149860,149863,149865],{"class":242,"line":3596},[240,149861,149862],{"class":257},"    offline_sales.append(item[",[240,149864,149640],{"class":443},[240,149866,6609],{"class":257},[240,149868,149869],{"class":242,"line":3601},[240,149870,4353],{"emptyLinePlaceholder":2051},[240,149872,149873,149875,149877],{"class":242,"line":3607},[240,149874,148877],{"class":257},[240,149876,440],{"class":288},[240,149878,148882],{"class":257},[240,149880,149881],{"class":242,"line":3628},[240,149882,149466],{"class":257},[240,149884,149885,149887,149889,149892,149894,149896,149898],{"class":242,"line":3633},[240,149886,148917],{"class":257},[240,149888,149473],{"class":443},[240,149890,149891],{"class":257},", online_sales, ",[240,149893,149370],{"class":792},[240,149895,440],{"class":288},[240,149897,33422],{"class":264},[240,149899,2129],{"class":257},[240,149901,149902,149904,149906,149909,149911,149913,149915],{"class":242,"line":3647},[240,149903,148917],{"class":257},[240,149905,149511],{"class":443},[240,149907,149908],{"class":257},", offline_sales, ",[240,149910,149370],{"class":792},[240,149912,440],{"class":288},[240,149914,33422],{"class":264},[240,149916,2129],{"class":257},[240,149918,149919],{"class":242,"line":3652},[240,149920,149093],{"class":257},[240,149922,149923,149925,149927,149929,149931,149933,149936],{"class":242,"line":3681},[240,149924,149098],{"class":792},[240,149926,440],{"class":288},[240,149928,149103],{"class":257},[240,149930,53351],{"class":792},[240,149932,440],{"class":288},[240,149934,149935],{"class":443},"\"销售趋势\"",[240,149937,39993],{"class":257},[240,149939,149940,149942,149944,149946,149948,149950,149952],{"class":242,"line":3686},[240,149941,149154],{"class":792},[240,149943,440],{"class":288},[240,149945,149159],{"class":257},[240,149947,149162],{"class":792},[240,149949,440],{"class":288},[240,149951,149167],{"class":443},[240,149953,39993],{"class":257},[240,149955,149956],{"class":242,"line":3703},[240,149957,2129],{"class":257},[240,149959,149960,149962,149964],{"class":242,"line":3708},[240,149961,148949],{"class":257},[240,149963,149589],{"class":443},[240,149965,2129],{"class":257},[14,149967,149969],{"id":149968},"_109-数据清洗","10.9 数据清洗",[19,149971,149972],{},"真实数据经常不整齐，需要清洗。",[19,149974,149975],{},"常见问题：",[1826,149977,149978,149981,149984,149987],{},[1829,149979,149980],{},"数字是字符串。",[1829,149982,149983],{},"字段缺失。",[1829,149985,149986],{},"空值。",[1829,149988,149989],{},"日期格式不统一。",[19,149991,17084],{},[231,149993,149995],{"className":32324,"code":149994,"language":32326,"meta":236,"style":236},"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",[23,149996,149997,150006,150029,150049,150070,150074,150078,150086,150095,150099,150110,150124,150133,150138,150142,150150,150160,150164,150171],{"__ignoreMap":236},[240,149998,149999,150002,150004],{"class":242,"line":243},[240,150000,150001],{"class":257},"raw_data ",[240,150003,440],{"class":288},[240,150005,57380],{"class":257},[240,150007,150008,150011,150013,150015,150017,150019,150022,150024,150027],{"class":242,"line":250},[240,150009,150010],{"class":257},"    {",[240,150012,149622],{"class":443},[240,150014,268],{"class":257},[240,150016,148890],{"class":443},[240,150018,1277],{"class":257},[240,150020,150021],{"class":443},"\"sales\"",[240,150023,268],{"class":257},[240,150025,150026],{"class":443},"\"100\"",[240,150028,6882],{"class":257},[240,150030,150031,150033,150035,150037,150039,150041,150043,150045,150047],{"class":242,"line":261},[240,150032,150010],{"class":257},[240,150034,149622],{"class":443},[240,150036,268],{"class":257},[240,150038,148895],{"class":443},[240,150040,1277],{"class":257},[240,150042,150021],{"class":443},[240,150044,268],{"class":257},[240,150046,9603],{"class":443},[240,150048,6882],{"class":257},[240,150050,150051,150053,150055,150057,150059,150061,150063,150065,150068],{"class":242,"line":277},[240,150052,150010],{"class":257},[240,150054,149622],{"class":443},[240,150056,268],{"class":257},[240,150058,148900],{"class":443},[240,150060,1277],{"class":257},[240,150062,150021],{"class":443},[240,150064,268],{"class":257},[240,150066,150067],{"class":443},"\"120\"",[240,150069,6882],{"class":257},[240,150071,150072],{"class":242,"line":294},[240,150073,35192],{"class":257},[240,150075,150076],{"class":242,"line":309},[240,150077,4353],{"emptyLinePlaceholder":2051},[240,150079,150080,150082,150084],{"class":242,"line":529},[240,150081,149425],{"class":257},[240,150083,440],{"class":288},[240,150085,53776],{"class":257},[240,150087,150088,150091,150093],{"class":242,"line":549},[240,150089,150090],{"class":257},"sales ",[240,150092,440],{"class":288},[240,150094,53776],{"class":257},[240,150096,150097],{"class":242,"line":569},[240,150098,4353],{"emptyLinePlaceholder":2051},[240,150100,150101,150103,150105,150107],{"class":242,"line":589},[240,150102,4977],{"class":288},[240,150104,149834],{"class":257},[240,150106,27989],{"class":288},[240,150108,150109],{"class":257}," raw_data:\n",[240,150111,150112,150115,150117,150120,150122],{"class":242,"line":715},[240,150113,150114],{"class":257},"    value ",[240,150116,440],{"class":288},[240,150118,150119],{"class":257}," item.get(",[240,150121,150021],{"class":443},[240,150123,2129],{"class":257},[240,150125,150126,150128,150130],{"class":242,"line":727},[240,150127,5053],{"class":288},[240,150129,40876],{"class":288},[240,150131,150132],{"class":257}," value:\n",[240,150134,150135],{"class":242,"line":1730},[240,150136,150137],{"class":288},"        continue\n",[240,150139,150140],{"class":242,"line":3582},[240,150141,4353],{"emptyLinePlaceholder":2051},[240,150143,150144,150146,150148],{"class":242,"line":3596},[240,150145,149844],{"class":257},[240,150147,149622],{"class":443},[240,150149,6609],{"class":257},[240,150151,150152,150155,150157],{"class":242,"line":3601},[240,150153,150154],{"class":257},"    sales.append(",[240,150156,2126],{"class":264},[240,150158,150159],{"class":257},"(value))\n",[240,150161,150162],{"class":242,"line":3607},[240,150163,4353],{"emptyLinePlaceholder":2051},[240,150165,150166,150168],{"class":242,"line":3628},[240,150167,32361],{"class":264},[240,150169,150170],{"class":257},"(dates)\n",[240,150172,150173,150175],{"class":242,"line":3633},[240,150174,32361],{"class":264},[240,150176,150177],{"class":257},"(sales)\n",[14,150179,150181],{"id":150180},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[231,150183,150185],{"className":32324,"code":150184,"language":32326,"meta":236,"style":236},"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",[23,150186,150187,150201,150211,150215,150223,150244,150266,150288,150310,150332,150336,150340,150362,150383,150387,150395,150399,150403,150413,150422,150432,150448,150452,150456,150473,150489,150505,150521,150531,150535],{"__ignoreMap":236},[240,150188,150189,150191,150193,150195,150197,150199],{"class":242,"line":243},[240,150190,32683],{"class":288},[240,150192,149004],{"class":257},[240,150194,32338],{"class":288},[240,150196,149009],{"class":257},[240,150198,33329],{"class":288},[240,150200,149014],{"class":257},[240,150202,150203,150205,150207,150209],{"class":242,"line":250},[240,150204,32683],{"class":288},[240,150206,148863],{"class":257},[240,150208,32338],{"class":288},[240,150210,148868],{"class":257},[240,150212,150213],{"class":242,"line":261},[240,150214,4353],{"emptyLinePlaceholder":2051},[240,150216,150217,150219,150221],{"class":242,"line":277},[240,150218,150090],{"class":257},[240,150220,440],{"class":288},[240,150222,57380],{"class":257},[240,150224,150225,150227,150229,150231,150234,150236,150238,150240,150242],{"class":242,"line":294},[240,150226,150010],{"class":257},[240,150228,149622],{"class":443},[240,150230,268],{"class":257},[240,150232,150233],{"class":443},"\"2024-10-01\"",[240,150235,1277],{"class":257},[240,150237,85998],{"class":443},[240,150239,268],{"class":257},[240,150241,93936],{"class":264},[240,150243,6882],{"class":257},[240,150245,150246,150248,150250,150252,150255,150257,150259,150261,150264],{"class":242,"line":309},[240,150247,150010],{"class":257},[240,150249,149622],{"class":443},[240,150251,268],{"class":257},[240,150253,150254],{"class":443},"\"2024-10-02\"",[240,150256,1277],{"class":257},[240,150258,85998],{"class":443},[240,150260,268],{"class":257},[240,150262,150263],{"class":264},"1800",[240,150265,6882],{"class":257},[240,150267,150268,150270,150272,150274,150277,150279,150281,150283,150286],{"class":242,"line":529},[240,150269,150010],{"class":257},[240,150271,149622],{"class":443},[240,150273,268],{"class":257},[240,150275,150276],{"class":443},"\"2024-10-03\"",[240,150278,1277],{"class":257},[240,150280,85998],{"class":443},[240,150282,268],{"class":257},[240,150284,150285],{"class":264},"1500",[240,150287,6882],{"class":257},[240,150289,150290,150292,150294,150296,150299,150301,150303,150305,150308],{"class":242,"line":549},[240,150291,150010],{"class":257},[240,150293,149622],{"class":443},[240,150295,268],{"class":257},[240,150297,150298],{"class":443},"\"2024-10-04\"",[240,150300,1277],{"class":257},[240,150302,85998],{"class":443},[240,150304,268],{"class":257},[240,150306,150307],{"class":264},"2100",[240,150309,6882],{"class":257},[240,150311,150312,150314,150316,150318,150321,150323,150325,150327,150330],{"class":242,"line":569},[240,150313,150010],{"class":257},[240,150315,149622],{"class":443},[240,150317,268],{"class":257},[240,150319,150320],{"class":443},"\"2024-10-05\"",[240,150322,1277],{"class":257},[240,150324,85998],{"class":443},[240,150326,268],{"class":257},[240,150328,150329],{"class":264},"2600",[240,150331,6882],{"class":257},[240,150333,150334],{"class":242,"line":589},[240,150335,35192],{"class":257},[240,150337,150338],{"class":242,"line":715},[240,150339,4353],{"emptyLinePlaceholder":2051},[240,150341,150342,150344,150346,150349,150351,150353,150355,150357,150359],{"class":242,"line":727},[240,150343,149425],{"class":257},[240,150345,440],{"class":288},[240,150347,150348],{"class":257}," [item[",[240,150350,149622],{"class":443},[240,150352,6395],{"class":257},[240,150354,4977],{"class":288},[240,150356,149834],{"class":257},[240,150358,27989],{"class":288},[240,150360,150361],{"class":257}," sales]\n",[240,150363,150364,150367,150369,150371,150373,150375,150377,150379,150381],{"class":242,"line":1730},[240,150365,150366],{"class":257},"amounts ",[240,150368,440],{"class":288},[240,150370,150348],{"class":257},[240,150372,85998],{"class":443},[240,150374,6395],{"class":257},[240,150376,4977],{"class":288},[240,150378,149834],{"class":257},[240,150380,27989],{"class":288},[240,150382,150361],{"class":257},[240,150384,150385],{"class":242,"line":3582},[240,150386,4353],{"emptyLinePlaceholder":2051},[240,150388,150389,150391,150393],{"class":242,"line":3596},[240,150390,148877],{"class":257},[240,150392,440],{"class":288},[240,150394,148882],{"class":257},[240,150396,150397],{"class":242,"line":3601},[240,150398,149466],{"class":257},[240,150400,150401],{"class":242,"line":3607},[240,150402,149274],{"class":257},[240,150404,150405,150407,150409,150411],{"class":242,"line":3628},[240,150406,149279],{"class":792},[240,150408,440],{"class":288},[240,150410,148920],{"class":443},[240,150412,33412],{"class":257},[240,150414,150415,150417,150419],{"class":242,"line":3633},[240,150416,149290],{"class":792},[240,150418,440],{"class":288},[240,150420,150421],{"class":257},"amounts,\n",[240,150423,150424,150426,150428,150430],{"class":242,"line":3647},[240,150425,149319],{"class":792},[240,150427,440],{"class":288},[240,150429,33422],{"class":264},[240,150431,33412],{"class":257},[240,150433,150434,150436,150438,150440,150442,150444,150446],{"class":242,"line":3652},[240,150435,149330],{"class":792},[240,150437,440],{"class":288},[240,150439,149335],{"class":257},[240,150441,149338],{"class":792},[240,150443,440],{"class":288},[240,150445,33422],{"class":264},[240,150447,39993],{"class":257},[240,150449,150450],{"class":242,"line":3681},[240,150451,2129],{"class":257},[240,150453,150454],{"class":242,"line":3686},[240,150455,149093],{"class":257},[240,150457,150458,150460,150462,150464,150466,150468,150471],{"class":242,"line":3703},[240,150459,149098],{"class":792},[240,150461,440],{"class":288},[240,150463,149103],{"class":257},[240,150465,53351],{"class":792},[240,150467,440],{"class":288},[240,150469,150470],{"class":443},"\"每日销售额\"",[240,150472,39993],{"class":257},[240,150474,150475,150477,150479,150481,150483,150485,150487],{"class":242,"line":3708},[240,150476,149117],{"class":792},[240,150478,440],{"class":288},[240,150480,149122],{"class":257},[240,150482,81724],{"class":792},[240,150484,440],{"class":288},[240,150486,149129],{"class":443},[240,150488,39993],{"class":257},[240,150490,150491,150493,150495,150497,150499,150501,150503],{"class":242,"line":3713},[240,150492,149136],{"class":792},[240,150494,440],{"class":288},[240,150496,149122],{"class":257},[240,150498,81724],{"class":792},[240,150500,440],{"class":288},[240,150502,149147],{"class":443},[240,150504,39993],{"class":257},[240,150506,150507,150509,150511,150513,150515,150517,150519],{"class":242,"line":3718},[240,150508,149154],{"class":792},[240,150510,440],{"class":288},[240,150512,149159],{"class":257},[240,150514,149162],{"class":792},[240,150516,440],{"class":288},[240,150518,149167],{"class":443},[240,150520,39993],{"class":257},[240,150522,150523,150526,150528],{"class":242,"line":3732},[240,150524,150525],{"class":792},"    datazoom_opts",[240,150527,440],{"class":288},[240,150529,150530],{"class":257},"[opts.DataZoomOpts()],\n",[240,150532,150533],{"class":242,"line":3737},[240,150534,2129],{"class":257},[240,150536,150537,150539,150542],{"class":242,"line":4530},[240,150538,148949],{"class":257},[240,150540,150541],{"class":443},"\"daily_sales.html\"",[240,150543,2129],{"class":257},[19,150545,150546,150549],{},[23,150547,150548],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[14,150551,150553],{"id":150552},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[19,150555,150556],{},"如果数据结构如下：",[231,150558,150560],{"className":32324,"code":150559,"language":32326,"meta":236,"style":236},"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",[23,150561,150562,150570,150578,150600,150621,150626,150633,150653,150673,150677],{"__ignoreMap":236},[240,150563,150564,150566,150568],{"class":242,"line":243},[240,150565,103569],{"class":257},[240,150567,440],{"class":288},[240,150569,258],{"class":257},[240,150571,150572,150575],{"class":242,"line":250},[240,150573,150574],{"class":443},"    \"北京\"",[240,150576,150577],{"class":257},": [\n",[240,150579,150580,150582,150584,150586,150589,150591,150594,150596,150598],{"class":242,"line":261},[240,150581,6869],{"class":257},[240,150583,149622],{"class":443},[240,150585,268],{"class":257},[240,150587,150588],{"class":443},"\"2024-01-01\"",[240,150590,1277],{"class":257},[240,150592,150593],{"class":443},"\"confirm\"",[240,150595,268],{"class":257},[240,150597,2546],{"class":264},[240,150599,6882],{"class":257},[240,150601,150602,150604,150606,150608,150611,150613,150615,150617,150619],{"class":242,"line":277},[240,150603,6869],{"class":257},[240,150605,149622],{"class":443},[240,150607,268],{"class":257},[240,150609,150610],{"class":443},"\"2024-01-02\"",[240,150612,1277],{"class":257},[240,150614,150593],{"class":443},[240,150616,268],{"class":257},[240,150618,2597],{"class":264},[240,150620,6882],{"class":257},[240,150622,150623],{"class":242,"line":294},[240,150624,150625],{"class":257},"    ],\n",[240,150627,150628,150631],{"class":242,"line":309},[240,150629,150630],{"class":443},"    \"上海\"",[240,150632,150577],{"class":257},[240,150634,150635,150637,150639,150641,150643,150645,150647,150649,150651],{"class":242,"line":529},[240,150636,6869],{"class":257},[240,150638,149622],{"class":443},[240,150640,268],{"class":257},[240,150642,150588],{"class":443},[240,150644,1277],{"class":257},[240,150646,150593],{"class":443},[240,150648,268],{"class":257},[240,150650,2496],{"class":264},[240,150652,6882],{"class":257},[240,150654,150655,150657,150659,150661,150663,150665,150667,150669,150671],{"class":242,"line":549},[240,150656,6869],{"class":257},[240,150658,149622],{"class":443},[240,150660,268],{"class":257},[240,150662,150610],{"class":443},[240,150664,1277],{"class":257},[240,150666,150593],{"class":443},[240,150668,268],{"class":257},[240,150670,2622],{"class":264},[240,150672,6882],{"class":257},[240,150674,150675],{"class":242,"line":569},[240,150676,150625],{"class":257},[240,150678,150679],{"class":242,"line":589},[240,150680,312],{"class":257},[19,150682,150683],{},"绘制多地区趋势：",[231,150685,150687],{"className":32324,"code":150686,"language":32326,"meta":236,"style":236},"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",[23,150688,150689,150703,150713,150717,150742,150746,150754,150758,150762,150774,150796,150809,150813,150817,150834,150850,150854],{"__ignoreMap":236},[240,150690,150691,150693,150695,150697,150699,150701],{"class":242,"line":243},[240,150692,32683],{"class":288},[240,150694,149004],{"class":257},[240,150696,32338],{"class":288},[240,150698,149009],{"class":257},[240,150700,33329],{"class":288},[240,150702,149014],{"class":257},[240,150704,150705,150707,150709,150711],{"class":242,"line":250},[240,150706,32683],{"class":288},[240,150708,148863],{"class":257},[240,150710,32338],{"class":288},[240,150712,148868],{"class":257},[240,150714,150715],{"class":242,"line":261},[240,150716,4353],{"emptyLinePlaceholder":2051},[240,150718,150719,150721,150723,150725,150727,150729,150731,150733,150735,150738,150740],{"class":242,"line":277},[240,150720,149425],{"class":257},[240,150722,440],{"class":288},[240,150724,150348],{"class":257},[240,150726,149622],{"class":443},[240,150728,6395],{"class":257},[240,150730,4977],{"class":288},[240,150732,149834],{"class":257},[240,150734,27989],{"class":288},[240,150736,150737],{"class":257}," data[",[240,150739,71192],{"class":443},[240,150741,79441],{"class":257},[240,150743,150744],{"class":242,"line":294},[240,150745,4353],{"emptyLinePlaceholder":2051},[240,150747,150748,150750,150752],{"class":242,"line":309},[240,150749,148877],{"class":257},[240,150751,440],{"class":288},[240,150753,148882],{"class":257},[240,150755,150756],{"class":242,"line":529},[240,150757,149466],{"class":257},[240,150759,150760],{"class":242,"line":549},[240,150761,4353],{"emptyLinePlaceholder":2051},[240,150763,150764,150766,150769,150771],{"class":242,"line":569},[240,150765,4977],{"class":288},[240,150767,150768],{"class":257}," city, records ",[240,150770,27989],{"class":288},[240,150772,150773],{"class":257}," data.items():\n",[240,150775,150776,150779,150781,150783,150785,150787,150789,150791,150793],{"class":242,"line":589},[240,150777,150778],{"class":257},"    values ",[240,150780,440],{"class":288},[240,150782,150348],{"class":257},[240,150784,150593],{"class":443},[240,150786,6395],{"class":257},[240,150788,4977],{"class":288},[240,150790,149834],{"class":257},[240,150792,27989],{"class":288},[240,150794,150795],{"class":257}," records]\n",[240,150797,150798,150801,150803,150805,150807],{"class":242,"line":715},[240,150799,150800],{"class":257},"    line.add_yaxis(city, values, ",[240,150802,149370],{"class":792},[240,150804,440],{"class":288},[240,150806,33422],{"class":264},[240,150808,2129],{"class":257},[240,150810,150811],{"class":242,"line":727},[240,150812,4353],{"emptyLinePlaceholder":2051},[240,150814,150815],{"class":242,"line":1730},[240,150816,149093],{"class":257},[240,150818,150819,150821,150823,150825,150827,150829,150832],{"class":242,"line":3582},[240,150820,149098],{"class":792},[240,150822,440],{"class":288},[240,150824,149103],{"class":257},[240,150826,53351],{"class":792},[240,150828,440],{"class":288},[240,150830,150831],{"class":443},"\"多地区趋势图\"",[240,150833,39993],{"class":257},[240,150835,150836,150838,150840,150842,150844,150846,150848],{"class":242,"line":3596},[240,150837,149154],{"class":792},[240,150839,440],{"class":288},[240,150841,149159],{"class":257},[240,150843,149162],{"class":792},[240,150845,440],{"class":288},[240,150847,149167],{"class":443},[240,150849,39993],{"class":257},[240,150851,150852],{"class":242,"line":3601},[240,150853,2129],{"class":257},[240,150855,150856,150858,150861],{"class":242,"line":3607},[240,150857,148949],{"class":257},[240,150859,150860],{"class":443},"\"trend.html\"",[240,150862,2129],{"class":257},[19,150864,150865],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[14,150867,150869],{"id":150868},"_1012-易错点","10.12 易错点",[1826,150871,150872,150878,150884,150894,150900],{},[1829,150873,150874,150877],{},[23,150875,150876],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[1829,150879,150880,150883],{},[23,150881,150882],{},"render()"," 生成的是 HTML，不是图片。",[1829,150885,150886,150887,150890,150891,30331],{},"JSON 字符串用 ",[23,150888,150889],{},"json.loads()","，JSON 文件用 ",[23,150892,150893],{},"json.load()",[1829,150895,150896,150897,30331],{},"中文 JSON 保存时加 ",[23,150898,150899],{},"ensure_ascii=False",[1829,150901,150902],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[14,150904,150906],{"id":150905},"_1013-本章练习","10.13 本章练习",[1826,150908,150909,150912,150915,150918,150921],{},[1829,150910,150911],{},"安装 pyecharts 并生成第一个折线图。",[1829,150913,150914],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[1829,150916,150917],{},"绘制两条折线，对比线上和线下销售额。",[1829,150919,150920],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[1829,150922,150923],{},"对含有空值的销售数据进行清洗后再绘图。",[2019,150925,150926],{},"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":236,"searchDepth":250,"depth":250,"links":150928},[150929,150930,150931,150932,150933,150934,150935,150936,150937,150938,150939,150940,150941],{"id":148545,"depth":250,"text":148546},{"id":148620,"depth":250,"text":148621},{"id":148799,"depth":250,"text":148800},{"id":148850,"depth":250,"text":148851},{"id":148984,"depth":250,"text":148985},{"id":149260,"depth":250,"text":149261},{"id":149386,"depth":250,"text":149387},{"id":149597,"depth":250,"text":149598},{"id":149968,"depth":250,"text":149969},{"id":150180,"depth":250,"text":150181},{"id":150552,"depth":250,"text":150553},{"id":150868,"depth":250,"text":150869},{"id":150905,"depth":250,"text":150906},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":148537,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":150948,"title":150949,"body":150950,"description":2048,"extension":2049,"meta":153310,"navigation":2051,"path":153311,"seo":153312,"stem":153313,"__hash__":153314},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":150951,"toc":153287},[150952,150955,150959,150962,150965,151041,151044,151135,151138,151142,151145,151189,151202,151206,151209,151276,151279,151283,151286,151370,151378,151382,151387,151528,151531,151542,151548,151554,151668,151672,151675,151678,151931,151934,151938,151941,152045,152048,152052,152203,152207,152214,152327,152331,152334,152440,152443,152447,152450,152481,152484,152589,152592,152596,152600,152610,152678,152682,152689,152753,152756,152760,152766,152862,152871,152875,153199,153208,153212,153240,153244,153284],[10,150953,150949],{"id":150954},"_11-面向对象基础",[14,150956,150958],{"id":150957},"_111-什么是面向对象","11.1 什么是面向对象",[19,150960,150961],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[19,150963,150964],{},"面向过程：",[231,150966,150968],{"className":32324,"code":150967,"language":32326,"meta":236,"style":236},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[23,150969,150970,150979,150987,150991,151001,151032,151036],{"__ignoreMap":236},[240,150971,150972,150974,150976],{"class":242,"line":243},[240,150973,148161],{"class":257},[240,150975,440],{"class":288},[240,150977,150978],{"class":443}," \"小明\"\n",[240,150980,150981,150983,150985],{"class":242,"line":250},[240,150982,148171],{"class":257},[240,150984,440],{"class":288},[240,150986,148176],{"class":264},[240,150988,150989],{"class":242,"line":261},[240,150990,4353],{"emptyLinePlaceholder":2051},[240,150992,150993,150995,150998],{"class":242,"line":277},[240,150994,33893],{"class":288},[240,150996,150997],{"class":436}," introduce",[240,150999,151000],{"class":257},"(name, age):\n",[240,151002,151003,151005,151007,151009,151012,151014,151016,151018,151021,151023,151025,151027,151030],{"class":242,"line":294},[240,151004,33245],{"class":264},[240,151006,789],{"class":257},[240,151008,2172],{"class":288},[240,151010,151011],{"class":443},"\"我叫",[240,151013,2991],{"class":264},[240,151015,81724],{"class":257},[240,151017,3040],{"class":264},[240,151019,151020],{"class":443},"，今年",[240,151022,2991],{"class":264},[240,151024,72144],{"class":257},[240,151026,3040],{"class":264},[240,151028,151029],{"class":443},"岁\"",[240,151031,2129],{"class":257},[240,151033,151034],{"class":242,"line":309},[240,151035,4353],{"emptyLinePlaceholder":2051},[240,151037,151038],{"class":242,"line":529},[240,151039,151040],{"class":257},"introduce(name, age)\n",[19,151042,151043],{},"面向对象：",[231,151045,151047],{"className":32324,"code":151046,"language":32326,"meta":236,"style":236},"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",[23,151048,151049,151057,151065,151094,151098,151102,151112,151121,151130],{"__ignoreMap":236},[240,151050,151051,151053,151055],{"class":242,"line":243},[240,151052,16643],{"class":288},[240,151054,9849],{"class":436},[240,151056,5691],{"class":257},[240,151058,151059,151061,151063],{"class":242,"line":250},[240,151060,32747],{"class":288},[240,151062,150997],{"class":436},[240,151064,32753],{"class":257},[240,151066,151067,151069,151071,151073,151075,151078,151080,151082,151084,151086,151088,151090,151092],{"class":242,"line":261},[240,151068,34397],{"class":264},[240,151070,789],{"class":257},[240,151072,2172],{"class":288},[240,151074,151011],{"class":443},[240,151076,151077],{"class":264},"{self",[240,151079,82215],{"class":257},[240,151081,3040],{"class":264},[240,151083,151020],{"class":443},[240,151085,151077],{"class":264},[240,151087,82227],{"class":257},[240,151089,3040],{"class":264},[240,151091,151029],{"class":443},[240,151093,2129],{"class":257},[240,151095,151096],{"class":242,"line":277},[240,151097,4353],{"emptyLinePlaceholder":2051},[240,151099,151100],{"class":242,"line":294},[240,151101,4353],{"emptyLinePlaceholder":2051},[240,151103,151104,151107,151109],{"class":242,"line":309},[240,151105,151106],{"class":257},"student ",[240,151108,440],{"class":288},[240,151110,151111],{"class":257}," Student()\n",[240,151113,151114,151117,151119],{"class":242,"line":529},[240,151115,151116],{"class":257},"student.name ",[240,151118,440],{"class":288},[240,151120,150978],{"class":443},[240,151122,151123,151126,151128],{"class":242,"line":549},[240,151124,151125],{"class":257},"student.age ",[240,151127,440],{"class":288},[240,151129,148176],{"class":264},[240,151131,151132],{"class":242,"line":569},[240,151133,151134],{"class":257},"student.introduce()\n",[19,151136,151137],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[14,151139,151141],{"id":151140},"_112-类和对象","11.2 类和对象",[19,151143,151144],{},"类是模板，对象是根据模板创建出来的具体实例。",[231,151146,151148],{"className":32324,"code":151147,"language":32326,"meta":236,"style":236},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[23,151149,151150,151158,151163,151167,151171,151180],{"__ignoreMap":236},[240,151151,151152,151154,151156],{"class":242,"line":243},[240,151153,16643],{"class":288},[240,151155,9849],{"class":436},[240,151157,5691],{"class":257},[240,151159,151160],{"class":242,"line":250},[240,151161,151162],{"class":288},"    pass\n",[240,151164,151165],{"class":242,"line":261},[240,151166,4353],{"emptyLinePlaceholder":2051},[240,151168,151169],{"class":242,"line":277},[240,151170,4353],{"emptyLinePlaceholder":2051},[240,151172,151173,151176,151178],{"class":242,"line":294},[240,151174,151175],{"class":257},"student1 ",[240,151177,440],{"class":288},[240,151179,151111],{"class":257},[240,151181,151182,151185,151187],{"class":242,"line":309},[240,151183,151184],{"class":257},"student2 ",[240,151186,440],{"class":288},[240,151188,151111],{"class":257},[19,151190,151191,151194,151195,102929,151198,151201],{},[23,151192,151193],{},"Student"," 是类，",[23,151196,151197],{},"student1",[23,151199,151200],{},"student2"," 是对象。",[14,151203,151205],{"id":151204},"_113-属性","11.3 属性",[19,151207,151208],{},"属性是对象保存的数据。",[231,151210,151212],{"className":32324,"code":151211,"language":32326,"meta":236,"style":236},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[23,151213,151214,151222,151226,151230,151234,151242,151250,151258,151262,151269],{"__ignoreMap":236},[240,151215,151216,151218,151220],{"class":242,"line":243},[240,151217,16643],{"class":288},[240,151219,9849],{"class":436},[240,151221,5691],{"class":257},[240,151223,151224],{"class":242,"line":250},[240,151225,151162],{"class":288},[240,151227,151228],{"class":242,"line":261},[240,151229,4353],{"emptyLinePlaceholder":2051},[240,151231,151232],{"class":242,"line":277},[240,151233,4353],{"emptyLinePlaceholder":2051},[240,151235,151236,151238,151240],{"class":242,"line":294},[240,151237,151106],{"class":257},[240,151239,440],{"class":288},[240,151241,151111],{"class":257},[240,151243,151244,151246,151248],{"class":242,"line":309},[240,151245,151116],{"class":257},[240,151247,440],{"class":288},[240,151249,150978],{"class":443},[240,151251,151252,151254,151256],{"class":242,"line":529},[240,151253,151125],{"class":257},[240,151255,440],{"class":288},[240,151257,148176],{"class":264},[240,151259,151260],{"class":242,"line":549},[240,151261,4353],{"emptyLinePlaceholder":2051},[240,151263,151264,151266],{"class":242,"line":569},[240,151265,32361],{"class":264},[240,151267,151268],{"class":257},"(student.name)\n",[240,151270,151271,151273],{"class":242,"line":589},[240,151272,32361],{"class":264},[240,151274,151275],{"class":257},"(student.age)\n",[19,151277,151278],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[14,151280,151282],{"id":151281},"_114-方法","11.4 方法",[19,151284,151285],{},"类中的函数叫方法。",[231,151287,151288],{"className":32324,"code":151046,"language":32326,"meta":236,"style":236},[23,151289,151290,151298,151306,151334,151338,151342,151350,151358,151366],{"__ignoreMap":236},[240,151291,151292,151294,151296],{"class":242,"line":243},[240,151293,16643],{"class":288},[240,151295,9849],{"class":436},[240,151297,5691],{"class":257},[240,151299,151300,151302,151304],{"class":242,"line":250},[240,151301,32747],{"class":288},[240,151303,150997],{"class":436},[240,151305,32753],{"class":257},[240,151307,151308,151310,151312,151314,151316,151318,151320,151322,151324,151326,151328,151330,151332],{"class":242,"line":261},[240,151309,34397],{"class":264},[240,151311,789],{"class":257},[240,151313,2172],{"class":288},[240,151315,151011],{"class":443},[240,151317,151077],{"class":264},[240,151319,82215],{"class":257},[240,151321,3040],{"class":264},[240,151323,151020],{"class":443},[240,151325,151077],{"class":264},[240,151327,82227],{"class":257},[240,151329,3040],{"class":264},[240,151331,151029],{"class":443},[240,151333,2129],{"class":257},[240,151335,151336],{"class":242,"line":277},[240,151337,4353],{"emptyLinePlaceholder":2051},[240,151339,151340],{"class":242,"line":294},[240,151341,4353],{"emptyLinePlaceholder":2051},[240,151343,151344,151346,151348],{"class":242,"line":309},[240,151345,151106],{"class":257},[240,151347,440],{"class":288},[240,151349,151111],{"class":257},[240,151351,151352,151354,151356],{"class":242,"line":529},[240,151353,151116],{"class":257},[240,151355,440],{"class":288},[240,151357,150978],{"class":443},[240,151359,151360,151362,151364],{"class":242,"line":549},[240,151361,151125],{"class":257},[240,151363,440],{"class":288},[240,151365,148176],{"class":264},[240,151367,151368],{"class":242,"line":569},[240,151369,151134],{"class":257},[19,151371,151372,151374,151375,151377],{},[23,151373,32769],{}," 表示当前对象。调用方法时不需要手动传入 ",[23,151376,32769],{},"，Python 会自动传。",[14,151379,151381],{"id":151380},"_115-构造方法__init__","11.5 构造方法__init__",[19,151383,151384,151386],{},[23,151385,32775],{}," 在对象创建时自动执行，用于初始化属性。",[231,151388,151390],{"className":32324,"code":151389,"language":32326,"meta":236,"style":236},"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",[23,151391,151392,151400,151409,151421,151433,151444,151448,151456,151494,151498,151502,151524],{"__ignoreMap":236},[240,151393,151394,151396,151398],{"class":242,"line":243},[240,151395,16643],{"class":288},[240,151397,9849],{"class":436},[240,151399,5691],{"class":257},[240,151401,151402,151404,151406],{"class":242,"line":250},[240,151403,32747],{"class":288},[240,151405,32750],{"class":264},[240,151407,151408],{"class":257},"(self, name, age, score):\n",[240,151410,151411,151413,151416,151418],{"class":242,"line":261},[240,151412,32791],{"class":264},[240,151414,151415],{"class":257},".name ",[240,151417,440],{"class":288},[240,151419,151420],{"class":257}," name\n",[240,151422,151423,151425,151428,151430],{"class":242,"line":277},[240,151424,32791],{"class":264},[240,151426,151427],{"class":257},".age ",[240,151429,440],{"class":288},[240,151431,151432],{"class":257}," age\n",[240,151434,151435,151437,151440,151442],{"class":242,"line":294},[240,151436,32791],{"class":264},[240,151438,151439],{"class":257},".score ",[240,151441,440],{"class":288},[240,151443,3536],{"class":257},[240,151445,151446],{"class":242,"line":309},[240,151447,4353],{"emptyLinePlaceholder":2051},[240,151449,151450,151452,151454],{"class":242,"line":529},[240,151451,32747],{"class":288},[240,151453,150997],{"class":436},[240,151455,32753],{"class":257},[240,151457,151458,151460,151462,151464,151466,151468,151470,151472,151474,151476,151478,151480,151483,151485,151488,151490,151492],{"class":242,"line":549},[240,151459,34397],{"class":264},[240,151461,789],{"class":257},[240,151463,2172],{"class":288},[240,151465,151011],{"class":443},[240,151467,151077],{"class":264},[240,151469,82215],{"class":257},[240,151471,3040],{"class":264},[240,151473,151020],{"class":443},[240,151475,151077],{"class":264},[240,151477,82227],{"class":257},[240,151479,3040],{"class":264},[240,151481,151482],{"class":443},"岁，成绩",[240,151484,151077],{"class":264},[240,151486,151487],{"class":257},".score",[240,151489,3040],{"class":264},[240,151491,2355],{"class":443},[240,151493,2129],{"class":257},[240,151495,151496],{"class":242,"line":569},[240,151497,4353],{"emptyLinePlaceholder":2051},[240,151499,151500],{"class":242,"line":589},[240,151501,4353],{"emptyLinePlaceholder":2051},[240,151503,151504,151506,151508,151511,151514,151516,151518,151520,151522],{"class":242,"line":715},[240,151505,151106],{"class":257},[240,151507,440],{"class":288},[240,151509,151510],{"class":257}," Student(",[240,151512,151513],{"class":443},"\"小明\"",[240,151515,1277],{"class":257},[240,151517,2748],{"class":264},[240,151519,1277],{"class":257},[240,151521,3082],{"class":264},[240,151523,2129],{"class":257},[240,151525,151526],{"class":242,"line":727},[240,151527,151134],{"class":257},[19,151529,151530],{},"构造方法的好处：",[1826,151532,151533,151536,151539],{},[1829,151534,151535],{},"创建对象时必须提供必要数据。",[1829,151537,151538],{},"属性初始化集中，不容易漏。",[1829,151540,151541],{},"对象状态更完整。",[14,151543,151545,151546],{"id":151544},"_116-str","11.6 ",[68,151547,3262],{},[19,151549,151550,151551,30331],{},"直接打印对象时，默认输出不直观。可以定义 ",[23,151552,151553],{},"__str__",[231,151555,151557],{"className":32324,"code":151556,"language":32326,"meta":236,"style":236},"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",[23,151558,151559,151567,151576,151586,151596,151600,151609,151637,151641,151645,151661],{"__ignoreMap":236},[240,151560,151561,151563,151565],{"class":242,"line":243},[240,151562,16643],{"class":288},[240,151564,9849],{"class":436},[240,151566,5691],{"class":257},[240,151568,151569,151571,151573],{"class":242,"line":250},[240,151570,32747],{"class":288},[240,151572,32750],{"class":264},[240,151574,151575],{"class":257},"(self, name, age):\n",[240,151577,151578,151580,151582,151584],{"class":242,"line":261},[240,151579,32791],{"class":264},[240,151581,151415],{"class":257},[240,151583,440],{"class":288},[240,151585,151420],{"class":257},[240,151587,151588,151590,151592,151594],{"class":242,"line":277},[240,151589,32791],{"class":264},[240,151591,151427],{"class":257},[240,151593,440],{"class":288},[240,151595,151432],{"class":257},[240,151597,151598],{"class":242,"line":294},[240,151599,4353],{"emptyLinePlaceholder":2051},[240,151601,151602,151604,151607],{"class":242,"line":309},[240,151603,32747],{"class":288},[240,151605,151606],{"class":264}," __str__",[240,151608,32753],{"class":257},[240,151610,151611,151613,151616,151619,151621,151623,151625,151628,151630,151632,151634],{"class":242,"line":529},[240,151612,16701],{"class":288},[240,151614,151615],{"class":288}," f",[240,151617,151618],{"class":443},"\"Student(name=",[240,151620,151077],{"class":264},[240,151622,82215],{"class":257},[240,151624,3040],{"class":264},[240,151626,151627],{"class":443},", age=",[240,151629,151077],{"class":264},[240,151631,82227],{"class":257},[240,151633,3040],{"class":264},[240,151635,151636],{"class":443},")\"\n",[240,151638,151639],{"class":242,"line":549},[240,151640,4353],{"emptyLinePlaceholder":2051},[240,151642,151643],{"class":242,"line":569},[240,151644,4353],{"emptyLinePlaceholder":2051},[240,151646,151647,151649,151651,151653,151655,151657,151659],{"class":242,"line":589},[240,151648,151106],{"class":257},[240,151650,440],{"class":288},[240,151652,151510],{"class":257},[240,151654,151513],{"class":443},[240,151656,1277],{"class":257},[240,151658,2748],{"class":264},[240,151660,2129],{"class":257},[240,151662,151663,151665],{"class":242,"line":715},[240,151664,32361],{"class":264},[240,151666,151667],{"class":257},"(student)\n",[14,151669,151671],{"id":151670},"_117-封装","11.7 封装",[19,151673,151674],{},"封装就是把数据和方法放到类中，并控制访问方式。",[19,151676,151677],{},"Python 中以双下划线开头的属性通常视为私有属性。",[231,151679,151681],{"className":32324,"code":151680,"language":32326,"meta":236,"style":236},"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",[23,151682,151683,151692,151701,151713,151725,151729,151738,151747,151751,151761,151774,151785,151790,151801,151805,151814,151826,151837,151841,151854,151865,151869,151880,151884,151888,151906,151915,151924],{"__ignoreMap":236},[240,151684,151685,151687,151690],{"class":242,"line":243},[240,151686,16643],{"class":288},[240,151688,151689],{"class":436}," Account",[240,151691,5691],{"class":257},[240,151693,151694,151696,151698],{"class":242,"line":250},[240,151695,32747],{"class":288},[240,151697,32750],{"class":264},[240,151699,151700],{"class":257},"(self, owner, balance):\n",[240,151702,151703,151705,151708,151710],{"class":242,"line":261},[240,151704,32791],{"class":264},[240,151706,151707],{"class":257},".owner ",[240,151709,440],{"class":288},[240,151711,151712],{"class":257}," owner\n",[240,151714,151715,151717,151720,151722],{"class":242,"line":277},[240,151716,32791],{"class":264},[240,151718,151719],{"class":257},".__balance ",[240,151721,440],{"class":288},[240,151723,151724],{"class":257}," balance\n",[240,151726,151727],{"class":242,"line":294},[240,151728,4353],{"emptyLinePlaceholder":2051},[240,151730,151731,151733,151736],{"class":242,"line":309},[240,151732,32747],{"class":288},[240,151734,151735],{"class":436}," get_balance",[240,151737,32753],{"class":257},[240,151739,151740,151742,151744],{"class":242,"line":529},[240,151741,16701],{"class":288},[240,151743,40819],{"class":264},[240,151745,151746],{"class":257},".__balance\n",[240,151748,151749],{"class":242,"line":549},[240,151750,4353],{"emptyLinePlaceholder":2051},[240,151752,151753,151755,151758],{"class":242,"line":569},[240,151754,32747],{"class":288},[240,151756,151757],{"class":436}," deposit",[240,151759,151760],{"class":257},"(self, money):\n",[240,151762,151763,151765,151768,151770,151772],{"class":242,"line":589},[240,151764,4450],{"class":288},[240,151766,151767],{"class":257}," money ",[240,151769,3545],{"class":288},[240,151771,6045],{"class":264},[240,151773,5691],{"class":257},[240,151775,151776,151778,151780,151783],{"class":242,"line":715},[240,151777,36596],{"class":264},[240,151779,789],{"class":257},[240,151781,151782],{"class":443},"\"存款金额必须大于0\"",[240,151784,2129],{"class":257},[240,151786,151787],{"class":242,"line":727},[240,151788,151789],{"class":288},"            return\n",[240,151791,151792,151794,151796,151798],{"class":242,"line":1730},[240,151793,32791],{"class":264},[240,151795,151719],{"class":257},[240,151797,11428],{"class":288},[240,151799,151800],{"class":257}," money\n",[240,151802,151803],{"class":242,"line":3582},[240,151804,4353],{"emptyLinePlaceholder":2051},[240,151806,151807,151809,151812],{"class":242,"line":3596},[240,151808,32747],{"class":288},[240,151810,151811],{"class":436}," withdraw",[240,151813,151760],{"class":257},[240,151815,151816,151818,151820,151822,151824],{"class":242,"line":3601},[240,151817,4450],{"class":288},[240,151819,151767],{"class":257},[240,151821,3545],{"class":288},[240,151823,6045],{"class":264},[240,151825,5691],{"class":257},[240,151827,151828,151830,151832,151835],{"class":242,"line":3607},[240,151829,36596],{"class":264},[240,151831,789],{"class":257},[240,151833,151834],{"class":443},"\"取款金额必须大于0\"",[240,151836,2129],{"class":257},[240,151838,151839],{"class":242,"line":3628},[240,151840,151789],{"class":288},[240,151842,151843,151845,151847,151849,151851],{"class":242,"line":3633},[240,151844,4450],{"class":288},[240,151846,151767],{"class":257},[240,151848,3053],{"class":288},[240,151850,40819],{"class":264},[240,151852,151853],{"class":257},".__balance:\n",[240,151855,151856,151858,151860,151863],{"class":242,"line":3647},[240,151857,36596],{"class":264},[240,151859,789],{"class":257},[240,151861,151862],{"class":443},"\"余额不足\"",[240,151864,2129],{"class":257},[240,151866,151867],{"class":242,"line":3652},[240,151868,151789],{"class":288},[240,151870,151871,151873,151875,151878],{"class":242,"line":3681},[240,151872,32791],{"class":264},[240,151874,151719],{"class":257},[240,151876,151877],{"class":288},"-=",[240,151879,151800],{"class":257},[240,151881,151882],{"class":242,"line":3686},[240,151883,4353],{"emptyLinePlaceholder":2051},[240,151885,151886],{"class":242,"line":3703},[240,151887,4353],{"emptyLinePlaceholder":2051},[240,151889,151890,151893,151895,151898,151900,151902,151904],{"class":242,"line":3708},[240,151891,151892],{"class":257},"account ",[240,151894,440],{"class":288},[240,151896,151897],{"class":257}," Account(",[240,151899,151513],{"class":443},[240,151901,1277],{"class":257},[240,151903,8361],{"class":264},[240,151905,2129],{"class":257},[240,151907,151908,151911,151913],{"class":242,"line":3713},[240,151909,151910],{"class":257},"account.deposit(",[240,151912,3676],{"class":264},[240,151914,2129],{"class":257},[240,151916,151917,151920,151922],{"class":242,"line":3718},[240,151918,151919],{"class":257},"account.withdraw(",[240,151921,285],{"class":264},[240,151923,2129],{"class":257},[240,151925,151926,151928],{"class":242,"line":3732},[240,151927,32361],{"class":264},[240,151929,151930],{"class":257},"(account.get_balance())\n",[19,151932,151933],{},"封装的意义是避免外部随意修改内部状态。",[14,151935,151937],{"id":151936},"_118-继承","11.8 继承",[19,151939,151940],{},"继承可以让子类复用父类的属性和方法。",[231,151942,151944],{"className":32324,"code":151943,"language":32326,"meta":236,"style":236},"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",[23,151945,151946,151955,151964,151975,151979,151983,151997,152006,152017,152021,152025,152035,152040],{"__ignoreMap":236},[240,151947,151948,151950,151953],{"class":242,"line":243},[240,151949,16643],{"class":288},[240,151951,151952],{"class":436}," Animal",[240,151954,5691],{"class":257},[240,151956,151957,151959,151962],{"class":242,"line":250},[240,151958,32747],{"class":288},[240,151960,151961],{"class":436}," eat",[240,151963,32753],{"class":257},[240,151965,151966,151968,151970,151973],{"class":242,"line":261},[240,151967,34397],{"class":264},[240,151969,789],{"class":257},[240,151971,151972],{"class":443},"\"吃东西\"",[240,151974,2129],{"class":257},[240,151976,151977],{"class":242,"line":277},[240,151978,4353],{"emptyLinePlaceholder":2051},[240,151980,151981],{"class":242,"line":294},[240,151982,4353],{"emptyLinePlaceholder":2051},[240,151984,151985,151987,151990,151992,151995],{"class":242,"line":309},[240,151986,16643],{"class":288},[240,151988,151989],{"class":436}," Dog",[240,151991,789],{"class":257},[240,151993,151994],{"class":436},"Animal",[240,151996,32732],{"class":257},[240,151998,151999,152001,152004],{"class":242,"line":529},[240,152000,32747],{"class":288},[240,152002,152003],{"class":436}," bark",[240,152005,32753],{"class":257},[240,152007,152008,152010,152012,152015],{"class":242,"line":549},[240,152009,34397],{"class":264},[240,152011,789],{"class":257},[240,152013,152014],{"class":443},"\"汪汪\"",[240,152016,2129],{"class":257},[240,152018,152019],{"class":242,"line":569},[240,152020,4353],{"emptyLinePlaceholder":2051},[240,152022,152023],{"class":242,"line":589},[240,152024,4353],{"emptyLinePlaceholder":2051},[240,152026,152027,152030,152032],{"class":242,"line":715},[240,152028,152029],{"class":257},"dog ",[240,152031,440],{"class":288},[240,152033,152034],{"class":257}," Dog()\n",[240,152036,152037],{"class":242,"line":727},[240,152038,152039],{"class":257},"dog.eat()\n",[240,152041,152042],{"class":242,"line":1730},[240,152043,152044],{"class":257},"dog.bark()\n",[19,152046,152047],{},"子类可以扩展新方法，也可以重写父类方法。",[14,152049,152051],{"id":152050},"_119-方法重写","11.9 方法重写",[231,152053,152055],{"className":32324,"code":152054,"language":32326,"meta":236,"style":236},"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",[23,152056,152057,152065,152074,152085,152089,152093,152105,152113,152123,152127,152131,152144,152152,152163,152167,152171,152179,152189,152193,152198],{"__ignoreMap":236},[240,152058,152059,152061,152063],{"class":242,"line":243},[240,152060,16643],{"class":288},[240,152062,151952],{"class":436},[240,152064,5691],{"class":257},[240,152066,152067,152069,152072],{"class":242,"line":250},[240,152068,32747],{"class":288},[240,152070,152071],{"class":436}," speak",[240,152073,32753],{"class":257},[240,152075,152076,152078,152080,152083],{"class":242,"line":261},[240,152077,34397],{"class":264},[240,152079,789],{"class":257},[240,152081,152082],{"class":443},"\"动物叫\"",[240,152084,2129],{"class":257},[240,152086,152087],{"class":242,"line":277},[240,152088,4353],{"emptyLinePlaceholder":2051},[240,152090,152091],{"class":242,"line":294},[240,152092,4353],{"emptyLinePlaceholder":2051},[240,152094,152095,152097,152099,152101,152103],{"class":242,"line":309},[240,152096,16643],{"class":288},[240,152098,151989],{"class":436},[240,152100,789],{"class":257},[240,152102,151994],{"class":436},[240,152104,32732],{"class":257},[240,152106,152107,152109,152111],{"class":242,"line":529},[240,152108,32747],{"class":288},[240,152110,152071],{"class":436},[240,152112,32753],{"class":257},[240,152114,152115,152117,152119,152121],{"class":242,"line":549},[240,152116,34397],{"class":264},[240,152118,789],{"class":257},[240,152120,152014],{"class":443},[240,152122,2129],{"class":257},[240,152124,152125],{"class":242,"line":569},[240,152126,4353],{"emptyLinePlaceholder":2051},[240,152128,152129],{"class":242,"line":589},[240,152130,4353],{"emptyLinePlaceholder":2051},[240,152132,152133,152135,152138,152140,152142],{"class":242,"line":715},[240,152134,16643],{"class":288},[240,152136,152137],{"class":436}," Cat",[240,152139,789],{"class":257},[240,152141,151994],{"class":436},[240,152143,32732],{"class":257},[240,152145,152146,152148,152150],{"class":242,"line":727},[240,152147,32747],{"class":288},[240,152149,152071],{"class":436},[240,152151,32753],{"class":257},[240,152153,152154,152156,152158,152161],{"class":242,"line":1730},[240,152155,34397],{"class":264},[240,152157,789],{"class":257},[240,152159,152160],{"class":443},"\"喵喵\"",[240,152162,2129],{"class":257},[240,152164,152165],{"class":242,"line":3582},[240,152166,4353],{"emptyLinePlaceholder":2051},[240,152168,152169],{"class":242,"line":3596},[240,152170,4353],{"emptyLinePlaceholder":2051},[240,152172,152173,152175,152177],{"class":242,"line":3601},[240,152174,152029],{"class":257},[240,152176,440],{"class":288},[240,152178,152034],{"class":257},[240,152180,152181,152184,152186],{"class":242,"line":3607},[240,152182,152183],{"class":257},"cat ",[240,152185,440],{"class":288},[240,152187,152188],{"class":257}," Cat()\n",[240,152190,152191],{"class":242,"line":3628},[240,152192,4353],{"emptyLinePlaceholder":2051},[240,152194,152195],{"class":242,"line":3633},[240,152196,152197],{"class":257},"dog.speak()\n",[240,152199,152200],{"class":242,"line":3647},[240,152201,152202],{"class":257},"cat.speak()\n",[14,152204,152206],{"id":152205},"_1110-super","11.10 super",[19,152208,152209,152210,152213],{},"子类可以通过 ",[23,152211,152212],{},"super()"," 调用父类方法。",[231,152215,152217],{"className":32324,"code":152216,"language":32326,"meta":236,"style":236},"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",[23,152218,152219,152227,152236,152246,152250,152254,152266,152275,152286,152296,152300,152304,152320],{"__ignoreMap":236},[240,152220,152221,152223,152225],{"class":242,"line":243},[240,152222,16643],{"class":288},[240,152224,17518],{"class":436},[240,152226,5691],{"class":257},[240,152228,152229,152231,152233],{"class":242,"line":250},[240,152230,32747],{"class":288},[240,152232,32750],{"class":264},[240,152234,152235],{"class":257},"(self, name):\n",[240,152237,152238,152240,152242,152244],{"class":242,"line":261},[240,152239,32791],{"class":264},[240,152241,151415],{"class":257},[240,152243,440],{"class":288},[240,152245,151420],{"class":257},[240,152247,152248],{"class":242,"line":277},[240,152249,4353],{"emptyLinePlaceholder":2051},[240,152251,152252],{"class":242,"line":294},[240,152253,4353],{"emptyLinePlaceholder":2051},[240,152255,152256,152258,152260,152262,152264],{"class":242,"line":309},[240,152257,16643],{"class":288},[240,152259,9849],{"class":436},[240,152261,789],{"class":257},[240,152263,20993],{"class":436},[240,152265,32732],{"class":257},[240,152267,152268,152270,152272],{"class":242,"line":529},[240,152269,32747],{"class":288},[240,152271,32750],{"class":264},[240,152273,152274],{"class":257},"(self, name, score):\n",[240,152276,152277,152279,152281,152283],{"class":242,"line":549},[240,152278,32763],{"class":264},[240,152280,19208],{"class":257},[240,152282,32775],{"class":264},[240,152284,152285],{"class":257},"(name)\n",[240,152287,152288,152290,152292,152294],{"class":242,"line":569},[240,152289,32791],{"class":264},[240,152291,151439],{"class":257},[240,152293,440],{"class":288},[240,152295,3536],{"class":257},[240,152297,152298],{"class":242,"line":589},[240,152299,4353],{"emptyLinePlaceholder":2051},[240,152301,152302],{"class":242,"line":715},[240,152303,4353],{"emptyLinePlaceholder":2051},[240,152305,152306,152308,152310,152312,152314,152316,152318],{"class":242,"line":727},[240,152307,151106],{"class":257},[240,152309,440],{"class":288},[240,152311,151510],{"class":257},[240,152313,151513],{"class":443},[240,152315,1277],{"class":257},[240,152317,3082],{"class":264},[240,152319,2129],{"class":257},[240,152321,152322,152324],{"class":242,"line":1730},[240,152323,32361],{"class":264},[240,152325,152326],{"class":257},"(student.name, student.score)\n",[14,152328,152330],{"id":152329},"_1111-多态","11.11 多态",[19,152332,152333],{},"多态指不同对象响应同一个方法，表现出不同结果。",[231,152335,152337],{"className":32324,"code":152336,"language":32326,"meta":236,"style":236},"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",[23,152338,152339,152347,152355,152365,152369,152373,152381,152389,152399,152403,152407,152417,152422,152426,152430,152435],{"__ignoreMap":236},[240,152340,152341,152343,152345],{"class":242,"line":243},[240,152342,16643],{"class":288},[240,152344,151989],{"class":436},[240,152346,5691],{"class":257},[240,152348,152349,152351,152353],{"class":242,"line":250},[240,152350,32747],{"class":288},[240,152352,152071],{"class":436},[240,152354,32753],{"class":257},[240,152356,152357,152359,152361,152363],{"class":242,"line":261},[240,152358,34397],{"class":264},[240,152360,789],{"class":257},[240,152362,152014],{"class":443},[240,152364,2129],{"class":257},[240,152366,152367],{"class":242,"line":277},[240,152368,4353],{"emptyLinePlaceholder":2051},[240,152370,152371],{"class":242,"line":294},[240,152372,4353],{"emptyLinePlaceholder":2051},[240,152374,152375,152377,152379],{"class":242,"line":309},[240,152376,16643],{"class":288},[240,152378,152137],{"class":436},[240,152380,5691],{"class":257},[240,152382,152383,152385,152387],{"class":242,"line":529},[240,152384,32747],{"class":288},[240,152386,152071],{"class":436},[240,152388,32753],{"class":257},[240,152390,152391,152393,152395,152397],{"class":242,"line":549},[240,152392,34397],{"class":264},[240,152394,789],{"class":257},[240,152396,152160],{"class":443},[240,152398,2129],{"class":257},[240,152400,152401],{"class":242,"line":569},[240,152402,4353],{"emptyLinePlaceholder":2051},[240,152404,152405],{"class":242,"line":589},[240,152406,4353],{"emptyLinePlaceholder":2051},[240,152408,152409,152411,152414],{"class":242,"line":715},[240,152410,33893],{"class":288},[240,152412,152413],{"class":436}," make_sound",[240,152415,152416],{"class":257},"(animal):\n",[240,152418,152419],{"class":242,"line":727},[240,152420,152421],{"class":257},"    animal.speak()\n",[240,152423,152424],{"class":242,"line":1730},[240,152425,4353],{"emptyLinePlaceholder":2051},[240,152427,152428],{"class":242,"line":3582},[240,152429,4353],{"emptyLinePlaceholder":2051},[240,152431,152432],{"class":242,"line":3596},[240,152433,152434],{"class":257},"make_sound(Dog())\n",[240,152436,152437],{"class":242,"line":3601},[240,152438,152439],{"class":257},"make_sound(Cat())\n",[19,152441,152442],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[14,152444,152446],{"id":152445},"_1112-类属性和实例属性","11.12 类属性和实例属性",[19,152448,152449],{},"实例属性属于对象：",[231,152451,152453],{"className":32324,"code":152452,"language":32326,"meta":236,"style":236},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[23,152454,152455,152463,152471],{"__ignoreMap":236},[240,152456,152457,152459,152461],{"class":242,"line":243},[240,152458,16643],{"class":288},[240,152460,9849],{"class":436},[240,152462,5691],{"class":257},[240,152464,152465,152467,152469],{"class":242,"line":250},[240,152466,32747],{"class":288},[240,152468,32750],{"class":264},[240,152470,152235],{"class":257},[240,152472,152473,152475,152477,152479],{"class":242,"line":261},[240,152474,32791],{"class":264},[240,152476,151415],{"class":257},[240,152478,440],{"class":288},[240,152480,151420],{"class":257},[19,152482,152483],{},"类属性属于类，所有对象共享：",[231,152485,152487],{"className":32324,"code":152486,"language":32326,"meta":236,"style":236},"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",[23,152488,152489,152497,152507,152511,152519,152529,152533,152537,152550,152564,152568,152575,152582],{"__ignoreMap":236},[240,152490,152491,152493,152495],{"class":242,"line":243},[240,152492,16643],{"class":288},[240,152494,9849],{"class":436},[240,152496,5691],{"class":257},[240,152498,152499,152502,152504],{"class":242,"line":250},[240,152500,152501],{"class":257},"    school ",[240,152503,440],{"class":288},[240,152505,152506],{"class":443}," \"黑马学校\"\n",[240,152508,152509],{"class":242,"line":261},[240,152510,4353],{"emptyLinePlaceholder":2051},[240,152512,152513,152515,152517],{"class":242,"line":277},[240,152514,32747],{"class":288},[240,152516,32750],{"class":264},[240,152518,152235],{"class":257},[240,152520,152521,152523,152525,152527],{"class":242,"line":294},[240,152522,32791],{"class":264},[240,152524,151415],{"class":257},[240,152526,440],{"class":288},[240,152528,151420],{"class":257},[240,152530,152531],{"class":242,"line":309},[240,152532,4353],{"emptyLinePlaceholder":2051},[240,152534,152535],{"class":242,"line":529},[240,152536,4353],{"emptyLinePlaceholder":2051},[240,152538,152539,152542,152544,152546,152548],{"class":242,"line":549},[240,152540,152541],{"class":257},"s1 ",[240,152543,440],{"class":288},[240,152545,151510],{"class":257},[240,152547,151513],{"class":443},[240,152549,2129],{"class":257},[240,152551,152552,152555,152557,152559,152562],{"class":242,"line":569},[240,152553,152554],{"class":257},"s2 ",[240,152556,440],{"class":288},[240,152558,151510],{"class":257},[240,152560,152561],{"class":443},"\"小红\"",[240,152563,2129],{"class":257},[240,152565,152566],{"class":242,"line":589},[240,152567,4353],{"emptyLinePlaceholder":2051},[240,152569,152570,152572],{"class":242,"line":715},[240,152571,32361],{"class":264},[240,152573,152574],{"class":257},"(s1.school)\n",[240,152576,152577,152579],{"class":242,"line":727},[240,152578,32361],{"class":264},[240,152580,152581],{"class":257},"(s2.school)\n",[240,152583,152584,152586],{"class":242,"line":1730},[240,152585,32361],{"class":264},[240,152587,152588],{"class":257},"(Student.school)\n",[19,152590,152591],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[14,152593,152595],{"id":152594},"_1113-类方法和静态方法","11.13 类方法和静态方法",[32,152597,152599],{"id":152598},"_11131-类方法","11.13.1 类方法",[19,152601,152602,152603,152606,152607,30331],{},"类方法使用 ",[23,152604,152605],{},"@classmethod","，第一个参数通常是 ",[23,152608,152609],{},"cls",[231,152611,152613],{"className":32324,"code":152612,"language":32326,"meta":236,"style":236},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[23,152614,152615,152623,152631,152635,152643,152653,152663,152667,152671],{"__ignoreMap":236},[240,152616,152617,152619,152621],{"class":242,"line":243},[240,152618,16643],{"class":288},[240,152620,9849],{"class":436},[240,152622,5691],{"class":257},[240,152624,152625,152627,152629],{"class":242,"line":250},[240,152626,152501],{"class":257},[240,152628,440],{"class":288},[240,152630,152506],{"class":443},[240,152632,152633],{"class":242,"line":261},[240,152634,4353],{"emptyLinePlaceholder":2051},[240,152636,152637,152640],{"class":242,"line":277},[240,152638,152639],{"class":436},"    @",[240,152641,152642],{"class":264},"classmethod\n",[240,152644,152645,152647,152650],{"class":242,"line":294},[240,152646,32747],{"class":288},[240,152648,152649],{"class":436}," get_school",[240,152651,152652],{"class":257},"(cls):\n",[240,152654,152655,152657,152660],{"class":242,"line":309},[240,152656,16701],{"class":288},[240,152658,152659],{"class":264}," cls",[240,152661,152662],{"class":257},".school\n",[240,152664,152665],{"class":242,"line":529},[240,152666,4353],{"emptyLinePlaceholder":2051},[240,152668,152669],{"class":242,"line":549},[240,152670,4353],{"emptyLinePlaceholder":2051},[240,152672,152673,152675],{"class":242,"line":569},[240,152674,32361],{"class":264},[240,152676,152677],{"class":257},"(Student.get_school())\n",[32,152679,152681],{"id":152680},"_11132-静态方法","11.13.2 静态方法",[19,152683,152684,152685,152688],{},"静态方法使用 ",[23,152686,152687],{},"@staticmethod","，不需要访问实例和类。",[231,152690,152692],{"className":32324,"code":152691,"language":32326,"meta":236,"style":236},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[23,152693,152694,152703,152710,152719,152730,152734,152738],{"__ignoreMap":236},[240,152695,152696,152698,152701],{"class":242,"line":243},[240,152697,16643],{"class":288},[240,152699,152700],{"class":436}," MathUtils",[240,152702,5691],{"class":257},[240,152704,152705,152707],{"class":242,"line":250},[240,152706,152639],{"class":436},[240,152708,152709],{"class":264},"staticmethod\n",[240,152711,152712,152714,152716],{"class":242,"line":261},[240,152713,32747],{"class":288},[240,152715,7161],{"class":436},[240,152717,152718],{"class":257},"(a, b):\n",[240,152720,152721,152723,152725,152727],{"class":242,"line":277},[240,152722,16701],{"class":288},[240,152724,12820],{"class":257},[240,152726,2580],{"class":288},[240,152728,152729],{"class":257}," b\n",[240,152731,152732],{"class":242,"line":294},[240,152733,4353],{"emptyLinePlaceholder":2051},[240,152735,152736],{"class":242,"line":309},[240,152737,4353],{"emptyLinePlaceholder":2051},[240,152739,152740,152742,152745,152747,152749,152751],{"class":242,"line":529},[240,152741,32361],{"class":264},[240,152743,152744],{"class":257},"(MathUtils.add(",[240,152746,1643],{"class":264},[240,152748,1277],{"class":257},[240,152750,1668],{"class":264},[240,152752,32443],{"class":257},[19,152754,152755],{},"静态方法本质上是放在类命名空间里的普通函数。",[14,152757,152759],{"id":152758},"_1114-dataclass","11.14 dataclass",[19,152761,152762,152765],{},[23,152763,152764],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[231,152767,152769],{"className":32324,"code":152768,"language":32326,"meta":236,"style":236},"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",[23,152770,152771,152783,152787,152791,152796,152804,152812,152820,152828,152832,152836,152856],{"__ignoreMap":236},[240,152772,152773,152775,152778,152780],{"class":242,"line":243},[240,152774,32683],{"class":288},[240,152776,152777],{"class":257}," dataclasses ",[240,152779,32338],{"class":288},[240,152781,152782],{"class":257}," dataclass\n",[240,152784,152785],{"class":242,"line":250},[240,152786,4353],{"emptyLinePlaceholder":2051},[240,152788,152789],{"class":242,"line":261},[240,152790,4353],{"emptyLinePlaceholder":2051},[240,152792,152793],{"class":242,"line":277},[240,152794,152795],{"class":436},"@dataclass\n",[240,152797,152798,152800,152802],{"class":242,"line":294},[240,152799,16643],{"class":288},[240,152801,9849],{"class":436},[240,152803,5691],{"class":257},[240,152805,152806,152809],{"class":242,"line":309},[240,152807,152808],{"class":257},"    name: ",[240,152810,152811],{"class":264},"str\n",[240,152813,152814,152817],{"class":242,"line":529},[240,152815,152816],{"class":257},"    age: ",[240,152818,152819],{"class":264},"int\n",[240,152821,152822,152825],{"class":242,"line":549},[240,152823,152824],{"class":257},"    score: ",[240,152826,152827],{"class":264},"float\n",[240,152829,152830],{"class":242,"line":569},[240,152831,4353],{"emptyLinePlaceholder":2051},[240,152833,152834],{"class":242,"line":589},[240,152835,4353],{"emptyLinePlaceholder":2051},[240,152837,152838,152840,152842,152844,152846,152848,152850,152852,152854],{"class":242,"line":715},[240,152839,151106],{"class":257},[240,152841,440],{"class":288},[240,152843,151510],{"class":257},[240,152845,151513],{"class":443},[240,152847,1277],{"class":257},[240,152849,2748],{"class":264},[240,152851,1277],{"class":257},[240,152853,3082],{"class":264},[240,152855,2129],{"class":257},[240,152857,152858,152860],{"class":242,"line":727},[240,152859,32361],{"class":264},[240,152861,151667],{"class":257},[19,152863,152864,152865,46,152867,152870],{},"它会自动生成 ",[23,152866,32775],{},[23,152868,152869],{},"__repr__"," 等方法。适合数据模型类。",[14,152872,152874],{"id":152873},"_1115-小案例学生类","11.15 小案例：学生类",[231,152876,152878],{"className":32324,"code":152877,"language":32326,"meta":236,"style":236},"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",[23,152879,152880,152888,152897,152909,152919,152929,152939,152943,152952,152965,152969,152978,152984,152996,153008,153020,153032,153036,153040,153046,153056,153065,153075,153083,153091,153100,153104,153108,153116,153152,153156,153160,153185,153192],{"__ignoreMap":236},[240,152881,152882,152884,152886],{"class":242,"line":243},[240,152883,16643],{"class":288},[240,152885,9849],{"class":436},[240,152887,5691],{"class":257},[240,152889,152890,152892,152894],{"class":242,"line":250},[240,152891,32747],{"class":288},[240,152893,32750],{"class":264},[240,152895,152896],{"class":257},"(self, student_id, name, age, score):\n",[240,152898,152899,152901,152904,152906],{"class":242,"line":261},[240,152900,32791],{"class":264},[240,152902,152903],{"class":257},".student_id ",[240,152905,440],{"class":288},[240,152907,152908],{"class":257}," student_id\n",[240,152910,152911,152913,152915,152917],{"class":242,"line":277},[240,152912,32791],{"class":264},[240,152914,151415],{"class":257},[240,152916,440],{"class":288},[240,152918,151420],{"class":257},[240,152920,152921,152923,152925,152927],{"class":242,"line":294},[240,152922,32791],{"class":264},[240,152924,151427],{"class":257},[240,152926,440],{"class":288},[240,152928,151432],{"class":257},[240,152930,152931,152933,152935,152937],{"class":242,"line":309},[240,152932,32791],{"class":264},[240,152934,151439],{"class":257},[240,152936,440],{"class":288},[240,152938,3536],{"class":257},[240,152940,152941],{"class":242,"line":529},[240,152942,4353],{"emptyLinePlaceholder":2051},[240,152944,152945,152947,152950],{"class":242,"line":549},[240,152946,32747],{"class":288},[240,152948,152949],{"class":436}," is_passed",[240,152951,32753],{"class":257},[240,152953,152954,152956,152958,152960,152962],{"class":242,"line":569},[240,152955,16701],{"class":288},[240,152957,40819],{"class":264},[240,152959,151439],{"class":257},[240,152961,3664],{"class":288},[240,152963,152964],{"class":264}," 60\n",[240,152966,152967],{"class":242,"line":589},[240,152968,4353],{"emptyLinePlaceholder":2051},[240,152970,152971,152973,152976],{"class":242,"line":715},[240,152972,32747],{"class":288},[240,152974,152975],{"class":436}," to_dict",[240,152977,32753],{"class":257},[240,152979,152980,152982],{"class":242,"line":727},[240,152981,16701],{"class":288},[240,152983,258],{"class":257},[240,152985,152986,152989,152991,152993],{"class":242,"line":1730},[240,152987,152988],{"class":443},"            \"student_id\"",[240,152990,268],{"class":257},[240,152992,32769],{"class":264},[240,152994,152995],{"class":257},".student_id,\n",[240,152997,152998,153001,153003,153005],{"class":242,"line":3582},[240,152999,153000],{"class":443},"            \"name\"",[240,153002,268],{"class":257},[240,153004,32769],{"class":264},[240,153006,153007],{"class":257},".name,\n",[240,153009,153010,153013,153015,153017],{"class":242,"line":3596},[240,153011,153012],{"class":443},"            \"age\"",[240,153014,268],{"class":257},[240,153016,32769],{"class":264},[240,153018,153019],{"class":257},".age,\n",[240,153021,153022,153025,153027,153029],{"class":242,"line":3601},[240,153023,153024],{"class":443},"            \"score\"",[240,153026,268],{"class":257},[240,153028,32769],{"class":264},[240,153030,153031],{"class":257},".score,\n",[240,153033,153034],{"class":242,"line":3607},[240,153035,4482],{"class":257},[240,153037,153038],{"class":242,"line":3628},[240,153039,4353],{"emptyLinePlaceholder":2051},[240,153041,153042,153044],{"class":242,"line":3633},[240,153043,152639],{"class":436},[240,153045,152642],{"class":264},[240,153047,153048,153050,153053],{"class":242,"line":3647},[240,153049,32747],{"class":288},[240,153051,153052],{"class":436}," from_dict",[240,153054,153055],{"class":257},"(cls, data):\n",[240,153057,153058,153060,153062],{"class":242,"line":3652},[240,153059,16701],{"class":288},[240,153061,152659],{"class":264},[240,153063,153064],{"class":257},"(\n",[240,153066,153067,153070,153073],{"class":242,"line":3681},[240,153068,153069],{"class":257},"            data[",[240,153071,153072],{"class":443},"\"student_id\"",[240,153074,89749],{"class":257},[240,153076,153077,153079,153081],{"class":242,"line":3686},[240,153078,153069],{"class":257},[240,153080,64602],{"class":443},[240,153082,89749],{"class":257},[240,153084,153085,153087,153089],{"class":242,"line":3703},[240,153086,153069],{"class":257},[240,153088,71047],{"class":443},[240,153090,89749],{"class":257},[240,153092,153093,153095,153098],{"class":242,"line":3708},[240,153094,153069],{"class":257},[240,153096,153097],{"class":443},"\"score\"",[240,153099,89749],{"class":257},[240,153101,153102],{"class":242,"line":3713},[240,153103,40072],{"class":257},[240,153105,153106],{"class":242,"line":3718},[240,153107,4353],{"emptyLinePlaceholder":2051},[240,153109,153110,153112,153114],{"class":242,"line":3732},[240,153111,32747],{"class":288},[240,153113,151606],{"class":264},[240,153115,32753],{"class":257},[240,153117,153118,153120,153122,153124,153126,153129,153131,153134,153136,153138,153140,153142,153144,153146,153148,153150],{"class":242,"line":3737},[240,153119,16701],{"class":288},[240,153121,151615],{"class":288},[240,153123,2355],{"class":443},[240,153125,151077],{"class":264},[240,153127,153128],{"class":257},".student_id",[240,153130,3040],{"class":264},[240,153132,153133],{"class":264}," {self",[240,153135,82215],{"class":257},[240,153137,3040],{"class":264},[240,153139,153133],{"class":264},[240,153141,82227],{"class":257},[240,153143,3040],{"class":264},[240,153145,153133],{"class":264},[240,153147,151487],{"class":257},[240,153149,3040],{"class":264},[240,153151,27080],{"class":443},[240,153153,153154],{"class":242,"line":4530},[240,153155,4353],{"emptyLinePlaceholder":2051},[240,153157,153158],{"class":242,"line":4544},[240,153159,4353],{"emptyLinePlaceholder":2051},[240,153161,153162,153164,153166,153168,153171,153173,153175,153177,153179,153181,153183],{"class":242,"line":4552},[240,153163,151106],{"class":257},[240,153165,440],{"class":288},[240,153167,151510],{"class":257},[240,153169,153170],{"class":443},"\"001\"",[240,153172,1277],{"class":257},[240,153174,151513],{"class":443},[240,153176,1277],{"class":257},[240,153178,2748],{"class":264},[240,153180,1277],{"class":257},[240,153182,3082],{"class":264},[240,153184,2129],{"class":257},[240,153186,153187,153189],{"class":242,"line":4557},[240,153188,32361],{"class":264},[240,153190,153191],{"class":257},"(student.is_passed())\n",[240,153193,153194,153196],{"class":242,"line":4563},[240,153195,32361],{"class":264},[240,153197,153198],{"class":257},"(student.to_dict())\n",[19,153200,153201,102929,153204,153207],{},[23,153202,153203],{},"to_dict()",[23,153205,153206],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[14,153209,153211],{"id":153210},"_1116-易错点","11.16 易错点",[1826,153213,153214,153220,153226,153231,153234,153237],{},[1829,153215,153216,153217,30331],{},"类名推荐使用大驼峰，如 ",[23,153218,153219],{},"StudentManager",[1829,153221,153222,153223,153225],{},"方法第一个参数必须写 ",[23,153224,32769],{},"，调用时不用传。",[1829,153227,153228,153230],{},[23,153229,32775],{}," 不是普通方法，它在创建对象时自动执行。",[1829,153232,153233],{},"私有属性不是绝对安全，只是约定和名称改写。",[1829,153235,153236],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[1829,153238,153239],{},"类中方法太多时，说明职责可能过重。",[14,153241,153243],{"id":153242},"_1117-本章练习","11.17 本章练习",[1826,153245,153246,153252,153258,153263,153276],{},[1829,153247,153248,153249,153251],{},"定义 ",[23,153250,151193],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[1829,153253,153248,153254,153257],{},[23,153255,153256],{},"Account"," 类，实现存款、取款、查询余额。",[1829,153259,153248,153260,153262],{},[23,153261,19173],{}," 类，计算圆的周长和面积。",[1829,153264,153248,153265,46,153268,153271,153272,153275],{},[23,153266,153267],{},"Dog",[23,153269,153270],{},"Cat"," 类，并用同一个函数调用它们的 ",[23,153273,153274],{},"speak()"," 方法。",[1829,153277,106276,153278,153280,153281,30331],{},[23,153279,152764],{}," 定义一个商品类 ",[23,153282,153283],{},"Product",[2019,153285,153286],{},"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":236,"searchDepth":250,"depth":250,"links":153288},[153289,153290,153291,153292,153293,153294,153296,153297,153298,153299,153300,153301,153302,153306,153307,153308,153309],{"id":150957,"depth":250,"text":150958},{"id":151140,"depth":250,"text":151141},{"id":151204,"depth":250,"text":151205},{"id":151281,"depth":250,"text":151282},{"id":151380,"depth":250,"text":151381},{"id":151544,"depth":250,"text":153295},"11.6 str",{"id":151670,"depth":250,"text":151671},{"id":151936,"depth":250,"text":151937},{"id":152050,"depth":250,"text":152051},{"id":152205,"depth":250,"text":152206},{"id":152329,"depth":250,"text":152330},{"id":152445,"depth":250,"text":152446},{"id":152594,"depth":250,"text":152595,"children":153303},[153304,153305],{"id":152598,"depth":261,"text":152599},{"id":152680,"depth":261,"text":152681},{"id":152758,"depth":250,"text":152759},{"id":152873,"depth":250,"text":152874},{"id":153210,"depth":250,"text":153211},{"id":153242,"depth":250,"text":153243},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":150949,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":153316,"title":153317,"body":153318,"description":2048,"extension":2049,"meta":156631,"navigation":2051,"path":156632,"seo":156633,"stem":156634,"__hash__":156635},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":153319,"toc":156607},[153320,153323,153327,153330,153333,153362,153365,153373,153377,153381,153384,153407,153410,153416,153420,154866,154869,154890,154894,154897,154909,154912,155096,155099,155225,155228,155232,155236,155372,155376,155462,155466,155548,155552,155589,155593,155782,155786,155789,156019,156023,156026,156207,156210,156214,156217,156223,156226,156252,156256,156259,156273,156276,156301,156304,156318,156321,156338,156341,156358,156361,156378,156382,156408,156412,156435,156439,156442,156444,156450,156452,156473,156476,156482,156488,156492,156495,156571,156574,156578,156604],[10,153321,153317],{"id":153322},"_12-综合案例与复习路线",[14,153324,153326],{"id":153325},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[19,153328,153329],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[19,153331,153332],{},"一个合格的入门综合项目最好覆盖：",[1826,153334,153335,153338,153341,153344,153347,153350,153353,153356,153359],{},[1829,153336,153337],{},"输入输出。",[1829,153339,153340],{},"判断和循环。",[1829,153342,153343],{},"函数拆分。",[1829,153345,153346],{},"列表、字典等容器。",[1829,153348,153349],{},"文件持久化。",[1829,153351,153352],{},"异常处理。",[1829,153354,153355],{},"模块拆分。",[1829,153357,153358],{},"可选：面向对象。",[1829,153360,153361],{},"可选：数据可视化。",[19,153363,153364],{},"本章整理两个方向：",[1826,153366,153367,153370],{},[1829,153368,153369],{},"学生管理系统。",[1829,153371,153372],{},"销售数据统计和可视化。",[14,153374,153376],{"id":153375},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[32,153378,153380],{"id":153379},"_1221-需求","12.2.1 需求",[19,153382,153383],{},"实现一个命令行学生管理系统：",[1826,153385,153386,153389,153392,153395,153398,153401,153404],{},[1829,153387,153388],{},"添加学生。",[1829,153390,153391],{},"删除学生。",[1829,153393,153394],{},"修改学生。",[1829,153396,153397],{},"查询学生。",[1829,153399,153400],{},"显示所有学生。",[1829,153402,153403],{},"保存到 JSON 文件。",[1829,153405,153406],{},"程序启动时自动读取 JSON 文件。",[19,153408,153409],{},"学生字段：",[231,153411,153414],{"className":153412,"code":153413,"language":7139,"meta":236},[7137],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[23,153415,153413],{"__ignoreMap":236},[14,153417,153419],{"id":153418},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[231,153421,153423],{"className":32324,"code":153422,"language":32326,"meta":236,"style":236},"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",[23,153424,153425,153431,153441,153445,153459,153463,153467,153476,153488,153494,153498,153504,153535,153545,153552,153563,153569,153573,153577,153587,153618,153644,153648,153652,153661,153672,153683,153694,153705,153716,153727,153738,153742,153746,153756,153768,153784,153791,153798,153802,153806,153816,153824,153831,153844,153854,153865,153869,153873,153882,153890,153896,153908,153916,153927,153931,153935,153944,153960,153964,153971,153982,153987,153991,154007,154022,154037,154041,154046,154054,154062,154070,154078,154082,154087,154098,154102,154106,154115,154130,154140,154144,154156,154167,154171,154175,154180,154184,154195,154199,154203,154212,154227,154235,154239,154251,154261,154265,154269,154284,154297,154310,154314,154327,154339,154351,154355,154359,154370,154374,154378,154387,154402,154410,154414,154426,154436,154440,154444,154449,154453,154457,154467,154473,154495,154514,154533,154552,154557,154561,154565,154574,154582,154593,154597,154601,154627,154637,154642,154646,154650,154658,154668,154672,154680,154685,154701,154705,154719,154724,154738,154743,154756,154761,154774,154779,154792,154797,154810,154821,154825,154831,154842,154846,154850,154862],{"__ignoreMap":236},[240,153426,153427,153429],{"class":242,"line":243},[240,153428,32338],{"class":288},[240,153430,148716],{"class":257},[240,153432,153433,153435,153437,153439],{"class":242,"line":250},[240,153434,32683],{"class":288},[240,153436,110221],{"class":257},[240,153438,32338],{"class":288},[240,153440,110226],{"class":257},[240,153442,153443],{"class":242,"line":261},[240,153444,4353],{"emptyLinePlaceholder":2051},[240,153446,153447,153450,153452,153454,153457],{"class":242,"line":277},[240,153448,153449],{"class":264},"DATA_FILE",[240,153451,15514],{"class":288},[240,153453,110455],{"class":257},[240,153455,153456],{"class":443},"\"students.json\"",[240,153458,2129],{"class":257},[240,153460,153461],{"class":242,"line":294},[240,153462,4353],{"emptyLinePlaceholder":2051},[240,153464,153465],{"class":242,"line":309},[240,153466,4353],{"emptyLinePlaceholder":2051},[240,153468,153469,153471,153474],{"class":242,"line":529},[240,153470,33893],{"class":288},[240,153472,153473],{"class":436}," load_students",[240,153475,33899],{"class":257},[240,153477,153478,153480,153482,153485],{"class":242,"line":549},[240,153479,5053],{"class":288},[240,153481,40876],{"class":288},[240,153483,153484],{"class":264}," DATA_FILE",[240,153486,153487],{"class":257},".exists():\n",[240,153489,153490,153492],{"class":242,"line":569},[240,153491,16701],{"class":288},[240,153493,53776],{"class":257},[240,153495,153496],{"class":242,"line":589},[240,153497,4353],{"emptyLinePlaceholder":2051},[240,153499,153500,153502],{"class":242,"line":715},[240,153501,127694],{"class":288},[240,153503,5691],{"class":257},[240,153505,153506,153509,153511,153513,153515,153517,153519,153521,153523,153525,153527,153529,153531,153533],{"class":242,"line":727},[240,153507,153508],{"class":288},"        with",[240,153510,148416],{"class":264},[240,153512,789],{"class":257},[240,153514,153449],{"class":264},[240,153516,1277],{"class":257},[240,153518,148426],{"class":443},[240,153520,1277],{"class":257},[240,153522,148431],{"class":792},[240,153524,440],{"class":288},[240,153526,148436],{"class":443},[240,153528,1230],{"class":257},[240,153530,33329],{"class":288},[240,153532,149778],{"class":792},[240,153534,5691],{"class":257},[240,153536,153537,153539,153541,153543],{"class":242,"line":1730},[240,153538,17680],{"class":288},[240,153540,149789],{"class":257},[240,153542,47300],{"class":792},[240,153544,2129],{"class":257},[240,153546,153547,153549],{"class":242,"line":3582},[240,153548,127722],{"class":288},[240,153550,153551],{"class":257}," json.JSONDecodeError:\n",[240,153553,153554,153556,153558,153561],{"class":242,"line":3596},[240,153555,34397],{"class":264},[240,153557,789],{"class":257},[240,153559,153560],{"class":443},"\"数据文件格式错误，已使用空数据启动\"",[240,153562,2129],{"class":257},[240,153564,153565,153567],{"class":242,"line":3601},[240,153566,16701],{"class":288},[240,153568,53776],{"class":257},[240,153570,153571],{"class":242,"line":3607},[240,153572,4353],{"emptyLinePlaceholder":2051},[240,153574,153575],{"class":242,"line":3628},[240,153576,4353],{"emptyLinePlaceholder":2051},[240,153578,153579,153581,153584],{"class":242,"line":3633},[240,153580,33893],{"class":288},[240,153582,153583],{"class":436}," save_students",[240,153585,153586],{"class":257},"(students):\n",[240,153588,153589,153591,153593,153595,153597,153599,153602,153604,153606,153608,153610,153612,153614,153616],{"class":242,"line":3647},[240,153590,36124],{"class":288},[240,153592,148416],{"class":264},[240,153594,789],{"class":257},[240,153596,153449],{"class":264},[240,153598,1277],{"class":257},[240,153600,153601],{"class":443},"\"w\"",[240,153603,1277],{"class":257},[240,153605,148431],{"class":792},[240,153607,440],{"class":288},[240,153609,148436],{"class":443},[240,153611,1230],{"class":257},[240,153613,33329],{"class":288},[240,153615,149778],{"class":792},[240,153617,5691],{"class":257},[240,153619,153620,153623,153625,153627,153629,153631,153633,153635,153638,153640,153642],{"class":242,"line":3652},[240,153621,153622],{"class":257},"        json.dump(students, ",[240,153624,47300],{"class":792},[240,153626,1277],{"class":257},[240,153628,148762],{"class":792},[240,153630,440],{"class":288},[240,153632,35933],{"class":264},[240,153634,1277],{"class":257},[240,153636,153637],{"class":792},"indent",[240,153639,440],{"class":288},[240,153641,1668],{"class":264},[240,153643,2129],{"class":257},[240,153645,153646],{"class":242,"line":3681},[240,153647,4353],{"emptyLinePlaceholder":2051},[240,153649,153650],{"class":242,"line":3686},[240,153651,4353],{"emptyLinePlaceholder":2051},[240,153653,153654,153656,153659],{"class":242,"line":3703},[240,153655,33893],{"class":288},[240,153657,153658],{"class":436}," show_menu",[240,153660,33899],{"class":257},[240,153662,153663,153665,153667,153670],{"class":242,"line":3708},[240,153664,33245],{"class":264},[240,153666,789],{"class":257},[240,153668,153669],{"class":443},"\"====== 学生管理系统 ======\"",[240,153671,2129],{"class":257},[240,153673,153674,153676,153678,153681],{"class":242,"line":3713},[240,153675,33245],{"class":264},[240,153677,789],{"class":257},[240,153679,153680],{"class":443},"\"1. 添加学生\"",[240,153682,2129],{"class":257},[240,153684,153685,153687,153689,153692],{"class":242,"line":3718},[240,153686,33245],{"class":264},[240,153688,789],{"class":257},[240,153690,153691],{"class":443},"\"2. 删除学生\"",[240,153693,2129],{"class":257},[240,153695,153696,153698,153700,153703],{"class":242,"line":3732},[240,153697,33245],{"class":264},[240,153699,789],{"class":257},[240,153701,153702],{"class":443},"\"3. 修改学生\"",[240,153704,2129],{"class":257},[240,153706,153707,153709,153711,153714],{"class":242,"line":3737},[240,153708,33245],{"class":264},[240,153710,789],{"class":257},[240,153712,153713],{"class":443},"\"4. 查询学生\"",[240,153715,2129],{"class":257},[240,153717,153718,153720,153722,153725],{"class":242,"line":4530},[240,153719,33245],{"class":264},[240,153721,789],{"class":257},[240,153723,153724],{"class":443},"\"5. 显示所有学生\"",[240,153726,2129],{"class":257},[240,153728,153729,153731,153733,153736],{"class":242,"line":4544},[240,153730,33245],{"class":264},[240,153732,789],{"class":257},[240,153734,153735],{"class":443},"\"0. 退出系统\"",[240,153737,2129],{"class":257},[240,153739,153740],{"class":242,"line":4552},[240,153741,4353],{"emptyLinePlaceholder":2051},[240,153743,153744],{"class":242,"line":4557},[240,153745,4353],{"emptyLinePlaceholder":2051},[240,153747,153748,153750,153753],{"class":242,"line":4563},[240,153749,33893],{"class":288},[240,153751,153752],{"class":436}," find_student",[240,153754,153755],{"class":257},"(students, student_id):\n",[240,153757,153758,153760,153763,153765],{"class":242,"line":4569},[240,153759,5153],{"class":288},[240,153761,153762],{"class":257}," student ",[240,153764,27989],{"class":288},[240,153766,153767],{"class":257}," students:\n",[240,153769,153770,153772,153775,153777,153779,153781],{"class":242,"line":4574},[240,153771,4450],{"class":288},[240,153773,153774],{"class":257}," student[",[240,153776,153072],{"class":443},[240,153778,6395],{"class":257},[240,153780,4901],{"class":288},[240,153782,153783],{"class":257}," student_id:\n",[240,153785,153786,153788],{"class":242,"line":9899},[240,153787,17680],{"class":288},[240,153789,153790],{"class":257}," student\n",[240,153792,153793,153795],{"class":242,"line":9923},[240,153794,6042],{"class":288},[240,153796,153797],{"class":264}," None\n",[240,153799,153800],{"class":242,"line":9928},[240,153801,4353],{"emptyLinePlaceholder":2051},[240,153803,153804],{"class":242,"line":9934},[240,153805,4353],{"emptyLinePlaceholder":2051},[240,153807,153808,153810,153813],{"class":242,"line":9961},[240,153809,33893],{"class":288},[240,153811,153812],{"class":436}," input_int",[240,153814,153815],{"class":257},"(prompt):\n",[240,153817,153818,153820,153822],{"class":242,"line":9966},[240,153819,4204],{"class":288},[240,153821,97205],{"class":264},[240,153823,5691],{"class":257},[240,153825,153826,153829],{"class":242,"line":9972},[240,153827,153828],{"class":288},"        try",[240,153830,5691],{"class":257},[240,153832,153833,153835,153837,153839,153841],{"class":242,"line":9984},[240,153834,17680],{"class":288},[240,153836,4335],{"class":264},[240,153838,789],{"class":257},[240,153840,55756],{"class":264},[240,153842,153843],{"class":257},"(prompt))\n",[240,153845,153846,153849,153852],{"class":242,"line":9996},[240,153847,153848],{"class":288},"        except",[240,153850,153851],{"class":264}," ValueError",[240,153853,5691],{"class":257},[240,153855,153856,153858,153860,153863],{"class":242,"line":10008},[240,153857,36596],{"class":264},[240,153859,789],{"class":257},[240,153861,153862],{"class":443},"\"请输入整数\"",[240,153864,2129],{"class":257},[240,153866,153867],{"class":242,"line":11667},[240,153868,4353],{"emptyLinePlaceholder":2051},[240,153870,153871],{"class":242,"line":11692},[240,153872,4353],{"emptyLinePlaceholder":2051},[240,153874,153875,153877,153880],{"class":242,"line":11715},[240,153876,33893],{"class":288},[240,153878,153879],{"class":436}," input_float",[240,153881,153815],{"class":257},[240,153883,153884,153886,153888],{"class":242,"line":11739},[240,153885,4204],{"class":288},[240,153887,97205],{"class":264},[240,153889,5691],{"class":257},[240,153891,153892,153894],{"class":242,"line":11744},[240,153893,153828],{"class":288},[240,153895,5691],{"class":257},[240,153897,153898,153900,153902,153904,153906],{"class":242,"line":11749},[240,153899,17680],{"class":288},[240,153901,111707],{"class":264},[240,153903,789],{"class":257},[240,153905,55756],{"class":264},[240,153907,153843],{"class":257},[240,153909,153910,153912,153914],{"class":242,"line":11754},[240,153911,153848],{"class":288},[240,153913,153851],{"class":264},[240,153915,5691],{"class":257},[240,153917,153918,153920,153922,153925],{"class":242,"line":11763},[240,153919,36596],{"class":264},[240,153921,789],{"class":257},[240,153923,153924],{"class":443},"\"请输入数字\"",[240,153926,2129],{"class":257},[240,153928,153929],{"class":242,"line":11768},[240,153930,4353],{"emptyLinePlaceholder":2051},[240,153932,153933],{"class":242,"line":11774},[240,153934,4353],{"emptyLinePlaceholder":2051},[240,153936,153937,153939,153942],{"class":242,"line":11795},[240,153938,33893],{"class":288},[240,153940,153941],{"class":436}," add_student",[240,153943,153586],{"class":257},[240,153945,153946,153949,153951,153953,153955,153958],{"class":242,"line":11801},[240,153947,153948],{"class":257},"    student_id ",[240,153950,440],{"class":288},[240,153952,62536],{"class":264},[240,153954,789],{"class":257},[240,153956,153957],{"class":443},"\"请输入学号:\"",[240,153959,2129],{"class":257},[240,153961,153962],{"class":242,"line":11815},[240,153963,4353],{"emptyLinePlaceholder":2051},[240,153965,153966,153968],{"class":242,"line":11821},[240,153967,5053],{"class":288},[240,153969,153970],{"class":257}," find_student(students, student_id):\n",[240,153972,153973,153975,153977,153980],{"class":242,"line":11848},[240,153974,34397],{"class":264},[240,153976,789],{"class":257},[240,153978,153979],{"class":443},"\"学号已存在\"",[240,153981,2129],{"class":257},[240,153983,153984],{"class":242,"line":11857},[240,153985,153986],{"class":288},"        return\n",[240,153988,153989],{"class":242,"line":11863},[240,153990,4353],{"emptyLinePlaceholder":2051},[240,153992,153993,153996,153998,154000,154002,154005],{"class":242,"line":11871},[240,153994,153995],{"class":257},"    name ",[240,153997,440],{"class":288},[240,153999,62536],{"class":264},[240,154001,789],{"class":257},[240,154003,154004],{"class":443},"\"请输入姓名:\"",[240,154006,2129],{"class":257},[240,154008,154009,154012,154014,154017,154020],{"class":242,"line":11876},[240,154010,154011],{"class":257},"    age ",[240,154013,440],{"class":288},[240,154015,154016],{"class":257}," input_int(",[240,154018,154019],{"class":443},"\"请输入年龄:\"",[240,154021,2129],{"class":257},[240,154023,154024,154027,154029,154032,154035],{"class":242,"line":18552},[240,154025,154026],{"class":257},"    score ",[240,154028,440],{"class":288},[240,154030,154031],{"class":257}," input_float(",[240,154033,154034],{"class":443},"\"请输入成绩:\"",[240,154036,2129],{"class":257},[240,154038,154039],{"class":242,"line":18558},[240,154040,4353],{"emptyLinePlaceholder":2051},[240,154042,154043],{"class":242,"line":18581},[240,154044,154045],{"class":257},"    students.append({\n",[240,154047,154048,154051],{"class":242,"line":18587},[240,154049,154050],{"class":443},"        \"student_id\"",[240,154052,154053],{"class":257},": student_id,\n",[240,154055,154056,154059],{"class":242,"line":18610},[240,154057,154058],{"class":443},"        \"name\"",[240,154060,154061],{"class":257},": name,\n",[240,154063,154064,154067],{"class":242,"line":18624},[240,154065,154066],{"class":443},"        \"age\"",[240,154068,154069],{"class":257},": age,\n",[240,154071,154072,154075],{"class":242,"line":18644},[240,154073,154074],{"class":443},"        \"score\"",[240,154076,154077],{"class":257},": score,\n",[240,154079,154080],{"class":242,"line":18650},[240,154081,35407],{"class":257},[240,154083,154084],{"class":242,"line":18661},[240,154085,154086],{"class":257},"    save_students(students)\n",[240,154088,154089,154091,154093,154096],{"class":242,"line":18684},[240,154090,33245],{"class":264},[240,154092,789],{"class":257},[240,154094,154095],{"class":443},"\"添加成功\"",[240,154097,2129],{"class":257},[240,154099,154100],{"class":242,"line":18706},[240,154101,4353],{"emptyLinePlaceholder":2051},[240,154103,154104],{"class":242,"line":18711},[240,154105,4353],{"emptyLinePlaceholder":2051},[240,154107,154108,154110,154113],{"class":242,"line":18717},[240,154109,33893],{"class":288},[240,154111,154112],{"class":436}," delete_student",[240,154114,153586],{"class":257},[240,154116,154117,154119,154121,154123,154125,154128],{"class":242,"line":18731},[240,154118,153948],{"class":257},[240,154120,440],{"class":288},[240,154122,62536],{"class":264},[240,154124,789],{"class":257},[240,154126,154127],{"class":443},"\"请输入要删除的学号:\"",[240,154129,2129],{"class":257},[240,154131,154132,154135,154137],{"class":242,"line":18744},[240,154133,154134],{"class":257},"    student ",[240,154136,440],{"class":288},[240,154138,154139],{"class":257}," find_student(students, student_id)\n",[240,154141,154142],{"class":242,"line":18749},[240,154143,4353],{"emptyLinePlaceholder":2051},[240,154145,154146,154148,154150,154152,154154],{"class":242,"line":18763},[240,154147,5053],{"class":288},[240,154149,153762],{"class":257},[240,154151,40873],{"class":288},[240,154153,40879],{"class":264},[240,154155,5691],{"class":257},[240,154157,154158,154160,154162,154165],{"class":242,"line":18768},[240,154159,34397],{"class":264},[240,154161,789],{"class":257},[240,154163,154164],{"class":443},"\"学生不存在\"",[240,154166,2129],{"class":257},[240,154168,154169],{"class":242,"line":18774},[240,154170,153986],{"class":288},[240,154172,154173],{"class":242,"line":18779},[240,154174,4353],{"emptyLinePlaceholder":2051},[240,154176,154177],{"class":242,"line":18793},[240,154178,154179],{"class":257},"    students.remove(student)\n",[240,154181,154182],{"class":242,"line":18798},[240,154183,154086],{"class":257},[240,154185,154186,154188,154190,154193],{"class":242,"line":18803},[240,154187,33245],{"class":264},[240,154189,789],{"class":257},[240,154191,154192],{"class":443},"\"删除成功\"",[240,154194,2129],{"class":257},[240,154196,154197],{"class":242,"line":18817},[240,154198,4353],{"emptyLinePlaceholder":2051},[240,154200,154201],{"class":242,"line":18829},[240,154202,4353],{"emptyLinePlaceholder":2051},[240,154204,154205,154207,154210],{"class":242,"line":18834},[240,154206,33893],{"class":288},[240,154208,154209],{"class":436}," update_student",[240,154211,153586],{"class":257},[240,154213,154214,154216,154218,154220,154222,154225],{"class":242,"line":18847},[240,154215,153948],{"class":257},[240,154217,440],{"class":288},[240,154219,62536],{"class":264},[240,154221,789],{"class":257},[240,154223,154224],{"class":443},"\"请输入要修改的学号:\"",[240,154226,2129],{"class":257},[240,154228,154229,154231,154233],{"class":242,"line":18852},[240,154230,154134],{"class":257},[240,154232,440],{"class":288},[240,154234,154139],{"class":257},[240,154236,154237],{"class":242,"line":18857},[240,154238,4353],{"emptyLinePlaceholder":2051},[240,154240,154241,154243,154245,154247,154249],{"class":242,"line":18862},[240,154242,5053],{"class":288},[240,154244,153762],{"class":257},[240,154246,40873],{"class":288},[240,154248,40879],{"class":264},[240,154250,5691],{"class":257},[240,154252,154253,154255,154257,154259],{"class":242,"line":18875},[240,154254,34397],{"class":264},[240,154256,789],{"class":257},[240,154258,154164],{"class":443},[240,154260,2129],{"class":257},[240,154262,154263],{"class":242,"line":18880},[240,154264,153986],{"class":288},[240,154266,154267],{"class":242,"line":34579},[240,154268,4353],{"emptyLinePlaceholder":2051},[240,154270,154271,154273,154275,154277,154279,154282],{"class":242,"line":34585},[240,154272,153995],{"class":257},[240,154274,440],{"class":288},[240,154276,62536],{"class":264},[240,154278,789],{"class":257},[240,154280,154281],{"class":443},"\"请输入新姓名:\"",[240,154283,2129],{"class":257},[240,154285,154286,154288,154290,154292,154295],{"class":242,"line":34591},[240,154287,154011],{"class":257},[240,154289,440],{"class":288},[240,154291,154016],{"class":257},[240,154293,154294],{"class":443},"\"请输入新年龄:\"",[240,154296,2129],{"class":257},[240,154298,154299,154301,154303,154305,154308],{"class":242,"line":34597},[240,154300,154026],{"class":257},[240,154302,440],{"class":288},[240,154304,154031],{"class":257},[240,154306,154307],{"class":443},"\"请输入新成绩:\"",[240,154309,2129],{"class":257},[240,154311,154312],{"class":242,"line":34603},[240,154313,4353],{"emptyLinePlaceholder":2051},[240,154315,154316,154319,154321,154323,154325],{"class":242,"line":34614},[240,154317,154318],{"class":257},"    student[",[240,154320,64602],{"class":443},[240,154322,6395],{"class":257},[240,154324,440],{"class":288},[240,154326,151420],{"class":257},[240,154328,154329,154331,154333,154335,154337],{"class":242,"line":34620},[240,154330,154318],{"class":257},[240,154332,71047],{"class":443},[240,154334,6395],{"class":257},[240,154336,440],{"class":288},[240,154338,151432],{"class":257},[240,154340,154341,154343,154345,154347,154349],{"class":242,"line":34640},[240,154342,154318],{"class":257},[240,154344,153097],{"class":443},[240,154346,6395],{"class":257},[240,154348,440],{"class":288},[240,154350,3536],{"class":257},[240,154352,154353],{"class":242,"line":34646},[240,154354,4353],{"emptyLinePlaceholder":2051},[240,154356,154357],{"class":242,"line":34657},[240,154358,154086],{"class":257},[240,154360,154361,154363,154365,154368],{"class":242,"line":34663},[240,154362,33245],{"class":264},[240,154364,789],{"class":257},[240,154366,154367],{"class":443},"\"修改成功\"",[240,154369,2129],{"class":257},[240,154371,154372],{"class":242,"line":34669},[240,154373,4353],{"emptyLinePlaceholder":2051},[240,154375,154376],{"class":242,"line":34675},[240,154377,4353],{"emptyLinePlaceholder":2051},[240,154379,154380,154382,154385],{"class":242,"line":34681},[240,154381,33893],{"class":288},[240,154383,154384],{"class":436}," query_student",[240,154386,153586],{"class":257},[240,154388,154389,154391,154393,154395,154397,154400],{"class":242,"line":34687},[240,154390,153948],{"class":257},[240,154392,440],{"class":288},[240,154394,62536],{"class":264},[240,154396,789],{"class":257},[240,154398,154399],{"class":443},"\"请输入要查询的学号:\"",[240,154401,2129],{"class":257},[240,154403,154404,154406,154408],{"class":242,"line":34693},[240,154405,154134],{"class":257},[240,154407,440],{"class":288},[240,154409,154139],{"class":257},[240,154411,154412],{"class":242,"line":34699},[240,154413,4353],{"emptyLinePlaceholder":2051},[240,154415,154416,154418,154420,154422,154424],{"class":242,"line":34719},[240,154417,5053],{"class":288},[240,154419,153762],{"class":257},[240,154421,40873],{"class":288},[240,154423,40879],{"class":264},[240,154425,5691],{"class":257},[240,154427,154428,154430,154432,154434],{"class":242,"line":34725},[240,154429,34397],{"class":264},[240,154431,789],{"class":257},[240,154433,154164],{"class":443},[240,154435,2129],{"class":257},[240,154437,154438],{"class":242,"line":34741},[240,154439,153986],{"class":288},[240,154441,154442],{"class":242,"line":34747},[240,154443,4353],{"emptyLinePlaceholder":2051},[240,154445,154446],{"class":242,"line":34761},[240,154447,154448],{"class":257},"    print_student(student)\n",[240,154450,154451],{"class":242,"line":34767},[240,154452,4353],{"emptyLinePlaceholder":2051},[240,154454,154455],{"class":242,"line":34782},[240,154456,4353],{"emptyLinePlaceholder":2051},[240,154458,154459,154461,154464],{"class":242,"line":34788},[240,154460,33893],{"class":288},[240,154462,154463],{"class":436}," print_student",[240,154465,154466],{"class":257},"(student):\n",[240,154468,154469,154471],{"class":242,"line":34797},[240,154470,33245],{"class":264},[240,154472,153064],{"class":257},[240,154474,154475,154478,154480,154482,154485,154488,154490,154493],{"class":242,"line":34803},[240,154476,154477],{"class":288},"        f",[240,154479,2355],{"class":443},[240,154481,2991],{"class":264},[240,154483,154484],{"class":257},"student[",[240,154486,154487],{"class":443},"'student_id'",[240,154489,3034],{"class":257},[240,154491,154492],{"class":264},"}\\t",[240,154494,27080],{"class":443},[240,154496,154497,154499,154501,154503,154505,154508,154510,154512],{"class":242,"line":34812},[240,154498,154477],{"class":288},[240,154500,2355],{"class":443},[240,154502,2991],{"class":264},[240,154504,154484],{"class":257},[240,154506,154507],{"class":443},"'name'",[240,154509,3034],{"class":257},[240,154511,154492],{"class":264},[240,154513,27080],{"class":443},[240,154515,154516,154518,154520,154522,154524,154527,154529,154531],{"class":242,"line":34818},[240,154517,154477],{"class":288},[240,154519,2355],{"class":443},[240,154521,2991],{"class":264},[240,154523,154484],{"class":257},[240,154525,154526],{"class":443},"'age'",[240,154528,3034],{"class":257},[240,154530,154492],{"class":264},[240,154532,27080],{"class":443},[240,154534,154535,154537,154539,154541,154543,154546,154548,154550],{"class":242,"line":34824},[240,154536,154477],{"class":288},[240,154538,2355],{"class":443},[240,154540,2991],{"class":264},[240,154542,154484],{"class":257},[240,154544,154545],{"class":443},"'score'",[240,154547,3034],{"class":257},[240,154549,3040],{"class":264},[240,154551,27080],{"class":443},[240,154553,154554],{"class":242,"line":34833},[240,154555,154556],{"class":257},"    )\n",[240,154558,154559],{"class":242,"line":34839},[240,154560,4353],{"emptyLinePlaceholder":2051},[240,154562,154563],{"class":242,"line":34850},[240,154564,4353],{"emptyLinePlaceholder":2051},[240,154566,154567,154569,154572],{"class":242,"line":34856},[240,154568,33893],{"class":288},[240,154570,154571],{"class":436}," show_all_students",[240,154573,153586],{"class":257},[240,154575,154576,154578,154580],{"class":242,"line":34875},[240,154577,5053],{"class":288},[240,154579,40876],{"class":288},[240,154581,153767],{"class":257},[240,154583,154584,154586,154588,154591],{"class":242,"line":34881},[240,154585,34397],{"class":264},[240,154587,789],{"class":257},[240,154589,154590],{"class":443},"\"暂无学生\"",[240,154592,2129],{"class":257},[240,154594,154595],{"class":242,"line":34892},[240,154596,153986],{"class":288},[240,154598,154599],{"class":242,"line":34898},[240,154600,4353],{"emptyLinePlaceholder":2051},[240,154602,154603,154605,154607,154610,154612,154615,154617,154620,154622,154625],{"class":242,"line":34918},[240,154604,33245],{"class":264},[240,154606,789],{"class":257},[240,154608,154609],{"class":443},"\"学号",[240,154611,3194],{"class":264},[240,154613,154614],{"class":443},"姓名",[240,154616,3194],{"class":264},[240,154618,154619],{"class":443},"年龄",[240,154621,3194],{"class":264},[240,154623,154624],{"class":443},"成绩\"",[240,154626,2129],{"class":257},[240,154628,154629,154631,154633,154635],{"class":242,"line":34934},[240,154630,5153],{"class":288},[240,154632,153762],{"class":257},[240,154634,27989],{"class":288},[240,154636,153767],{"class":257},[240,154638,154639],{"class":242,"line":34940},[240,154640,154641],{"class":257},"        print_student(student)\n",[240,154643,154644],{"class":242,"line":34954},[240,154645,4353],{"emptyLinePlaceholder":2051},[240,154647,154648],{"class":242,"line":34960},[240,154649,4353],{"emptyLinePlaceholder":2051},[240,154651,154652,154654,154656],{"class":242,"line":34966},[240,154653,33893],{"class":288},[240,154655,3926],{"class":436},[240,154657,33899],{"class":257},[240,154659,154660,154663,154665],{"class":242,"line":34977},[240,154661,154662],{"class":257},"    students ",[240,154664,440],{"class":288},[240,154666,154667],{"class":257}," load_students()\n",[240,154669,154670],{"class":242,"line":34983},[240,154671,4353],{"emptyLinePlaceholder":2051},[240,154673,154674,154676,154678],{"class":242,"line":34989},[240,154675,4204],{"class":288},[240,154677,97205],{"class":264},[240,154679,5691],{"class":257},[240,154681,154682],{"class":242,"line":34999},[240,154683,154684],{"class":257},"        show_menu()\n",[240,154686,154687,154690,154692,154694,154696,154699],{"class":242,"line":35005},[240,154688,154689],{"class":257},"        choice ",[240,154691,440],{"class":288},[240,154693,62536],{"class":264},[240,154695,789],{"class":257},[240,154697,154698],{"class":443},"\"请输入操作:\"",[240,154700,2129],{"class":257},[240,154702,154703],{"class":242,"line":35016},[240,154704,4353],{"emptyLinePlaceholder":2051},[240,154706,154707,154709,154712,154714,154717],{"class":242,"line":35022},[240,154708,4450],{"class":288},[240,154710,154711],{"class":257}," choice ",[240,154713,4901],{"class":288},[240,154715,154716],{"class":443}," \"1\"",[240,154718,5691],{"class":257},[240,154720,154721],{"class":242,"line":35032},[240,154722,154723],{"class":257},"            add_student(students)\n",[240,154725,154726,154729,154731,154733,154736],{"class":242,"line":35037},[240,154727,154728],{"class":288},"        elif",[240,154730,154711],{"class":257},[240,154732,4901],{"class":288},[240,154734,154735],{"class":443}," \"2\"",[240,154737,5691],{"class":257},[240,154739,154740],{"class":242,"line":35043},[240,154741,154742],{"class":257},"            delete_student(students)\n",[240,154744,154745,154747,154749,154751,154754],{"class":242,"line":35092},[240,154746,154728],{"class":288},[240,154748,154711],{"class":257},[240,154750,4901],{"class":288},[240,154752,154753],{"class":443}," \"3\"",[240,154755,5691],{"class":257},[240,154757,154758],{"class":242,"line":35139},[240,154759,154760],{"class":257},"            update_student(students)\n",[240,154762,154763,154765,154767,154769,154772],{"class":242,"line":35144},[240,154764,154728],{"class":288},[240,154766,154711],{"class":257},[240,154768,4901],{"class":288},[240,154770,154771],{"class":443}," \"4\"",[240,154773,5691],{"class":257},[240,154775,154776],{"class":242,"line":35150},[240,154777,154778],{"class":257},"            query_student(students)\n",[240,154780,154781,154783,154785,154787,154790],{"class":242,"line":35169},[240,154782,154728],{"class":288},[240,154784,154711],{"class":257},[240,154786,4901],{"class":288},[240,154788,154789],{"class":443}," \"5\"",[240,154791,5691],{"class":257},[240,154793,154794],{"class":242,"line":35175},[240,154795,154796],{"class":257},"            show_all_students(students)\n",[240,154798,154799,154801,154803,154805,154808],{"class":242,"line":35195},[240,154800,154728],{"class":288},[240,154802,154711],{"class":257},[240,154804,4901],{"class":288},[240,154806,154807],{"class":443}," \"0\"",[240,154809,5691],{"class":257},[240,154811,154812,154814,154816,154819],{"class":242,"line":35201},[240,154813,36596],{"class":264},[240,154815,789],{"class":257},[240,154817,154818],{"class":443},"\"退出系统\"",[240,154820,2129],{"class":257},[240,154822,154823],{"class":242,"line":35207},[240,154824,117008],{"class":288},[240,154826,154827,154829],{"class":242,"line":35217},[240,154828,4487],{"class":288},[240,154830,5691],{"class":257},[240,154832,154833,154835,154837,154840],{"class":242,"line":35222},[240,154834,36596],{"class":264},[240,154836,789],{"class":257},[240,154838,154839],{"class":443},"\"输入错误\"",[240,154841,2129],{"class":257},[240,154843,154844],{"class":242,"line":35228},[240,154845,4353],{"emptyLinePlaceholder":2051},[240,154847,154848],{"class":242,"line":35244},[240,154849,4353],{"emptyLinePlaceholder":2051},[240,154851,154852,154854,154856,154858,154860],{"class":242,"line":35289},[240,154853,3489],{"class":288},[240,154855,33166],{"class":264},[240,154857,103470],{"class":288},[240,154859,103473],{"class":443},[240,154861,5691],{"class":257},[240,154863,154864],{"class":242,"line":35295},[240,154865,103480],{"class":257},[19,154867,154868],{},"这个项目串联了：",[1826,154870,154871,154874,154877,154880,154883,154885],{},[1829,154872,154873],{},"菜单循环。",[1829,154875,154876],{},"函数封装。",[1829,154878,154879],{},"列表字典。",[1829,154881,154882],{},"JSON 读写。",[1829,154884,153352],{},[1829,154886,154887,30331],{},[23,154888,154889],{},"if __name__ == \"__main__\"",[14,154891,154893],{"id":154892},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[19,154895,154896],{},"可以进一步拆成两个类：",[1826,154898,154899,154904],{},[1829,154900,154901,154903],{},[23,154902,151193],{},"：表示单个学生。",[1829,154905,154906,154908],{},[23,154907,153219],{},"：负责学生增删改查和文件保存。",[19,154910,154911],{},"示意代码：",[231,154913,154915],{"className":32324,"code":154914,"language":32326,"meta":236,"style":236},"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",[23,154916,154917,154927,154931,154935,154939,154947,154954,154960,154966,154972,154976,154984,154990,155000,155010,155020,155030,155034,155038,155044,155052,155060,155068,155076,155084,155092],{"__ignoreMap":236},[240,154918,154919,154921,154923,154925],{"class":242,"line":243},[240,154920,32683],{"class":288},[240,154922,152777],{"class":257},[240,154924,32338],{"class":288},[240,154926,152782],{"class":257},[240,154928,154929],{"class":242,"line":250},[240,154930,4353],{"emptyLinePlaceholder":2051},[240,154932,154933],{"class":242,"line":261},[240,154934,4353],{"emptyLinePlaceholder":2051},[240,154936,154937],{"class":242,"line":277},[240,154938,152795],{"class":436},[240,154940,154941,154943,154945],{"class":242,"line":294},[240,154942,16643],{"class":288},[240,154944,9849],{"class":436},[240,154946,5691],{"class":257},[240,154948,154949,154952],{"class":242,"line":309},[240,154950,154951],{"class":257},"    student_id: ",[240,154953,152811],{"class":264},[240,154955,154956,154958],{"class":242,"line":529},[240,154957,152808],{"class":257},[240,154959,152811],{"class":264},[240,154961,154962,154964],{"class":242,"line":549},[240,154963,152816],{"class":257},[240,154965,152819],{"class":264},[240,154967,154968,154970],{"class":242,"line":569},[240,154969,152824],{"class":257},[240,154971,152827],{"class":264},[240,154973,154974],{"class":242,"line":589},[240,154975,4353],{"emptyLinePlaceholder":2051},[240,154977,154978,154980,154982],{"class":242,"line":715},[240,154979,32747],{"class":288},[240,154981,152975],{"class":436},[240,154983,32753],{"class":257},[240,154985,154986,154988],{"class":242,"line":727},[240,154987,16701],{"class":288},[240,154989,258],{"class":257},[240,154991,154992,154994,154996,154998],{"class":242,"line":1730},[240,154993,152988],{"class":443},[240,154995,268],{"class":257},[240,154997,32769],{"class":264},[240,154999,152995],{"class":257},[240,155001,155002,155004,155006,155008],{"class":242,"line":3582},[240,155003,153000],{"class":443},[240,155005,268],{"class":257},[240,155007,32769],{"class":264},[240,155009,153007],{"class":257},[240,155011,155012,155014,155016,155018],{"class":242,"line":3596},[240,155013,153012],{"class":443},[240,155015,268],{"class":257},[240,155017,32769],{"class":264},[240,155019,153019],{"class":257},[240,155021,155022,155024,155026,155028],{"class":242,"line":3601},[240,155023,153024],{"class":443},[240,155025,268],{"class":257},[240,155027,32769],{"class":264},[240,155029,153031],{"class":257},[240,155031,155032],{"class":242,"line":3607},[240,155033,4482],{"class":257},[240,155035,155036],{"class":242,"line":3628},[240,155037,4353],{"emptyLinePlaceholder":2051},[240,155039,155040,155042],{"class":242,"line":3633},[240,155041,152639],{"class":436},[240,155043,152642],{"class":264},[240,155045,155046,155048,155050],{"class":242,"line":3647},[240,155047,32747],{"class":288},[240,155049,153052],{"class":436},[240,155051,153055],{"class":257},[240,155053,155054,155056,155058],{"class":242,"line":3652},[240,155055,16701],{"class":288},[240,155057,152659],{"class":264},[240,155059,153064],{"class":257},[240,155061,155062,155064,155066],{"class":242,"line":3681},[240,155063,153069],{"class":257},[240,155065,153072],{"class":443},[240,155067,89749],{"class":257},[240,155069,155070,155072,155074],{"class":242,"line":3686},[240,155071,153069],{"class":257},[240,155073,64602],{"class":443},[240,155075,89749],{"class":257},[240,155077,155078,155080,155082],{"class":242,"line":3703},[240,155079,153069],{"class":257},[240,155081,71047],{"class":443},[240,155083,89749],{"class":257},[240,155085,155086,155088,155090],{"class":242,"line":3708},[240,155087,153069],{"class":257},[240,155089,153097],{"class":443},[240,155091,89749],{"class":257},[240,155093,155094],{"class":242,"line":3713},[240,155095,40072],{"class":257},[19,155097,155098],{},"管理器示意：",[231,155100,155102],{"className":32324,"code":155101,"language":32326,"meta":236,"style":236},"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",[23,155103,155104,155113,155121,155132,155136,155146,155159,155170,155177,155183,155187,155196,155205,155211,155218],{"__ignoreMap":236},[240,155105,155106,155108,155111],{"class":242,"line":243},[240,155107,16643],{"class":288},[240,155109,155110],{"class":436}," StudentManager",[240,155112,5691],{"class":257},[240,155114,155115,155117,155119],{"class":242,"line":250},[240,155116,32747],{"class":288},[240,155118,32750],{"class":264},[240,155120,32753],{"class":257},[240,155122,155123,155125,155128,155130],{"class":242,"line":261},[240,155124,32791],{"class":264},[240,155126,155127],{"class":257},".students ",[240,155129,440],{"class":288},[240,155131,53776],{"class":257},[240,155133,155134],{"class":242,"line":277},[240,155135,4353],{"emptyLinePlaceholder":2051},[240,155137,155138,155140,155143],{"class":242,"line":294},[240,155139,32747],{"class":288},[240,155141,155142],{"class":436}," find_by_id",[240,155144,155145],{"class":257},"(self, student_id):\n",[240,155147,155148,155150,155152,155154,155156],{"class":242,"line":309},[240,155149,5355],{"class":288},[240,155151,153762],{"class":257},[240,155153,27989],{"class":288},[240,155155,40819],{"class":264},[240,155157,155158],{"class":257},".students:\n",[240,155160,155161,155163,155166,155168],{"class":242,"line":529},[240,155162,6594],{"class":288},[240,155164,155165],{"class":257}," student.student_id ",[240,155167,4901],{"class":288},[240,155169,153783],{"class":257},[240,155171,155172,155175],{"class":242,"line":549},[240,155173,155174],{"class":288},"                return",[240,155176,153790],{"class":257},[240,155178,155179,155181],{"class":242,"line":569},[240,155180,16701],{"class":288},[240,155182,153797],{"class":264},[240,155184,155185],{"class":242,"line":589},[240,155186,4353],{"emptyLinePlaceholder":2051},[240,155188,155189,155191,155193],{"class":242,"line":715},[240,155190,32747],{"class":288},[240,155192,7161],{"class":436},[240,155194,155195],{"class":257},"(self, student):\n",[240,155197,155198,155200,155202],{"class":242,"line":727},[240,155199,4450],{"class":288},[240,155201,40819],{"class":264},[240,155203,155204],{"class":257},".find_by_id(student.student_id):\n",[240,155206,155207,155209],{"class":242,"line":1730},[240,155208,17680],{"class":288},[240,155210,127717],{"class":264},[240,155212,155213,155215],{"class":242,"line":3582},[240,155214,32791],{"class":264},[240,155216,155217],{"class":257},".students.append(student)\n",[240,155219,155220,155222],{"class":242,"line":3596},[240,155221,16701],{"class":288},[240,155223,155224],{"class":264}," True\n",[19,155226,155227],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[14,155229,155231],{"id":155230},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[32,155233,155235],{"id":155234},"_1251-数据结构","12.5.1 数据结构",[231,155237,155239],{"className":32324,"code":155238,"language":32326,"meta":236,"style":236},"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",[23,155240,155241,155249,155280,155310,155339,155368],{"__ignoreMap":236},[240,155242,155243,155245,155247],{"class":242,"line":243},[240,155244,150090],{"class":257},[240,155246,440],{"class":288},[240,155248,57380],{"class":257},[240,155250,155251,155253,155255,155257,155259,155261,155264,155266,155269,155271,155273,155275,155278],{"class":242,"line":250},[240,155252,150010],{"class":257},[240,155254,149622],{"class":443},[240,155256,268],{"class":257},[240,155258,150233],{"class":443},[240,155260,1277],{"class":257},[240,155262,155263],{"class":443},"\"category\"",[240,155265,268],{"class":257},[240,155267,155268],{"class":443},"\"手机\"",[240,155270,1277],{"class":257},[240,155272,85998],{"class":443},[240,155274,268],{"class":257},[240,155276,155277],{"class":264},"12000",[240,155279,6882],{"class":257},[240,155281,155282,155284,155286,155288,155290,155292,155294,155296,155299,155301,155303,155305,155308],{"class":242,"line":261},[240,155283,150010],{"class":257},[240,155285,149622],{"class":443},[240,155287,268],{"class":257},[240,155289,150233],{"class":443},[240,155291,1277],{"class":257},[240,155293,155263],{"class":443},[240,155295,268],{"class":257},[240,155297,155298],{"class":443},"\"电脑\"",[240,155300,1277],{"class":257},[240,155302,85998],{"class":443},[240,155304,268],{"class":257},[240,155306,155307],{"class":264},"18000",[240,155309,6882],{"class":257},[240,155311,155312,155314,155316,155318,155320,155322,155324,155326,155328,155330,155332,155334,155337],{"class":242,"line":277},[240,155313,150010],{"class":257},[240,155315,149622],{"class":443},[240,155317,268],{"class":257},[240,155319,150254],{"class":443},[240,155321,1277],{"class":257},[240,155323,155263],{"class":443},[240,155325,268],{"class":257},[240,155327,155268],{"class":443},[240,155329,1277],{"class":257},[240,155331,85998],{"class":443},[240,155333,268],{"class":257},[240,155335,155336],{"class":264},"15000",[240,155338,6882],{"class":257},[240,155340,155341,155343,155345,155347,155349,155351,155353,155355,155357,155359,155361,155363,155366],{"class":242,"line":294},[240,155342,150010],{"class":257},[240,155344,149622],{"class":443},[240,155346,268],{"class":257},[240,155348,150254],{"class":443},[240,155350,1277],{"class":257},[240,155352,155263],{"class":443},[240,155354,268],{"class":257},[240,155356,155298],{"class":443},[240,155358,1277],{"class":257},[240,155360,85998],{"class":443},[240,155362,268],{"class":257},[240,155364,155365],{"class":264},"16000",[240,155367,6882],{"class":257},[240,155369,155370],{"class":242,"line":309},[240,155371,35192],{"class":257},[32,155373,155375],{"id":155374},"_1252-按日期统计","12.5.2 按日期统计",[231,155377,155379],{"className":32324,"code":155378,"language":32326,"meta":236,"style":236},"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",[23,155380,155381,155390,155394,155405,155419,155432,155451,155455],{"__ignoreMap":236},[240,155382,155383,155386,155388],{"class":242,"line":243},[240,155384,155385],{"class":257},"daily_total ",[240,155387,440],{"class":288},[240,155389,89781],{"class":257},[240,155391,155392],{"class":242,"line":250},[240,155393,4353],{"emptyLinePlaceholder":2051},[240,155395,155396,155398,155400,155402],{"class":242,"line":261},[240,155397,4977],{"class":288},[240,155399,149834],{"class":257},[240,155401,27989],{"class":288},[240,155403,155404],{"class":257}," sales:\n",[240,155406,155407,155410,155412,155415,155417],{"class":242,"line":277},[240,155408,155409],{"class":257},"    date ",[240,155411,440],{"class":288},[240,155413,155414],{"class":257}," item[",[240,155416,149622],{"class":443},[240,155418,35192],{"class":257},[240,155420,155421,155424,155426,155428,155430],{"class":242,"line":294},[240,155422,155423],{"class":257},"    amount ",[240,155425,440],{"class":288},[240,155427,155414],{"class":257},[240,155429,85998],{"class":443},[240,155431,35192],{"class":257},[240,155433,155434,155437,155439,155442,155444,155446,155448],{"class":242,"line":309},[240,155435,155436],{"class":257},"    daily_total[date] ",[240,155438,440],{"class":288},[240,155440,155441],{"class":257}," daily_total.get(date, ",[240,155443,1274],{"class":264},[240,155445,1230],{"class":257},[240,155447,2580],{"class":288},[240,155449,155450],{"class":257}," amount\n",[240,155452,155453],{"class":242,"line":529},[240,155454,4353],{"emptyLinePlaceholder":2051},[240,155456,155457,155459],{"class":242,"line":549},[240,155458,32361],{"class":264},[240,155460,155461],{"class":257},"(daily_total)\n",[32,155463,155465],{"id":155464},"_1253-按类别统计","12.5.3 按类别统计",[231,155467,155469],{"className":32324,"code":155468,"language":32326,"meta":236,"style":236},"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",[23,155470,155471,155480,155484,155494,155507,155519,155537,155541],{"__ignoreMap":236},[240,155472,155473,155476,155478],{"class":242,"line":243},[240,155474,155475],{"class":257},"category_total ",[240,155477,440],{"class":288},[240,155479,89781],{"class":257},[240,155481,155482],{"class":242,"line":250},[240,155483,4353],{"emptyLinePlaceholder":2051},[240,155485,155486,155488,155490,155492],{"class":242,"line":261},[240,155487,4977],{"class":288},[240,155489,149834],{"class":257},[240,155491,27989],{"class":288},[240,155493,155404],{"class":257},[240,155495,155496,155499,155501,155503,155505],{"class":242,"line":277},[240,155497,155498],{"class":257},"    category ",[240,155500,440],{"class":288},[240,155502,155414],{"class":257},[240,155504,155263],{"class":443},[240,155506,35192],{"class":257},[240,155508,155509,155511,155513,155515,155517],{"class":242,"line":294},[240,155510,155423],{"class":257},[240,155512,440],{"class":288},[240,155514,155414],{"class":257},[240,155516,85998],{"class":443},[240,155518,35192],{"class":257},[240,155520,155521,155524,155526,155529,155531,155533,155535],{"class":242,"line":309},[240,155522,155523],{"class":257},"    category_total[category] ",[240,155525,440],{"class":288},[240,155527,155528],{"class":257}," category_total.get(category, ",[240,155530,1274],{"class":264},[240,155532,1230],{"class":257},[240,155534,2580],{"class":288},[240,155536,155450],{"class":257},[240,155538,155539],{"class":242,"line":529},[240,155540,4353],{"emptyLinePlaceholder":2051},[240,155542,155543,155545],{"class":242,"line":549},[240,155544,32361],{"class":264},[240,155546,155547],{"class":257},"(category_total)\n",[32,155549,155551],{"id":155550},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[231,155553,155555],{"className":32324,"code":155554,"language":32326,"meta":236,"style":236},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[23,155556,155557,155582],{"__ignoreMap":236},[240,155558,155559,155562,155564,155566,155569,155572,155575,155578,155580],{"class":242,"line":243},[240,155560,155561],{"class":257},"top_date, top_amount ",[240,155563,440],{"class":288},[240,155565,7902],{"class":264},[240,155567,155568],{"class":257},"(daily_total.items(), ",[240,155570,155571],{"class":792},"key",[240,155573,155574],{"class":288},"=lambda",[240,155576,155577],{"class":257}," item: item[",[240,155579,1643],{"class":264},[240,155581,6609],{"class":257},[240,155583,155584,155586],{"class":242,"line":250},[240,155585,32361],{"class":264},[240,155587,155588],{"class":257},"(top_date, top_amount)\n",[14,155590,155592],{"id":155591},"_126-绘制柱状图","12.6 绘制柱状图",[231,155594,155596],{"className":32324,"code":155595,"language":32326,"meta":236,"style":236},"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",[23,155597,155598,155612,155623,155627,155635,155647,155659,155670,155674,155678,155688,155699,155713,155718,155735,155752,155768,155772],{"__ignoreMap":236},[240,155599,155600,155602,155604,155606,155608,155610],{"class":242,"line":243},[240,155601,32683],{"class":288},[240,155603,149004],{"class":257},[240,155605,32338],{"class":288},[240,155607,149009],{"class":257},[240,155609,33329],{"class":288},[240,155611,149014],{"class":257},[240,155613,155614,155616,155618,155620],{"class":242,"line":250},[240,155615,32683],{"class":288},[240,155617,148863],{"class":257},[240,155619,32338],{"class":288},[240,155621,155622],{"class":257}," Bar\n",[240,155624,155625],{"class":242,"line":261},[240,155626,4353],{"emptyLinePlaceholder":2051},[240,155628,155629,155631,155633],{"class":242,"line":277},[240,155630,155475],{"class":257},[240,155632,440],{"class":288},[240,155634,258],{"class":257},[240,155636,155637,155640,155642,155645],{"class":242,"line":294},[240,155638,155639],{"class":443},"    \"手机\"",[240,155641,268],{"class":257},[240,155643,155644],{"class":264},"27000",[240,155646,33412],{"class":257},[240,155648,155649,155652,155654,155657],{"class":242,"line":309},[240,155650,155651],{"class":443},"    \"电脑\"",[240,155653,268],{"class":257},[240,155655,155656],{"class":264},"34000",[240,155658,33412],{"class":257},[240,155660,155661,155664,155666,155668],{"class":242,"line":529},[240,155662,155663],{"class":443},"    \"耳机\"",[240,155665,268],{"class":257},[240,155667,126309],{"class":264},[240,155669,33412],{"class":257},[240,155671,155672],{"class":242,"line":549},[240,155673,312],{"class":257},[240,155675,155676],{"class":242,"line":569},[240,155677,4353],{"emptyLinePlaceholder":2051},[240,155679,155680,155683,155685],{"class":242,"line":589},[240,155681,155682],{"class":257},"bar ",[240,155684,440],{"class":288},[240,155686,155687],{"class":257}," Bar()\n",[240,155689,155690,155693,155696],{"class":242,"line":715},[240,155691,155692],{"class":257},"bar.add_xaxis(",[240,155694,155695],{"class":264},"list",[240,155697,155698],{"class":257},"(category_total.keys()))\n",[240,155700,155701,155704,155706,155708,155710],{"class":242,"line":727},[240,155702,155703],{"class":257},"bar.add_yaxis(",[240,155705,148920],{"class":443},[240,155707,1277],{"class":257},[240,155709,155695],{"class":264},[240,155711,155712],{"class":257},"(category_total.values()))\n",[240,155714,155715],{"class":242,"line":1730},[240,155716,155717],{"class":257},"bar.set_global_opts(\n",[240,155719,155720,155722,155724,155726,155728,155730,155733],{"class":242,"line":3582},[240,155721,149098],{"class":792},[240,155723,440],{"class":288},[240,155725,149103],{"class":257},[240,155727,53351],{"class":792},[240,155729,440],{"class":288},[240,155731,155732],{"class":443},"\"品类销售额\"",[240,155734,39993],{"class":257},[240,155736,155737,155739,155741,155743,155745,155747,155750],{"class":242,"line":3596},[240,155738,149117],{"class":792},[240,155740,440],{"class":288},[240,155742,149122],{"class":257},[240,155744,81724],{"class":792},[240,155746,440],{"class":288},[240,155748,155749],{"class":443},"\"品类\"",[240,155751,39993],{"class":257},[240,155753,155754,155756,155758,155760,155762,155764,155766],{"class":242,"line":3601},[240,155755,149136],{"class":792},[240,155757,440],{"class":288},[240,155759,149122],{"class":257},[240,155761,81724],{"class":792},[240,155763,440],{"class":288},[240,155765,148920],{"class":443},[240,155767,39993],{"class":257},[240,155769,155770],{"class":242,"line":3607},[240,155771,2129],{"class":257},[240,155773,155774,155777,155780],{"class":242,"line":3628},[240,155775,155776],{"class":257},"bar.render(",[240,155778,155779],{"class":443},"\"category_sales.html\"",[240,155781,2129],{"class":257},[14,155783,155785],{"id":155784},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[19,155787,155788],{},"时间线适合展示不同日期、月份、年份的数据变化。",[231,155790,155792],{"className":32324,"code":155791,"language":32326,"meta":236,"style":236},"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",[23,155793,155794,155808,155819,155823,155831,155855,155878,155903,155907,155911,155921,155925,155936,155945,155955,155969,156000,156005,156009],{"__ignoreMap":236},[240,155795,155796,155798,155800,155802,155804,155806],{"class":242,"line":243},[240,155797,32683],{"class":288},[240,155799,149004],{"class":257},[240,155801,32338],{"class":288},[240,155803,149009],{"class":257},[240,155805,33329],{"class":288},[240,155807,149014],{"class":257},[240,155809,155810,155812,155814,155816],{"class":242,"line":250},[240,155811,32683],{"class":288},[240,155813,148863],{"class":257},[240,155815,32338],{"class":288},[240,155817,155818],{"class":257}," Bar, Timeline\n",[240,155820,155821],{"class":242,"line":261},[240,155822,4353],{"emptyLinePlaceholder":2051},[240,155824,155825,155827,155829],{"class":242,"line":277},[240,155826,103569],{"class":257},[240,155828,440],{"class":288},[240,155830,258],{"class":257},[240,155832,155833,155836,155839,155841,155843,155845,155847,155849,155851,155853],{"class":242,"line":294},[240,155834,155835],{"class":443},"    \"2024-10-01\"",[240,155837,155838],{"class":257},": {",[240,155840,155268],{"class":443},[240,155842,268],{"class":257},[240,155844,155277],{"class":264},[240,155846,1277],{"class":257},[240,155848,155298],{"class":443},[240,155850,268],{"class":257},[240,155852,155307],{"class":264},[240,155854,6882],{"class":257},[240,155856,155857,155860,155862,155864,155866,155868,155870,155872,155874,155876],{"class":242,"line":309},[240,155858,155859],{"class":443},"    \"2024-10-02\"",[240,155861,155838],{"class":257},[240,155863,155268],{"class":443},[240,155865,268],{"class":257},[240,155867,155336],{"class":264},[240,155869,1277],{"class":257},[240,155871,155298],{"class":443},[240,155873,268],{"class":257},[240,155875,155365],{"class":264},[240,155877,6882],{"class":257},[240,155879,155880,155883,155885,155887,155889,155892,155894,155896,155898,155901],{"class":242,"line":529},[240,155881,155882],{"class":443},"    \"2024-10-03\"",[240,155884,155838],{"class":257},[240,155886,155268],{"class":443},[240,155888,268],{"class":257},[240,155890,155891],{"class":264},"17000",[240,155893,1277],{"class":257},[240,155895,155298],{"class":443},[240,155897,268],{"class":257},[240,155899,155900],{"class":264},"19000",[240,155902,6882],{"class":257},[240,155904,155905],{"class":242,"line":549},[240,155906,312],{"class":257},[240,155908,155909],{"class":242,"line":569},[240,155910,4353],{"emptyLinePlaceholder":2051},[240,155912,155913,155916,155918],{"class":242,"line":589},[240,155914,155915],{"class":257},"timeline ",[240,155917,440],{"class":288},[240,155919,155920],{"class":257}," Timeline()\n",[240,155922,155923],{"class":242,"line":715},[240,155924,4353],{"emptyLinePlaceholder":2051},[240,155926,155927,155929,155932,155934],{"class":242,"line":727},[240,155928,4977],{"class":288},[240,155930,155931],{"class":257}," date, category_data ",[240,155933,27989],{"class":288},[240,155935,150773],{"class":257},[240,155937,155938,155941,155943],{"class":242,"line":1730},[240,155939,155940],{"class":257},"    bar ",[240,155942,440],{"class":288},[240,155944,155687],{"class":257},[240,155946,155947,155950,155952],{"class":242,"line":3582},[240,155948,155949],{"class":257},"    bar.add_xaxis(",[240,155951,155695],{"class":264},[240,155953,155954],{"class":257},"(category_data.keys()))\n",[240,155956,155957,155960,155962,155964,155966],{"class":242,"line":3596},[240,155958,155959],{"class":257},"    bar.add_yaxis(",[240,155961,148920],{"class":443},[240,155963,1277],{"class":257},[240,155965,155695],{"class":264},[240,155967,155968],{"class":257},"(category_data.values()))\n",[240,155970,155971,155974,155977,155979,155981,155983,155985,155987,155989,155991,155993,155995,155998],{"class":242,"line":3601},[240,155972,155973],{"class":257},"    bar.set_global_opts(",[240,155975,155976],{"class":792},"title_opts",[240,155978,440],{"class":288},[240,155980,149103],{"class":257},[240,155982,53351],{"class":792},[240,155984,440],{"class":288},[240,155986,2172],{"class":288},[240,155988,2355],{"class":443},[240,155990,2991],{"class":264},[240,155992,75841],{"class":257},[240,155994,3040],{"class":264},[240,155996,155997],{"class":443},"销售额\"",[240,155999,32443],{"class":257},[240,156001,156002],{"class":242,"line":3607},[240,156003,156004],{"class":257},"    timeline.add(bar, date)\n",[240,156006,156007],{"class":242,"line":3628},[240,156008,4353],{"emptyLinePlaceholder":2051},[240,156010,156011,156014,156017],{"class":242,"line":3633},[240,156012,156013],{"class":257},"timeline.render(",[240,156015,156016],{"class":443},"\"timeline_sales.html\"",[240,156018,2129],{"class":257},[14,156020,156022],{"id":156021},"_128-绘制地图","12.8 绘制地图",[19,156024,156025],{},"地图适合展示地区数据。",[231,156027,156029],{"className":32324,"code":156028,"language":32326,"meta":236,"style":236},"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",[23,156030,156031,156045,156056,156060,156068,156081,156093,156106,156119,156123,156127,156137,156152,156157,156174,156193,156197],{"__ignoreMap":236},[240,156032,156033,156035,156037,156039,156041,156043],{"class":242,"line":243},[240,156034,32683],{"class":288},[240,156036,149004],{"class":257},[240,156038,32338],{"class":288},[240,156040,149009],{"class":257},[240,156042,33329],{"class":288},[240,156044,149014],{"class":257},[240,156046,156047,156049,156051,156053],{"class":242,"line":250},[240,156048,32683],{"class":288},[240,156050,148863],{"class":257},[240,156052,32338],{"class":288},[240,156054,156055],{"class":257}," Map\n",[240,156057,156058],{"class":242,"line":261},[240,156059,4353],{"emptyLinePlaceholder":2051},[240,156061,156062,156064,156066],{"class":242,"line":277},[240,156063,103569],{"class":257},[240,156065,440],{"class":288},[240,156067,57380],{"class":257},[240,156069,156070,156073,156075,156077,156079],{"class":242,"line":294},[240,156071,156072],{"class":257},"    (",[240,156074,71192],{"class":443},[240,156076,1277],{"class":257},[240,156078,1575],{"class":264},[240,156080,39993],{"class":257},[240,156082,156083,156085,156087,156089,156091],{"class":242,"line":309},[240,156084,156072],{"class":257},[240,156086,71212],{"class":443},[240,156088,1277],{"class":257},[240,156090,148937],{"class":264},[240,156092,39993],{"class":257},[240,156094,156095,156097,156100,156102,156104],{"class":242,"line":529},[240,156096,156072],{"class":257},[240,156098,156099],{"class":443},"\"广东\"",[240,156101,1277],{"class":257},[240,156103,3676],{"class":264},[240,156105,39993],{"class":257},[240,156107,156108,156110,156113,156115,156117],{"class":242,"line":549},[240,156109,156072],{"class":257},[240,156111,156112],{"class":443},"\"浙江\"",[240,156114,1277],{"class":257},[240,156116,148942],{"class":264},[240,156118,39993],{"class":257},[240,156120,156121],{"class":242,"line":569},[240,156122,35192],{"class":257},[240,156124,156125],{"class":242,"line":589},[240,156126,4353],{"emptyLinePlaceholder":2051},[240,156128,156129,156132,156134],{"class":242,"line":715},[240,156130,156131],{"class":257},"map_chart ",[240,156133,440],{"class":288},[240,156135,156136],{"class":257}," Map()\n",[240,156138,156139,156142,156144,156147,156150],{"class":242,"line":727},[240,156140,156141],{"class":257},"map_chart.add(",[240,156143,148920],{"class":443},[240,156145,156146],{"class":257},", data, ",[240,156148,156149],{"class":443},"\"china\"",[240,156151,2129],{"class":257},[240,156153,156154],{"class":242,"line":1730},[240,156155,156156],{"class":257},"map_chart.set_global_opts(\n",[240,156158,156159,156161,156163,156165,156167,156169,156172],{"class":242,"line":3582},[240,156160,149098],{"class":792},[240,156162,440],{"class":288},[240,156164,149103],{"class":257},[240,156166,53351],{"class":792},[240,156168,440],{"class":288},[240,156170,156171],{"class":443},"\"地区销售额\"",[240,156173,39993],{"class":257},[240,156175,156176,156179,156181,156184,156187,156189,156191],{"class":242,"line":3596},[240,156177,156178],{"class":792},"    visualmap_opts",[240,156180,440],{"class":288},[240,156182,156183],{"class":257},"opts.VisualMapOpts(",[240,156185,156186],{"class":792},"max_",[240,156188,440],{"class":288},[240,156190,3676],{"class":264},[240,156192,39993],{"class":257},[240,156194,156195],{"class":242,"line":3601},[240,156196,2129],{"class":257},[240,156198,156199,156202,156205],{"class":242,"line":3607},[240,156200,156201],{"class":257},"map_chart.render(",[240,156203,156204],{"class":443},"\"map_sales.html\"",[240,156206,2129],{"class":257},[19,156208,156209],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[14,156211,156213],{"id":156212},"_129-项目拆分建议","12.9 项目拆分建议",[19,156215,156216],{},"当代码超过一个文件时，可以这样组织：",[231,156218,156221],{"className":156219,"code":156220,"language":7139,"meta":236},[7137],"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",[23,156222,156220],{"__ignoreMap":236},[19,156224,156225],{},"职责：",[1826,156227,156228,156234,156240,156246],{},[1829,156229,156230,156233],{},[23,156231,156232],{},"main.py","：程序入口。",[1829,156235,156236,156239],{},[23,156237,156238],{},"file_utils.py","：读写 JSON。",[1829,156241,156242,156245],{},[23,156243,156244],{},"sales_service.py","：统计销售数据。",[1829,156247,156248,156251],{},[23,156249,156250],{},"chart_builder.py","：生成图表。",[14,156253,156255],{"id":156254},"_1210-python基础复习清单","12.10 Python基础复习清单",[19,156257,156258],{},"语法基础：",[1826,156260,156261,156264,156267,156270],{},[1829,156262,156263],{},"会写变量、注释、输入输出。",[1829,156265,156266],{},"会使用 int、float、str、bool。",[1829,156268,156269],{},"会做类型转换。",[1829,156271,156272],{},"会使用 f-string 格式化输出。",[19,156274,156275],{},"流程控制：",[1826,156277,156278,156284,156290,156298],{},[1829,156279,156280,156281,30331],{},"会写 ",[23,156282,156283],{},"if elif else",[1829,156285,156280,156286,102929,156288,30331],{},[23,156287,110573],{},[23,156289,4977],{},[1829,156291,156292,156293,102929,156295,30331],{},"理解 ",[23,156294,4006],{},[23,156296,156297],{},"continue",[1829,156299,156300],{},"能写嵌套循环。",[19,156302,156303],{},"函数：",[1826,156305,156306,156309,156312,156315],{},[1829,156307,156308],{},"会定义和调用函数。",[1829,156310,156311],{},"理解参数和返回值。",[1829,156313,156314],{},"知道局部变量和全局变量。",[1829,156316,156317],{},"会使用默认参数、关键字参数、不定长参数。",[19,156319,156320],{},"容器：",[1826,156322,156323,156326,156329,156332,156335],{},[1829,156324,156325],{},"会使用列表增删改查。",[1829,156327,156328],{},"会遍历列表、字典。",[1829,156330,156331],{},"会使用切片。",[1829,156333,156334],{},"会用集合去重。",[1829,156336,156337],{},"会处理列表嵌套字典。",[19,156339,156340],{},"文件和模块：",[1826,156342,156343,156346,156349,156352,156355],{},[1829,156344,156345],{},"会读写文本文件。",[1829,156347,156348],{},"会读写 JSON。",[1829,156350,156351],{},"会捕获常见异常。",[1829,156353,156354],{},"会导入模块和第三方包。",[1829,156356,156357],{},"会创建简单包结构。",[19,156359,156360],{},"项目能力：",[1826,156362,156363,156366,156369,156372,156375],{},[1829,156364,156365],{},"能把代码拆成函数。",[1829,156367,156368],{},"能把数据保存到文件。",[1829,156370,156371],{},"能处理用户输入错误。",[1829,156373,156374],{},"能写一个完整菜单程序。",[1829,156376,156377],{},"能用 pyecharts 生成图表。",[14,156379,156381],{"id":156380},"_1211-推荐练习顺序","12.11 推荐练习顺序",[1826,156383,156384,156387,156390,156393,156396,156399,156402,156405],{},[1829,156385,156386],{},"猜数字游戏。",[1829,156388,156389],{},"ATM 菜单程序。",[1829,156391,156392],{},"学生成绩统计。",[1829,156394,156395],{},"学生管理系统函数版。",[1829,156397,156398],{},"学生管理系统文件持久化版。",[1829,156400,156401],{},"学生管理系统面向对象版。",[1829,156403,156404],{},"销售数据统计。",[1829,156406,156407],{},"销售数据可视化。",[14,156409,156411],{"id":156410},"_1212-常见学习误区","12.12 常见学习误区",[1826,156413,156414,156417,156420,156423,156426,156429,156432],{},[1829,156415,156416],{},"只看视频不敲代码。",[1829,156418,156419],{},"一报错就复制错误去搜，不先读报错位置。",[1829,156421,156422],{},"变量名随便写，后续自己看不懂。",[1829,156424,156425],{},"所有代码都写在一个文件一个函数里。",[1829,156427,156428],{},"不保存练习代码，复习时没有材料。",[1829,156430,156431],{},"还没掌握列表字典就急着学框架。",[1829,156433,156434],{},"不会读官方文档，只依赖教程。",[14,156436,156438],{"id":156437},"_1213-如何读报错","12.13 如何读报错",[19,156440,156441],{},"报错通常从下往上看最后几行。",[19,156443,17084],{},[231,156445,156448],{"className":156446,"code":156447,"language":7139,"meta":236},[7137],"ValueError: invalid literal for int() with base 10: 'abc'\n",[23,156449,156447],{"__ignoreMap":236},[19,156451,26546],{},[1826,156453,156454,156460,156470],{},[1829,156455,156456,156457,30331],{},"异常类型是 ",[23,156458,156459],{},"ValueError",[1829,156461,109255,156462,156465,156466,156469],{},[23,156463,156464],{},"int()"," 无法把 ",[23,156467,156468],{},"'abc'"," 转成整数。",[1829,156471,156472],{},"应该检查输入内容或增加异常处理。",[19,156474,156475],{},"再看文件名和行号：",[231,156477,156480],{"className":156478,"code":156479,"language":7139,"meta":236},[7137],"File \"main.py\", line 10, in \u003Cmodule>\n",[23,156481,156479],{"__ignoreMap":236},[19,156483,156484,156485,156487],{},"表示错误发生在 ",[23,156486,156232],{}," 第 10 行。",[14,156489,156491],{"id":156490},"_1214-后续学习方向","12.14 后续学习方向",[19,156493,156494],{},"Python 基础完成后，可以按兴趣选择方向：",[1826,156496,156497,156509,156518,156530,156541,156550,156560],{},[1829,156498,156499,156500,46,156503,46,156506,30331],{},"自动化办公：",[23,156501,156502],{},"openpyxl",[23,156504,156505],{},"python-docx",[23,156507,156508],{},"pdfplumber",[1829,156510,156511,156512,46,156514,46,156516,30331],{},"数据分析：",[23,156513,102537],{},[23,156515,147810],{},[23,156517,147818],{},[1829,156519,156520,156521,46,156524,46,156527,30331],{},"Web 后端：",[23,156522,156523],{},"Flask",[23,156525,156526],{},"FastAPI",[23,156528,156529],{},"Django",[1829,156531,156532,156533,46,156535,46,156538,30331],{},"爬虫：",[23,156534,147795],{},[23,156536,156537],{},"BeautifulSoup",[23,156539,156540],{},"Scrapy",[1829,156542,156543,156544,46,156546,156549],{},"测试开发：",[23,156545,147842],{},[23,156547,156548],{},"selenium","、接口测试。",[1829,156551,156552,156553,46,156555,46,156557,30331],{},"人工智能：",[23,156554,102537],{},[23,156556,147810],{},[23,156558,156559],{},"pytorch",[1829,156561,156562,156563,46,156565,46,156568,30331],{},"运维脚本：",[23,156564,147411],{},[23,156566,156567],{},"subprocess",[23,156569,156570],{},"paramiko",[19,156572,156573],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[14,156575,156577],{"id":156576},"_1215-结课练习","12.15 结课练习",[1826,156579,156580,156583,156586,156589,156592,156595,156598,156601],{},[1829,156581,156582],{},"完成函数版学生管理系统。",[1829,156584,156585],{},"给学生管理系统增加 JSON 持久化。",[1829,156587,156588],{},"给学生管理系统增加异常处理。",[1829,156590,156591],{},"把学生管理系统改成面向对象版。",[1829,156593,156594],{},"使用 pyecharts 绘制学生成绩柱状图。",[1829,156596,156597],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[1829,156599,156600],{},"按品类统计销售额并绘制柱状图。",[1829,156602,156603],{},"写一份自己的 Python 学习路线图。",[2019,156605,156606],{},"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":236,"searchDepth":250,"depth":250,"links":156608},[156609,156610,156613,156614,156615,156621,156622,156623,156624,156625,156626,156627,156628,156629,156630],{"id":153325,"depth":250,"text":153326},{"id":153375,"depth":250,"text":153376,"children":156611},[156612],{"id":153379,"depth":261,"text":153380},{"id":153418,"depth":250,"text":153419},{"id":154892,"depth":250,"text":154893},{"id":155230,"depth":250,"text":155231,"children":156616},[156617,156618,156619,156620],{"id":155234,"depth":261,"text":155235},{"id":155374,"depth":261,"text":155375},{"id":155464,"depth":261,"text":155465},{"id":155550,"depth":261,"text":155551},{"id":155591,"depth":250,"text":155592},{"id":155784,"depth":250,"text":155785},{"id":156021,"depth":250,"text":156022},{"id":156212,"depth":250,"text":156213},{"id":156254,"depth":250,"text":156255},{"id":156380,"depth":250,"text":156381},{"id":156410,"depth":250,"text":156411},{"id":156437,"depth":250,"text":156438},{"id":156490,"depth":250,"text":156491},{"id":156576,"depth":250,"text":156577},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":153317,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":156637,"title":156638,"body":156639,"description":2048,"extension":2049,"meta":159108,"navigation":2051,"path":159109,"seo":159110,"stem":159111,"__hash__":159112},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":156640,"toc":159083},[156641,156644,156648,156651,156654,156674,156677,156700,156703,156706,156728,156731,156753,156757,156760,156800,156803,156924,156928,156931,156971,156974,156998,157001,157005,157008,157022,157055,157058,157093,157096,157119,157122,157155,157158,157160,157166,157241,157244,157250,157267,157307,157311,157314,157360,157362,157400,157403,157438,157441,157476,157479,157511,157514,157533,157537,157541,157654,157656,157731,157735,157781,157784,157810,157819,157823,157826,157889,157897,157925,157929,157969,158034,158038,158041,158080,158083,158128,158131,158192,158196,158223,158226,158254,158257,158261,158265,158330,158333,158371,158374,158406,158410,158509,158513,158516,158589,158592,158640,158644,158650,158690,158693,158740,158743,158792,158796,158798,158812,158814,158995,158999,159026,159046,159053,159057,159074,159080],[10,156642,156638],{"id":156643},"_2-基础语法变量与字符串",[14,156645,156647],{"id":156646},"_21-注释","2.1 注释",[19,156649,156650],{},"注释是给人看的说明文字，不会被 Python 执行。",[19,156652,156653],{},"单行注释：",[231,156655,156657],{"className":32324,"code":156656,"language":32326,"meta":236,"style":236},"# 这是单行注释\nprint(\"hello\")\n",[23,156658,156659,156664],{"__ignoreMap":236},[240,156660,156661],{"class":242,"line":243},[240,156662,156663],{"class":246},"# 这是单行注释\n",[240,156665,156666,156668,156670,156672],{"class":242,"line":250},[240,156667,32361],{"class":264},[240,156669,789],{"class":257},[240,156671,7795],{"class":443},[240,156673,2129],{"class":257},[19,156675,156676],{},"多行说明常用三引号：",[231,156678,156680],{"className":32324,"code":156679,"language":32326,"meta":236,"style":236},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[23,156681,156682,156686,156691,156696],{"__ignoreMap":236},[240,156683,156684],{"class":242,"line":243},[240,156685,97611],{"class":443},[240,156687,156688],{"class":242,"line":250},[240,156689,156690],{"class":443},"这是多行说明。\n",[240,156692,156693],{"class":242,"line":261},[240,156694,156695],{"class":443},"常用于文件顶部说明、函数说明等。\n",[240,156697,156698],{"class":242,"line":277},[240,156699,97611],{"class":443},[19,156701,156702],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[19,156704,156705],{},"不好：",[231,156707,156709],{"className":32324,"code":156708,"language":32326,"meta":236,"style":236},"# age 加 1\nage = age + 1\n",[23,156710,156711,156716],{"__ignoreMap":236},[240,156712,156713],{"class":242,"line":243},[240,156714,156715],{"class":246},"# age 加 1\n",[240,156717,156718,156720,156722,156724,156726],{"class":242,"line":250},[240,156719,148171],{"class":257},[240,156721,440],{"class":288},[240,156723,17655],{"class":257},[240,156725,2580],{"class":288},[240,156727,57632],{"class":264},[19,156729,156730],{},"较好：",[231,156732,156734],{"className":32324,"code":156733,"language":32326,"meta":236,"style":236},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[23,156735,156736,156741],{"__ignoreMap":236},[240,156737,156738],{"class":242,"line":243},[240,156739,156740],{"class":246},"# 用户过完生日后，年龄增加一岁\n",[240,156742,156743,156745,156747,156749,156751],{"class":242,"line":250},[240,156744,148171],{"class":257},[240,156746,440],{"class":288},[240,156748,17655],{"class":257},[240,156750,2580],{"class":288},[240,156752,57632],{"class":264},[14,156754,156756],{"id":156755},"_22-字面量","2.2 字面量",[19,156758,156759],{},"字面量就是代码中直接写出来的数据。",[231,156761,156763],{"className":32324,"code":156762,"language":32326,"meta":236,"style":236},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[23,156764,156765,156772,156779,156786,156793],{"__ignoreMap":236},[240,156766,156767,156769],{"class":242,"line":243},[240,156768,285],{"class":264},[240,156770,156771],{"class":246},"          # 整数\n",[240,156773,156774,156776],{"class":242,"line":250},[240,156775,2169],{"class":264},[240,156777,156778],{"class":246},"         # 小数\n",[240,156780,156781,156783],{"class":242,"line":261},[240,156782,7795],{"class":443},[240,156784,156785],{"class":246},"      # 字符串\n",[240,156787,156788,156790],{"class":242,"line":277},[240,156789,33422],{"class":264},[240,156791,156792],{"class":246},"         # 布尔值\n",[240,156794,156795,156797],{"class":242,"line":294},[240,156796,97599],{"class":264},[240,156798,156799],{"class":246},"         # 空值\n",[19,156801,156802],{},"常见字面量类型：",[802,156804,156805,156815],{},[805,156806,156807],{},[808,156808,156809,156811,156813],{},[811,156810,25683],{},[811,156812,29438],{},[811,156814,1057],{},[819,156816,156817,156828,156839,156850,156862,156874,156886,156899,156911],{},[808,156818,156819,156821,156825],{},[824,156820,2126],{},[824,156822,156823],{},[23,156824,285],{},[824,156826,156827],{},"整数",[808,156829,156830,156832,156836],{},[824,156831,2161],{},[824,156833,156834],{},[23,156835,2169],{},[824,156837,156838],{},"浮点数",[808,156840,156841,156843,156847],{},[824,156842,3262],{},[824,156844,156845],{},[23,156846,7795],{},[824,156848,156849],{},"字符串",[808,156851,156852,156854,156860],{},[824,156853,3314],{},[824,156855,156856,46,156858],{},[23,156857,33422],{},[23,156859,35933],{},[824,156861,67938],{},[808,156863,156864,156867,156871],{},[824,156865,156866],{},"NoneType",[824,156868,156869],{},[23,156870,97599],{},[824,156872,156873],{},"空值",[808,156875,156876,156878,156883],{},[824,156877,155695],{},[824,156879,156880],{},[23,156881,156882],{},"[1, 2, 3]",[824,156884,156885],{},"列表",[808,156887,156888,156891,156896],{},[824,156889,156890],{},"tuple",[824,156892,156893],{},[23,156894,156895],{},"(1, 2, 3)",[824,156897,156898],{},"元组",[808,156900,156901,156903,156908],{},[824,156902,116456],{},[824,156904,156905],{},[23,156906,156907],{},"{\"name\": \"张三\"}",[824,156909,156910],{},"字典",[808,156912,156913,156916,156921],{},[824,156914,156915],{},"set",[824,156917,156918],{},[23,156919,156920],{},"{1, 2, 3}",[824,156922,156923],{},"集合",[14,156925,156927],{"id":156926},"_23-变量","2.3 变量",[19,156929,156930],{},"变量是保存数据的名字。",[231,156932,156934],{"className":32324,"code":156933,"language":32326,"meta":236,"style":236},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[23,156935,156936,156944,156952,156962],{"__ignoreMap":236},[240,156937,156938,156940,156942],{"class":242,"line":243},[240,156939,148161],{"class":257},[240,156941,440],{"class":288},[240,156943,150978],{"class":443},[240,156945,156946,156948,156950],{"class":242,"line":250},[240,156947,148171],{"class":257},[240,156949,440],{"class":288},[240,156951,148176],{"class":264},[240,156953,156954,156957,156959],{"class":242,"line":261},[240,156955,156956],{"class":257},"height ",[240,156958,440],{"class":288},[240,156960,156961],{"class":264}," 1.75\n",[240,156963,156964,156967,156969],{"class":242,"line":277},[240,156965,156966],{"class":257},"is_student ",[240,156968,440],{"class":288},[240,156970,155224],{"class":264},[19,156972,156973],{},"Python 的变量不需要提前声明类型：",[231,156975,156977],{"className":32324,"code":156976,"language":32326,"meta":236,"style":236},"score = 100\nscore = \"满分\"\n",[23,156978,156979,156989],{"__ignoreMap":236},[240,156980,156981,156984,156986],{"class":242,"line":243},[240,156982,156983],{"class":257},"score ",[240,156985,440],{"class":288},[240,156987,156988],{"class":264}," 100\n",[240,156990,156991,156993,156995],{"class":242,"line":250},[240,156992,156983],{"class":257},[240,156994,440],{"class":288},[240,156996,156997],{"class":443}," \"满分\"\n",[19,156999,157000],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[14,157002,157004],{"id":157003},"_24-变量命名规则","2.4 变量命名规则",[19,157006,157007],{},"硬性规则：",[1826,157009,157010,157013,157016,157019],{},[1829,157011,157012],{},"只能由字母、数字、下划线组成。",[1829,157014,157015],{},"不能以数字开头。",[1829,157017,157018],{},"不能使用 Python 关键字。",[1829,157020,157021],{},"区分大小写。",[231,157023,157025],{"className":32324,"code":157024,"language":32326,"meta":236,"style":236},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[23,157026,157027,157036,157045],{"__ignoreMap":236},[240,157028,157029,157032,157034],{"class":242,"line":243},[240,157030,157031],{"class":257},"user_name ",[240,157033,440],{"class":288},[240,157035,148166],{"class":443},[240,157037,157038,157041,157043],{"class":242,"line":250},[240,157039,157040],{"class":257},"age2 ",[240,157042,440],{"class":288},[240,157044,148176],{"class":264},[240,157046,157047,157050,157052],{"class":242,"line":261},[240,157048,157049],{"class":257},"_token ",[240,157051,440],{"class":288},[240,157053,157054],{"class":443}," \"abc\"\n",[19,157056,157057],{},"错误写法：",[231,157059,157061],{"className":32324,"code":157060,"language":32326,"meta":236,"style":236},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[23,157062,157063,157072,157084],{"__ignoreMap":236},[240,157064,157065,157068,157070],{"class":242,"line":243},[240,157066,157067],{"class":79317},"2age",[240,157069,15514],{"class":288},[240,157071,148176],{"class":264},[240,157073,157074,157076,157078,157080,157082],{"class":242,"line":250},[240,157075,133209],{"class":257},[240,157077,2631],{"class":288},[240,157079,148161],{"class":257},[240,157081,440],{"class":288},[240,157083,148166],{"class":443},[240,157085,157086,157088,157090],{"class":242,"line":261},[240,157087,16643],{"class":288},[240,157089,15514],{"class":288},[240,157091,157092],{"class":443}," \"一班\"\n",[19,157094,157095],{},"查看关键字：",[231,157097,157099],{"className":32324,"code":157098,"language":32326,"meta":236,"style":236},"import keyword\n\nprint(keyword.kwlist)\n",[23,157100,157101,157108,157112],{"__ignoreMap":236},[240,157102,157103,157105],{"class":242,"line":243},[240,157104,32338],{"class":288},[240,157106,157107],{"class":257}," keyword\n",[240,157109,157110],{"class":242,"line":250},[240,157111,4353],{"emptyLinePlaceholder":2051},[240,157113,157114,157116],{"class":242,"line":261},[240,157115,32361],{"class":264},[240,157117,157118],{"class":257},"(keyword.kwlist)\n",[19,157120,157121],{},"推荐命名风格：",[231,157123,157125],{"className":32324,"code":157124,"language":32326,"meta":236,"style":236},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[23,157126,157127,157136,157146],{"__ignoreMap":236},[240,157128,157129,157132,157134],{"class":242,"line":243},[240,157130,157131],{"class":257},"student_name ",[240,157133,440],{"class":288},[240,157135,150978],{"class":443},[240,157137,157138,157141,157143],{"class":242,"line":250},[240,157139,157140],{"class":257},"total_price ",[240,157142,440],{"class":288},[240,157144,157145],{"class":264}," 99.8\n",[240,157147,157148,157151,157153],{"class":242,"line":261},[240,157149,157150],{"class":257},"is_finished ",[240,157152,440],{"class":288},[240,157154,127717],{"class":264},[19,157156,157157],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[14,157159,52678],{"id":52677},[19,157161,106276,157162,157165],{},[23,157163,157164],{},"type()"," 查看数据类型：",[231,157167,157169],{"className":32324,"code":157168,"language":32326,"meta":236,"style":236},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[23,157170,157171,157185,157199,157213,157227],{"__ignoreMap":236},[240,157172,157173,157175,157177,157179,157181,157183],{"class":242,"line":243},[240,157174,32361],{"class":264},[240,157176,789],{"class":257},[240,157178,105017],{"class":264},[240,157180,789],{"class":257},[240,157182,285],{"class":264},[240,157184,32443],{"class":257},[240,157186,157187,157189,157191,157193,157195,157197],{"class":242,"line":250},[240,157188,32361],{"class":264},[240,157190,789],{"class":257},[240,157192,105017],{"class":264},[240,157194,789],{"class":257},[240,157196,2169],{"class":264},[240,157198,32443],{"class":257},[240,157200,157201,157203,157205,157207,157209,157211],{"class":242,"line":261},[240,157202,32361],{"class":264},[240,157204,789],{"class":257},[240,157206,105017],{"class":264},[240,157208,789],{"class":257},[240,157210,7795],{"class":443},[240,157212,32443],{"class":257},[240,157214,157215,157217,157219,157221,157223,157225],{"class":242,"line":277},[240,157216,32361],{"class":264},[240,157218,789],{"class":257},[240,157220,105017],{"class":264},[240,157222,789],{"class":257},[240,157224,33422],{"class":264},[240,157226,32443],{"class":257},[240,157228,157229,157231,157233,157235,157237,157239],{"class":242,"line":294},[240,157230,32361],{"class":264},[240,157232,789],{"class":257},[240,157234,105017],{"class":264},[240,157236,789],{"class":257},[240,157238,97599],{"class":264},[240,157240,32443],{"class":257},[19,157242,157243],{},"输出类似：",[231,157245,157248],{"className":157246,"code":157247,"language":7139,"meta":236},[7137],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[23,157249,157247],{"__ignoreMap":236},[19,157251,10976,157252,109193,157254,157256,157257,157259,157260,23447,157262,157259,157264,157266],{},[23,157253,3314],{},[23,157255,2126],{}," 的子类，",[23,157258,33422],{}," 可以当作 ",[23,157261,1643],{},[23,157263,35933],{},[23,157265,1274],{},"，但业务代码中不要滥用。",[231,157268,157270],{"className":32324,"code":157269,"language":32326,"meta":236,"style":236},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[23,157271,157272,157290],{"__ignoreMap":236},[240,157273,157274,157276,157278,157280,157282,157284,157287],{"class":242,"line":243},[240,157275,32361],{"class":264},[240,157277,789],{"class":257},[240,157279,33422],{"class":264},[240,157281,47512],{"class":288},[240,157283,27065],{"class":264},[240,157285,157286],{"class":257},")   ",[240,157288,157289],{"class":246},"# 2\n",[240,157291,157292,157294,157296,157298,157300,157302,157304],{"class":242,"line":250},[240,157293,32361],{"class":264},[240,157295,789],{"class":257},[240,157297,35933],{"class":264},[240,157299,47512],{"class":288},[240,157301,27065],{"class":264},[240,157303,47754],{"class":257},[240,157305,157306],{"class":246},"# 1\n",[14,157308,157310],{"id":157309},"_26-类型转换","2.6 类型转换",[19,157312,157313],{},"常用转换函数：",[231,157315,157317],{"className":32324,"code":157316,"language":32326,"meta":236,"style":236},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[23,157318,157319,157329,157340,157350],{"__ignoreMap":236},[240,157320,157321,157323,157325,157327],{"class":242,"line":243},[240,157322,2126],{"class":264},[240,157324,789],{"class":257},[240,157326,56251],{"class":443},[240,157328,2129],{"class":257},[240,157330,157331,157333,157335,157338],{"class":242,"line":250},[240,157332,2161],{"class":264},[240,157334,789],{"class":257},[240,157336,157337],{"class":443},"\"3.14\"",[240,157339,2129],{"class":257},[240,157341,157342,157344,157346,157348],{"class":242,"line":261},[240,157343,3262],{"class":264},[240,157345,789],{"class":257},[240,157347,285],{"class":264},[240,157349,2129],{"class":257},[240,157351,157352,157354,157356,157358],{"class":242,"line":277},[240,157353,3314],{"class":264},[240,157355,789],{"class":257},[240,157357,1643],{"class":264},[240,157359,2129],{"class":257},[19,157361,17084],{},[231,157363,157365],{"className":32324,"code":157364,"language":32326,"meta":236,"style":236},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[23,157366,157367,157376,157387],{"__ignoreMap":236},[240,157368,157369,157371,157373],{"class":242,"line":243},[240,157370,148171],{"class":257},[240,157372,440],{"class":288},[240,157374,157375],{"class":443}," \"18\"\n",[240,157377,157378,157380,157382,157384],{"class":242,"line":250},[240,157379,148171],{"class":257},[240,157381,440],{"class":288},[240,157383,4335],{"class":264},[240,157385,157386],{"class":257},"(age)\n",[240,157388,157389,157391,157394,157396,157398],{"class":242,"line":261},[240,157390,32361],{"class":264},[240,157392,157393],{"class":257},"(age ",[240,157395,2580],{"class":288},[240,157397,27065],{"class":264},[240,157399,2129],{"class":257},[19,157401,157402],{},"输入得到的内容永远是字符串：",[231,157404,157406],{"className":32324,"code":157405,"language":32326,"meta":236,"style":236},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[23,157407,157408,157424],{"__ignoreMap":236},[240,157409,157410,157413,157415,157417,157419,157422],{"class":242,"line":243},[240,157411,157412],{"class":257},"num ",[240,157414,440],{"class":288},[240,157416,62536],{"class":264},[240,157418,789],{"class":257},[240,157420,157421],{"class":443},"\"请输入数字:\"",[240,157423,2129],{"class":257},[240,157425,157426,157428,157430,157432,157435],{"class":242,"line":250},[240,157427,32361],{"class":264},[240,157429,789],{"class":257},[240,157431,105017],{"class":264},[240,157433,157434],{"class":257},"(num))  ",[240,157436,157437],{"class":246},"# str\n",[19,157439,157440],{},"如果要做数学运算，必须转换：",[231,157442,157444],{"className":32324,"code":157443,"language":32326,"meta":236,"style":236},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[23,157445,157446,157464],{"__ignoreMap":236},[240,157447,157448,157450,157452,157454,157456,157458,157460,157462],{"class":242,"line":243},[240,157449,157412],{"class":257},[240,157451,440],{"class":288},[240,157453,4335],{"class":264},[240,157455,789],{"class":257},[240,157457,55756],{"class":264},[240,157459,789],{"class":257},[240,157461,157421],{"class":443},[240,157463,32443],{"class":257},[240,157465,157466,157468,157470,157472,157474],{"class":242,"line":250},[240,157467,32361],{"class":264},[240,157469,47565],{"class":257},[240,157471,2580],{"class":288},[240,157473,3991],{"class":264},[240,157475,2129],{"class":257},[19,157477,157478],{},"常见错误：",[231,157480,157482],{"className":32324,"code":157481,"language":32326,"meta":236,"style":236},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[23,157483,157484,157497],{"__ignoreMap":236},[240,157485,157486,157488,157490,157492,157494],{"class":242,"line":243},[240,157487,2126],{"class":264},[240,157489,789],{"class":257},[240,157491,157337],{"class":443},[240,157493,157286],{"class":257},[240,157495,157496],{"class":246},"# 错误\n",[240,157498,157499,157501,157503,157506,157509],{"class":242,"line":250},[240,157500,2126],{"class":264},[240,157502,789],{"class":257},[240,157504,157505],{"class":443},"\"abc\"",[240,157507,157508],{"class":257},")    ",[240,157510,157496],{"class":246},[19,157512,157513],{},"正确写法：",[231,157515,157517],{"className":32324,"code":157516,"language":32326,"meta":236,"style":236},"num = float(\"3.14\")\n",[23,157518,157519],{"__ignoreMap":236},[240,157520,157521,157523,157525,157527,157529,157531],{"class":242,"line":243},[240,157522,157412],{"class":257},[240,157524,440],{"class":288},[240,157526,111707],{"class":264},[240,157528,789],{"class":257},[240,157530,157337],{"class":443},[240,157532,2129],{"class":257},[14,157534,157536],{"id":157535},"_27-运算符","2.7 运算符",[32,157538,157540],{"id":157539},"_271-算术运算符","2.7.1 算术运算符",[802,157542,157543,157554],{},[805,157544,157545],{},[808,157546,157547,157550,157552],{},[811,157548,157549],{},"运算符",[811,157551,1057],{},[811,157553,29438],{},[819,157555,157556,157570,157584,157598,157612,157626,157640],{},[808,157557,157558,157562,157565],{},[824,157559,157560],{},[23,157561,2580],{},[824,157563,157564],{},"加法",[824,157566,157567],{},[23,157568,157569],{},"1 + 2",[808,157571,157572,157576,157579],{},[824,157573,157574],{},[23,157575,2631],{},[824,157577,157578],{},"减法",[824,157580,157581],{},[23,157582,157583],{},"5 - 3",[808,157585,157586,157590,157593],{},[824,157587,157588],{},[23,157589,2554],{},[824,157591,157592],{},"乘法",[824,157594,157595],{},[23,157596,157597],{},"2 * 3",[808,157599,157600,157604,157607],{},[824,157601,157602],{},[23,157603,2683],{},[824,157605,157606],{},"除法，结果是浮点数",[824,157608,157609],{},[23,157610,157611],{},"5 \u002F 2",[808,157613,157614,157618,157621],{},[824,157615,157616],{},[23,157617,35275],{},[824,157619,157620],{},"整除",[824,157622,157623],{},[23,157624,157625],{},"5 \u002F\u002F 2",[808,157627,157628,157632,157635],{},[824,157629,157630],{},[23,157631,2429],{},[824,157633,157634],{},"取余",[824,157636,157637],{},[23,157638,157639],{},"5 % 2",[808,157641,157642,157646,157649],{},[824,157643,157644],{},[23,157645,12612],{},[824,157647,157648],{},"幂运算",[824,157650,157651],{},[23,157652,157653],{},"2 ** 3",[19,157655,17084],{},[231,157657,157659],{"className":32324,"code":157658,"language":32326,"meta":236,"style":236},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[23,157660,157661,157679,157696,157713],{"__ignoreMap":236},[240,157662,157663,157665,157667,157669,157672,157674,157676],{"class":242,"line":243},[240,157664,32361],{"class":264},[240,157666,789],{"class":257},[240,157668,1741],{"class":264},[240,157670,157671],{"class":288}," \u002F",[240,157673,16704],{"class":264},[240,157675,157286],{"class":257},[240,157677,157678],{"class":246},"# 2.5\n",[240,157680,157681,157683,157685,157687,157690,157692,157694],{"class":242,"line":250},[240,157682,32361],{"class":264},[240,157684,789],{"class":257},[240,157686,1741],{"class":264},[240,157688,157689],{"class":288}," \u002F\u002F",[240,157691,16704],{"class":264},[240,157693,47754],{"class":257},[240,157695,157289],{"class":246},[240,157697,157698,157700,157702,157704,157707,157709,157711],{"class":242,"line":261},[240,157699,32361],{"class":264},[240,157701,789],{"class":257},[240,157703,1741],{"class":264},[240,157705,157706],{"class":288}," %",[240,157708,16704],{"class":264},[240,157710,157286],{"class":257},[240,157712,157306],{"class":246},[240,157714,157715,157717,157719,157721,157724,157726,157728],{"class":242,"line":277},[240,157716,32361],{"class":264},[240,157718,789],{"class":257},[240,157720,1668],{"class":264},[240,157722,157723],{"class":288}," **",[240,157725,79984],{"class":264},[240,157727,47754],{"class":257},[240,157729,157730],{"class":246},"# 8\n",[32,157732,157734],{"id":157733},"_272-赋值运算符","2.7.2 赋值运算符",[231,157736,157738],{"className":32324,"code":157737,"language":32326,"meta":236,"style":236},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[23,157739,157740,157748,157756,157764,157772],{"__ignoreMap":236},[240,157741,157742,157744,157746],{"class":242,"line":243},[240,157743,157412],{"class":257},[240,157745,440],{"class":288},[240,157747,60359],{"class":264},[240,157749,157750,157752,157754],{"class":242,"line":250},[240,157751,157412],{"class":257},[240,157753,11428],{"class":288},[240,157755,56362],{"class":264},[240,157757,157758,157760,157762],{"class":242,"line":261},[240,157759,157412],{"class":257},[240,157761,151877],{"class":288},[240,157763,49669],{"class":264},[240,157765,157766,157768,157770],{"class":242,"line":277},[240,157767,157412],{"class":257},[240,157769,138773],{"class":288},[240,157771,121946],{"class":264},[240,157773,157774,157776,157779],{"class":242,"line":294},[240,157775,157412],{"class":257},[240,157777,157778],{"class":288},"\u002F=",[240,157780,49669],{"class":264},[19,157782,157783],{},"等价关系：",[231,157785,157787],{"className":32324,"code":157786,"language":32326,"meta":236,"style":236},"num += 1\nnum = num + 1\n",[23,157788,157789,157797],{"__ignoreMap":236},[240,157790,157791,157793,157795],{"class":242,"line":243},[240,157792,157412],{"class":257},[240,157794,11428],{"class":288},[240,157796,57632],{"class":264},[240,157798,157799,157801,157803,157806,157808],{"class":242,"line":250},[240,157800,157412],{"class":257},[240,157802,440],{"class":288},[240,157804,157805],{"class":257}," num ",[240,157807,2580],{"class":288},[240,157809,57632],{"class":264},[19,157811,157812,157813,102929,157816,30331],{},"Python 没有 ",[23,157814,157815],{},"num++",[23,157817,157818],{},"num--",[32,157820,157822],{"id":157821},"_273-比较运算符","2.7.3 比较运算符",[19,157824,157825],{},"比较运算结果是布尔值。",[231,157827,157829],{"className":32324,"code":157828,"language":32326,"meta":236,"style":236},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[23,157830,157831,157845,157860,157874],{"__ignoreMap":236},[240,157832,157833,157835,157837,157839,157841,157843],{"class":242,"line":243},[240,157834,32361],{"class":264},[240,157836,789],{"class":257},[240,157838,2546],{"class":264},[240,157840,28168],{"class":288},[240,157842,4101],{"class":264},[240,157844,2129],{"class":257},[240,157846,157847,157849,157851,157853,157856,157858],{"class":242,"line":250},[240,157848,32361],{"class":264},[240,157850,789],{"class":257},[240,157852,2546],{"class":264},[240,157854,157855],{"class":288}," >=",[240,157857,3991],{"class":264},[240,157859,2129],{"class":257},[240,157861,157862,157864,157866,157868,157870,157872],{"class":242,"line":261},[240,157863,32361],{"class":264},[240,157865,789],{"class":257},[240,157867,2546],{"class":264},[240,157869,103470],{"class":288},[240,157871,4036],{"class":264},[240,157873,2129],{"class":257},[240,157875,157876,157878,157880,157882,157885,157887],{"class":242,"line":277},[240,157877,32361],{"class":264},[240,157879,789],{"class":257},[240,157881,2546],{"class":264},[240,157883,157884],{"class":288}," !=",[240,157886,4036],{"class":264},[240,157888,2129],{"class":257},[19,157890,157891,157892,157894,157895,30331],{},"注意：判断相等用 ",[23,157893,4901],{},"，赋值用 ",[23,157896,440],{},[231,157898,157900],{"className":32324,"code":157899,"language":32326,"meta":236,"style":236},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[23,157901,157902,157914],{"__ignoreMap":236},[240,157903,157904,157906,157908,157911],{"class":242,"line":243},[240,157905,148171],{"class":257},[240,157907,440],{"class":288},[240,157909,157910],{"class":264}," 18",[240,157912,157913],{"class":246},"       # 赋值\n",[240,157915,157916,157918,157920,157922],{"class":242,"line":250},[240,157917,148171],{"class":257},[240,157919,4901],{"class":288},[240,157921,157910],{"class":264},[240,157923,157924],{"class":246},"      # 判断是否相等\n",[32,157926,157928],{"id":157927},"_274-逻辑运算符","2.7.4 逻辑运算符",[802,157930,157931,157939],{},[805,157932,157933],{},[808,157934,157935,157937],{},[811,157936,157549],{},[811,157938,1057],{},[819,157940,157941,157950,157959],{},[808,157942,157943,157947],{},[824,157944,157945],{},[23,157946,32408],{},[824,157948,157949],{},"并且",[808,157951,157952,157956],{},[824,157953,157954],{},[23,157955,117000],{},[824,157957,157958],{},"或者",[808,157960,157961,157966],{},[824,157962,157963],{},[23,157964,157965],{},"not",[824,157967,157968],{},"取反",[231,157970,157972],{"className":32324,"code":157971,"language":32326,"meta":236,"style":236},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[23,157973,157974,157982,157991,157995,158010,158024],{"__ignoreMap":236},[240,157975,157976,157978,157980],{"class":242,"line":243},[240,157977,148171],{"class":257},[240,157979,440],{"class":288},[240,157981,89978],{"class":264},[240,157983,157984,157987,157989],{"class":242,"line":250},[240,157985,157986],{"class":257},"has_ticket ",[240,157988,440],{"class":288},[240,157990,155224],{"class":264},[240,157992,157993],{"class":242,"line":261},[240,157994,4353],{"emptyLinePlaceholder":2051},[240,157996,157997,157999,158001,158003,158005,158007],{"class":242,"line":277},[240,157998,32361],{"class":264},[240,158000,157393],{"class":257},[240,158002,3664],{"class":288},[240,158004,157910],{"class":264},[240,158006,122339],{"class":288},[240,158008,158009],{"class":257}," has_ticket)\n",[240,158011,158012,158014,158016,158018,158020,158022],{"class":242,"line":294},[240,158013,32361],{"class":264},[240,158015,157393],{"class":257},[240,158017,431],{"class":288},[240,158019,157910],{"class":264},[240,158021,116111],{"class":288},[240,158023,158009],{"class":257},[240,158025,158026,158028,158030,158032],{"class":242,"line":309},[240,158027,32361],{"class":264},[240,158029,789],{"class":257},[240,158031,157965],{"class":288},[240,158033,158009],{"class":257},[14,158035,158037],{"id":158036},"_28-字符串定义","2.8 字符串定义",[19,158039,158040],{},"三种常见写法：",[231,158042,158044],{"className":32324,"code":158043,"language":32326,"meta":236,"style":236},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[23,158045,158046,158056,158065,158075],{"__ignoreMap":236},[240,158047,158048,158051,158053],{"class":242,"line":243},[240,158049,158050],{"class":257},"name1 ",[240,158052,440],{"class":288},[240,158054,158055],{"class":443}," '小明'\n",[240,158057,158058,158061,158063],{"class":242,"line":250},[240,158059,158060],{"class":257},"name2 ",[240,158062,440],{"class":288},[240,158064,150978],{"class":443},[240,158066,158067,158070,158072],{"class":242,"line":261},[240,158068,158069],{"class":257},"text ",[240,158071,440],{"class":288},[240,158073,158074],{"class":443}," \"\"\"这是多行字符串\n",[240,158076,158077],{"class":242,"line":277},[240,158078,158079],{"class":443},"可以换行\"\"\"\n",[19,158081,158082],{},"字符串中包含引号：",[231,158084,158086],{"className":32324,"code":158085,"language":32326,"meta":236,"style":236},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[23,158087,158088,158098,158108],{"__ignoreMap":236},[240,158089,158090,158093,158095],{"class":242,"line":243},[240,158091,158092],{"class":257},"msg ",[240,158094,440],{"class":288},[240,158096,158097],{"class":443}," \"他说:'你好'\"\n",[240,158099,158100,158103,158105],{"class":242,"line":250},[240,158101,158102],{"class":257},"msg2 ",[240,158104,440],{"class":288},[240,158106,158107],{"class":443}," '他说:\"你好\"'\n",[240,158109,158110,158113,158115,158118,158121,158124,158126],{"class":242,"line":261},[240,158111,158112],{"class":257},"msg3 ",[240,158114,440],{"class":288},[240,158116,158117],{"class":443}," \"他说:",[240,158119,158120],{"class":264},"\\\"",[240,158122,158123],{"class":443},"你好",[240,158125,158120],{"class":264},[240,158127,27080],{"class":443},[19,158129,158130],{},"常见转义字符：",[802,158132,158133,158142],{},[805,158134,158135],{},[808,158136,158137,158140],{},[811,158138,158139],{},"写法",[811,158141,102611],{},[819,158143,158144,158154,158163,158173,158182],{},[808,158145,158146,158151],{},[824,158147,158148],{},[23,158149,158150],{},"\\n",[824,158152,158153],{},"换行",[808,158155,158156,158160],{},[824,158157,158158],{},[23,158159,3194],{},[824,158161,158162],{},"制表符",[808,158164,158165,158170],{},[824,158166,158167],{},[23,158168,158169],{},"\\\\",[824,158171,158172],{},"反斜杠",[808,158174,158175,158179],{},[824,158176,158177],{},[23,158178,158120],{},[824,158180,158181],{},"双引号",[808,158183,158184,158189],{},[824,158185,158186],{},[23,158187,158188],{},"\\'",[824,158190,158191],{},"单引号",[14,158193,158195],{"id":158194},"_29-字符串拼接","2.9 字符串拼接",[231,158197,158199],{"className":32324,"code":158198,"language":32326,"meta":236,"style":236},"name = \"小明\"\nprint(\"你好，\" + name)\n",[23,158200,158201,158209],{"__ignoreMap":236},[240,158202,158203,158205,158207],{"class":242,"line":243},[240,158204,148161],{"class":257},[240,158206,440],{"class":288},[240,158208,150978],{"class":443},[240,158210,158211,158213,158215,158218,158220],{"class":242,"line":250},[240,158212,32361],{"class":264},[240,158214,789],{"class":257},[240,158216,158217],{"class":443},"\"你好，\"",[240,158219,47512],{"class":288},[240,158221,158222],{"class":257}," name)\n",[19,158224,158225],{},"字符串只能和字符串拼接：",[231,158227,158229],{"className":32324,"code":158228,"language":32326,"meta":236,"style":236},"age = 18\nprint(\"年龄:\" + str(age))\n",[23,158230,158231,158239],{"__ignoreMap":236},[240,158232,158233,158235,158237],{"class":242,"line":243},[240,158234,148171],{"class":257},[240,158236,440],{"class":288},[240,158238,148176],{"class":264},[240,158240,158241,158243,158245,158247,158249,158251],{"class":242,"line":250},[240,158242,32361],{"class":264},[240,158244,789],{"class":257},[240,158246,148142],{"class":443},[240,158248,47512],{"class":288},[240,158250,75834],{"class":264},[240,158252,158253],{"class":257},"(age))\n",[19,158255,158256],{},"更推荐使用格式化字符串。",[14,158258,158260],{"id":158259},"_210-字符串格式化","2.10 字符串格式化",[32,158262,158264],{"id":158263},"_2101-百分号格式化","2.10.1 百分号格式化",[231,158266,158268],{"className":32324,"code":158267,"language":32326,"meta":236,"style":236},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[23,158269,158270,158278,158286,158295,158299],{"__ignoreMap":236},[240,158271,158272,158274,158276],{"class":242,"line":243},[240,158273,148161],{"class":257},[240,158275,440],{"class":288},[240,158277,150978],{"class":443},[240,158279,158280,158282,158284],{"class":242,"line":250},[240,158281,148171],{"class":257},[240,158283,440],{"class":288},[240,158285,148176],{"class":264},[240,158287,158288,158290,158292],{"class":242,"line":261},[240,158289,156983],{"class":257},[240,158291,440],{"class":288},[240,158293,158294],{"class":264}," 95.5\n",[240,158296,158297],{"class":242,"line":277},[240,158298,4353],{"emptyLinePlaceholder":2051},[240,158300,158301,158303,158305,158308,158311,158314,158317,158320,158323,158325,158327],{"class":242,"line":294},[240,158302,32361],{"class":264},[240,158304,789],{"class":257},[240,158306,158307],{"class":443},"\"姓名:",[240,158309,158310],{"class":264},"%s",[240,158312,158313],{"class":443}," 年龄:",[240,158315,158316],{"class":264},"%d",[240,158318,158319],{"class":443}," 分数:",[240,158321,158322],{"class":264},"%.1f",[240,158324,2355],{"class":443},[240,158326,157706],{"class":288},[240,158328,158329],{"class":257}," (name, age, score))\n",[19,158331,158332],{},"常用占位符：",[802,158334,158335,158344],{},[805,158336,158337],{},[808,158338,158339,158342],{},[811,158340,158341],{},"占位符",[811,158343,1057],{},[819,158345,158346,158354,158362],{},[808,158347,158348,158352],{},[824,158349,158350],{},[23,158351,158310],{},[824,158353,156849],{},[808,158355,158356,158360],{},[824,158357,158358],{},[23,158359,158316],{},[824,158361,156827],{},[808,158363,158364,158369],{},[824,158365,158366],{},[23,158367,158368],{},"%f",[824,158370,156838],{},[19,158372,158373],{},"精度控制：",[231,158375,158377],{"className":32324,"code":158376,"language":32326,"meta":236,"style":236},"price = 12.3456\nprint(\"%.2f\" % price)\n",[23,158378,158379,158388],{"__ignoreMap":236},[240,158380,158381,158383,158385],{"class":242,"line":243},[240,158382,148306],{"class":257},[240,158384,440],{"class":288},[240,158386,158387],{"class":264}," 12.3456\n",[240,158389,158390,158392,158394,158396,158399,158401,158403],{"class":242,"line":250},[240,158391,32361],{"class":264},[240,158393,789],{"class":257},[240,158395,2355],{"class":443},[240,158397,158398],{"class":264},"%.2f",[240,158400,2355],{"class":443},[240,158402,157706],{"class":288},[240,158404,158405],{"class":257}," price)\n",[32,158407,158409],{"id":158408},"_2102-format方法","2.10.2 format方法",[231,158411,158413],{"className":32324,"code":158412,"language":32326,"meta":236,"style":236},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[23,158414,158415,158423,158431,158435,158454,158474],{"__ignoreMap":236},[240,158416,158417,158419,158421],{"class":242,"line":243},[240,158418,148161],{"class":257},[240,158420,440],{"class":288},[240,158422,150978],{"class":443},[240,158424,158425,158427,158429],{"class":242,"line":250},[240,158426,148171],{"class":257},[240,158428,440],{"class":288},[240,158430,148176],{"class":264},[240,158432,158433],{"class":242,"line":261},[240,158434,4353],{"emptyLinePlaceholder":2051},[240,158436,158437,158439,158441,158443,158445,158447,158449,158451],{"class":242,"line":277},[240,158438,32361],{"class":264},[240,158440,789],{"class":257},[240,158442,158307],{"class":443},[240,158444,34405],{"class":264},[240,158446,158313],{"class":443},[240,158448,34405],{"class":264},[240,158450,2355],{"class":443},[240,158452,158453],{"class":257},".format(name, age))\n",[240,158455,158456,158458,158460,158462,158465,158467,158470,158472],{"class":242,"line":294},[240,158457,32361],{"class":264},[240,158459,789],{"class":257},[240,158461,158307],{"class":443},[240,158463,158464],{"class":264},"{0}",[240,158466,158313],{"class":443},[240,158468,158469],{"class":264},"{1}",[240,158471,2355],{"class":443},[240,158473,158453],{"class":257},[240,158475,158476,158478,158480,158482,158485,158487,158490,158492,158495,158497,158499,158502,158504,158506],{"class":242,"line":309},[240,158477,32361],{"class":264},[240,158479,789],{"class":257},[240,158481,158307],{"class":443},[240,158483,158484],{"class":264},"{name}",[240,158486,158313],{"class":443},[240,158488,158489],{"class":264},"{age}",[240,158491,2355],{"class":443},[240,158493,158494],{"class":257},".format(",[240,158496,81724],{"class":792},[240,158498,440],{"class":288},[240,158500,158501],{"class":257},"name, ",[240,158503,72144],{"class":792},[240,158505,440],{"class":288},[240,158507,158508],{"class":257},"age))\n",[32,158510,158512],{"id":158511},"_2103-f-string","2.10.3 f-string",[19,158514,158515],{},"推荐写法：",[231,158517,158519],{"className":32324,"code":158518,"language":32326,"meta":236,"style":236},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[23,158520,158521,158529,158537,158545,158549],{"__ignoreMap":236},[240,158522,158523,158525,158527],{"class":242,"line":243},[240,158524,148161],{"class":257},[240,158526,440],{"class":288},[240,158528,150978],{"class":443},[240,158530,158531,158533,158535],{"class":242,"line":250},[240,158532,148171],{"class":257},[240,158534,440],{"class":288},[240,158536,148176],{"class":264},[240,158538,158539,158541,158543],{"class":242,"line":261},[240,158540,156983],{"class":257},[240,158542,440],{"class":288},[240,158544,158294],{"class":264},[240,158546,158547],{"class":242,"line":277},[240,158548,4353],{"emptyLinePlaceholder":2051},[240,158550,158551,158553,158555,158557,158559,158561,158563,158565,158567,158569,158571,158573,158575,158577,158580,158583,158585,158587],{"class":242,"line":294},[240,158552,32361],{"class":264},[240,158554,789],{"class":257},[240,158556,2172],{"class":288},[240,158558,158307],{"class":443},[240,158560,2991],{"class":264},[240,158562,81724],{"class":257},[240,158564,3040],{"class":264},[240,158566,158313],{"class":443},[240,158568,2991],{"class":264},[240,158570,72144],{"class":257},[240,158572,3040],{"class":264},[240,158574,158319],{"class":443},[240,158576,2991],{"class":264},[240,158578,158579],{"class":257},"score",[240,158581,158582],{"class":288},":.1f",[240,158584,3040],{"class":264},[240,158586,2355],{"class":443},[240,158588,2129],{"class":257},[19,158590,158591],{},"表达式也可以放进去：",[231,158593,158595],{"className":32324,"code":158594,"language":32326,"meta":236,"style":236},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[23,158596,158597,158605,158613],{"__ignoreMap":236},[240,158598,158599,158601,158603],{"class":242,"line":243},[240,158600,148306],{"class":257},[240,158602,440],{"class":288},[240,158604,148311],{"class":264},[240,158606,158607,158609,158611],{"class":242,"line":250},[240,158608,148316],{"class":257},[240,158610,440],{"class":288},[240,158612,56362],{"class":264},[240,158614,158615,158617,158619,158621,158624,158626,158628,158630,158633,158635,158638],{"class":242,"line":261},[240,158616,32361],{"class":264},[240,158618,789],{"class":257},[240,158620,2172],{"class":288},[240,158622,158623],{"class":443},"\"总价:",[240,158625,2991],{"class":264},[240,158627,148306],{"class":257},[240,158629,2554],{"class":288},[240,158631,158632],{"class":257}," count",[240,158634,3040],{"class":264},[240,158636,158637],{"class":443},"元\"",[240,158639,2129],{"class":257},[14,158641,158643],{"id":158642},"_211-input输入","2.11 input输入",[19,158645,158646,158649],{},[23,158647,158648],{},"input()"," 会暂停程序，等待用户输入。",[231,158651,158653],{"className":32324,"code":158652,"language":32326,"meta":236,"style":236},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[23,158654,158655,158669],{"__ignoreMap":236},[240,158656,158657,158659,158661,158663,158665,158667],{"class":242,"line":243},[240,158658,148161],{"class":257},[240,158660,440],{"class":288},[240,158662,62536],{"class":264},[240,158664,789],{"class":257},[240,158666,154004],{"class":443},[240,158668,2129],{"class":257},[240,158670,158671,158673,158675,158677,158680,158682,158684,158686,158688],{"class":242,"line":250},[240,158672,32361],{"class":264},[240,158674,789],{"class":257},[240,158676,2172],{"class":288},[240,158678,158679],{"class":443},"\"你好，",[240,158681,2991],{"class":264},[240,158683,81724],{"class":257},[240,158685,3040],{"class":264},[240,158687,2355],{"class":443},[240,158689,2129],{"class":257},[19,158691,158692],{},"输入整数：",[231,158694,158696],{"className":32324,"code":158695,"language":32326,"meta":236,"style":236},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[23,158697,158698,158716],{"__ignoreMap":236},[240,158699,158700,158702,158704,158706,158708,158710,158712,158714],{"class":242,"line":243},[240,158701,148171],{"class":257},[240,158703,440],{"class":288},[240,158705,4335],{"class":264},[240,158707,789],{"class":257},[240,158709,55756],{"class":264},[240,158711,789],{"class":257},[240,158713,154019],{"class":443},[240,158715,32443],{"class":257},[240,158717,158718,158720,158722,158724,158727,158729,158731,158733,158736,158738],{"class":242,"line":250},[240,158719,32361],{"class":264},[240,158721,789],{"class":257},[240,158723,2172],{"class":288},[240,158725,158726],{"class":443},"\"明年你",[240,158728,2991],{"class":264},[240,158730,148171],{"class":257},[240,158732,2580],{"class":288},[240,158734,158735],{"class":264}," 1}",[240,158737,151029],{"class":443},[240,158739,2129],{"class":257},[19,158741,158742],{},"输入小数：",[231,158744,158746],{"className":32324,"code":158745,"language":32326,"meta":236,"style":236},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[23,158747,158748,158767],{"__ignoreMap":236},[240,158749,158750,158752,158754,158756,158758,158760,158762,158765],{"class":242,"line":243},[240,158751,156956],{"class":257},[240,158753,440],{"class":288},[240,158755,111707],{"class":264},[240,158757,789],{"class":257},[240,158759,55756],{"class":264},[240,158761,789],{"class":257},[240,158763,158764],{"class":443},"\"请输入身高:\"",[240,158766,32443],{"class":257},[240,158768,158769,158771,158773,158775,158778,158780,158782,158785,158787,158790],{"class":242,"line":250},[240,158770,32361],{"class":264},[240,158772,789],{"class":257},[240,158774,2172],{"class":288},[240,158776,158777],{"class":443},"\"身高:",[240,158779,2991],{"class":264},[240,158781,26928],{"class":257},[240,158783,158784],{"class":288},":.2f",[240,158786,3040],{"class":264},[240,158788,158789],{"class":443},"米\"",[240,158791,2129],{"class":257},[14,158793,158795],{"id":158794},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[19,158797,125202],{},[1826,158799,158800,158803,158806,158809],{},[1829,158801,158802],{},"输入商品单价。",[1829,158804,158805],{},"输入购买数量。",[1829,158807,158808],{},"输入折扣，例如 0.8 表示八折。",[1829,158810,158811],{},"输出最终金额，保留两位小数。",[19,158813,11986],{},[231,158815,158817],{"className":32324,"code":158816,"language":32326,"meta":236,"style":236},"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",[23,158818,158819,158838,158857,158877,158881,158901,158905,158928,158949,158971],{"__ignoreMap":236},[240,158820,158821,158823,158825,158827,158829,158831,158833,158836],{"class":242,"line":243},[240,158822,148306],{"class":257},[240,158824,440],{"class":288},[240,158826,111707],{"class":264},[240,158828,789],{"class":257},[240,158830,55756],{"class":264},[240,158832,789],{"class":257},[240,158834,158835],{"class":443},"\"请输入商品单价:\"",[240,158837,32443],{"class":257},[240,158839,158840,158842,158844,158846,158848,158850,158852,158855],{"class":242,"line":250},[240,158841,148316],{"class":257},[240,158843,440],{"class":288},[240,158845,4335],{"class":264},[240,158847,789],{"class":257},[240,158849,55756],{"class":264},[240,158851,789],{"class":257},[240,158853,158854],{"class":443},"\"请输入购买数量:\"",[240,158856,32443],{"class":257},[240,158858,158859,158862,158864,158866,158868,158870,158872,158875],{"class":242,"line":261},[240,158860,158861],{"class":257},"discount ",[240,158863,440],{"class":288},[240,158865,111707],{"class":264},[240,158867,789],{"class":257},[240,158869,55756],{"class":264},[240,158871,789],{"class":257},[240,158873,158874],{"class":443},"\"请输入折扣:\"",[240,158876,32443],{"class":257},[240,158878,158879],{"class":242,"line":277},[240,158880,4353],{"emptyLinePlaceholder":2051},[240,158882,158883,158886,158888,158891,158893,158896,158898],{"class":242,"line":294},[240,158884,158885],{"class":257},"total ",[240,158887,440],{"class":288},[240,158889,158890],{"class":257}," price ",[240,158892,2554],{"class":288},[240,158894,158895],{"class":257}," count ",[240,158897,2554],{"class":288},[240,158899,158900],{"class":257}," discount\n",[240,158902,158903],{"class":242,"line":309},[240,158904,4353],{"emptyLinePlaceholder":2051},[240,158906,158907,158909,158911,158913,158916,158918,158920,158922,158924,158926],{"class":242,"line":529},[240,158908,32361],{"class":264},[240,158910,789],{"class":257},[240,158912,2172],{"class":288},[240,158914,158915],{"class":443},"\"商品单价:",[240,158917,2991],{"class":264},[240,158919,81729],{"class":257},[240,158921,158784],{"class":288},[240,158923,3040],{"class":264},[240,158925,2355],{"class":443},[240,158927,2129],{"class":257},[240,158929,158930,158932,158934,158936,158939,158941,158943,158945,158947],{"class":242,"line":549},[240,158931,32361],{"class":264},[240,158933,789],{"class":257},[240,158935,2172],{"class":288},[240,158937,158938],{"class":443},"\"购买数量:",[240,158940,2991],{"class":264},[240,158942,86348],{"class":257},[240,158944,3040],{"class":264},[240,158946,2355],{"class":443},[240,158948,2129],{"class":257},[240,158950,158951,158953,158955,158957,158960,158962,158965,158967,158969],{"class":242,"line":569},[240,158952,32361],{"class":264},[240,158954,789],{"class":257},[240,158956,2172],{"class":288},[240,158958,158959],{"class":443},"\"折扣:",[240,158961,2991],{"class":264},[240,158963,158964],{"class":257},"discount",[240,158966,3040],{"class":264},[240,158968,2355],{"class":443},[240,158970,2129],{"class":257},[240,158972,158973,158975,158977,158979,158982,158984,158987,158989,158991,158993],{"class":242,"line":589},[240,158974,32361],{"class":264},[240,158976,789],{"class":257},[240,158978,2172],{"class":288},[240,158980,158981],{"class":443},"\"应付金额:",[240,158983,2991],{"class":264},[240,158985,158986],{"class":257},"total",[240,158988,158784],{"class":288},[240,158990,3040],{"class":264},[240,158992,158637],{"class":443},[240,158994,2129],{"class":257},[14,158996,158998],{"id":158997},"_213-易错点","2.13 易错点",[1826,159000,159001,159006,159012,159020,159023],{},[1829,159002,159003,159005],{},[23,159004,158648],{}," 的结果是字符串，做运算前要转换。",[1829,159007,159008,159009,30331],{},"字符串拼接时，数字要先 ",[23,159010,159011],{},"str()",[1829,159013,159014,159016,159017,159019],{},[23,159015,440],{}," 是赋值，",[23,159018,4901],{}," 是比较。",[1829,159021,159022],{},"Python 没有自增自减运算符。",[1829,159024,159025],{},"浮点数计算可能有精度误差：",[231,159027,159029],{"className":32324,"code":159028,"language":32326,"meta":236,"style":236},"print(0.1 + 0.2)\n",[23,159030,159031],{"__ignoreMap":236},[240,159032,159033,159035,159037,159039,159041,159044],{"class":242,"line":243},[240,159034,32361],{"class":264},[240,159036,789],{"class":257},[240,159038,88124],{"class":264},[240,159040,47512],{"class":288},[240,159042,159043],{"class":264}," 0.2",[240,159045,2129],{"class":257},[19,159047,159048,159049,159052],{},"金额计算如果要求严格，可以后续学习 ",[23,159050,159051],{},"decimal"," 模块。",[14,159054,159056],{"id":159055},"_214-本章练习","2.14 本章练习",[1826,159058,159059,159062,159065,159068,159071],{},[1829,159060,159061],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[1829,159063,159064],{},"输入圆的半径，计算面积，保留两位小数。",[1829,159066,159067],{},"输入工资和奖金，计算总收入。",[1829,159069,159070],{},"输入摄氏温度，转换为华氏温度。",[1829,159072,159073],{},"写一个 BMI 计算程序：",[231,159075,159078],{"className":159076,"code":159077,"language":7139,"meta":236},[7137],"BMI = 体重kg \u002F 身高m ** 2\n",[23,159079,159077],{"__ignoreMap":236},[2019,159081,159082],{},"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":236,"searchDepth":250,"depth":250,"links":159084},[159085,159086,159087,159088,159089,159090,159091,159097,159098,159099,159104,159105,159106,159107],{"id":156646,"depth":250,"text":156647},{"id":156755,"depth":250,"text":156756},{"id":156926,"depth":250,"text":156927},{"id":157003,"depth":250,"text":157004},{"id":52677,"depth":250,"text":52678},{"id":157309,"depth":250,"text":157310},{"id":157535,"depth":250,"text":157536,"children":159092},[159093,159094,159095,159096],{"id":157539,"depth":261,"text":157540},{"id":157733,"depth":261,"text":157734},{"id":157821,"depth":261,"text":157822},{"id":157927,"depth":261,"text":157928},{"id":158036,"depth":250,"text":158037},{"id":158194,"depth":250,"text":158195},{"id":158259,"depth":250,"text":158260,"children":159100},[159101,159102,159103],{"id":158263,"depth":261,"text":158264},{"id":158408,"depth":261,"text":158409},{"id":158511,"depth":261,"text":158512},{"id":158642,"depth":250,"text":158643},{"id":158794,"depth":250,"text":158795},{"id":158997,"depth":250,"text":158998},{"id":159055,"depth":250,"text":159056},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":156638,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":159114,"title":159115,"body":159116,"description":2048,"extension":2049,"meta":160752,"navigation":2051,"path":160753,"seo":160754,"stem":160755,"__hash__":160756},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":159117,"toc":160733},[159118,159121,159125,159128,159143,159146,159174,159178,159228,159230,159246,159249,159275,159278,159282,159349,159352,159368,159372,159375,159493,159496,159503,159552,159558,159562,159565,159678,159681,159685,159689,159692,159742,159746,159749,159799,159803,159806,159844,159848,159851,159897,159900,159935,159939,159944,159947,159993,159995,160062,160066,160072,160183,160192,160196,160198,160209,160211,160377,160381,160383,160397,160399,160613,160617,160636,160653,160656,160702,160706,160730],[10,159119,159115],{"id":159120},"_3-判断语句",[14,159122,159124],{"id":159123},"_31-布尔值","3.1 布尔值",[19,159126,159127],{},"判断语句依赖布尔值：",[231,159129,159131],{"className":32324,"code":159130,"language":32326,"meta":236,"style":236},"True\nFalse\n",[23,159132,159133,159138],{"__ignoreMap":236},[240,159134,159135],{"class":242,"line":243},[240,159136,159137],{"class":264},"True\n",[240,159139,159140],{"class":242,"line":250},[240,159141,159142],{"class":264},"False\n",[19,159144,159145],{},"比较表达式会产生布尔值：",[231,159147,159149],{"className":32324,"code":159148,"language":32326,"meta":236,"style":236},"age = 18\nprint(age >= 18)  # True\n",[23,159150,159151,159159],{"__ignoreMap":236},[240,159152,159153,159155,159157],{"class":242,"line":243},[240,159154,148171],{"class":257},[240,159156,440],{"class":288},[240,159158,148176],{"class":264},[240,159160,159161,159163,159165,159167,159169,159171],{"class":242,"line":250},[240,159162,32361],{"class":264},[240,159164,157393],{"class":257},[240,159166,3664],{"class":288},[240,159168,157910],{"class":264},[240,159170,47754],{"class":257},[240,159172,159173],{"class":246},"# True\n",[14,159175,159177],{"id":159176},"_32-if基础语法","3.2 if基础语法",[231,159179,159181],{"className":32324,"code":159180,"language":32326,"meta":236,"style":236},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[23,159182,159183,159201,159205,159217],{"__ignoreMap":236},[240,159184,159185,159187,159189,159191,159193,159195,159197,159199],{"class":242,"line":243},[240,159186,148171],{"class":257},[240,159188,440],{"class":288},[240,159190,4335],{"class":264},[240,159192,789],{"class":257},[240,159194,55756],{"class":264},[240,159196,789],{"class":257},[240,159198,154019],{"class":443},[240,159200,32443],{"class":257},[240,159202,159203],{"class":242,"line":250},[240,159204,4353],{"emptyLinePlaceholder":2051},[240,159206,159207,159209,159211,159213,159215],{"class":242,"line":261},[240,159208,3489],{"class":288},[240,159210,17655],{"class":257},[240,159212,3664],{"class":288},[240,159214,157910],{"class":264},[240,159216,5691],{"class":257},[240,159218,159219,159221,159223,159226],{"class":242,"line":277},[240,159220,33245],{"class":264},[240,159222,789],{"class":257},[240,159224,159225],{"class":443},"\"可以进入网吧\"",[240,159227,2129],{"class":257},[19,159229,10976],{},[1826,159231,159232,159237,159240,159243],{},[1829,159233,159234,159236],{},[23,159235,3489],{}," 后面是条件表达式。",[1829,159238,159239],{},"条件后面必须写冒号。",[1829,159241,159242],{},"条件成立时执行缩进代码块。",[1829,159244,159245],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[19,159247,159248],{},"错误示例：",[231,159250,159252],{"className":32324,"code":159251,"language":32326,"meta":236,"style":236},"if age >= 18\n    print(\"可以进入\")\n",[23,159253,159254,159264],{"__ignoreMap":236},[240,159255,159256,159258,159260,159262],{"class":242,"line":243},[240,159257,3489],{"class":288},[240,159259,17655],{"class":257},[240,159261,3664],{"class":288},[240,159263,148176],{"class":264},[240,159265,159266,159268,159270,159273],{"class":242,"line":250},[240,159267,33245],{"class":264},[240,159269,789],{"class":257},[240,159271,159272],{"class":443},"\"可以进入\"",[240,159274,2129],{"class":257},[19,159276,159277],{},"缺少冒号。",[14,159279,159281],{"id":159280},"_33-if-else","3.3 if else",[231,159283,159285],{"className":32324,"code":159284,"language":32326,"meta":236,"style":236},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[23,159286,159287,159305,159309,159321,159332,159338],{"__ignoreMap":236},[240,159288,159289,159291,159293,159295,159297,159299,159301,159303],{"class":242,"line":243},[240,159290,148171],{"class":257},[240,159292,440],{"class":288},[240,159294,4335],{"class":264},[240,159296,789],{"class":257},[240,159298,55756],{"class":264},[240,159300,789],{"class":257},[240,159302,154019],{"class":443},[240,159304,32443],{"class":257},[240,159306,159307],{"class":242,"line":250},[240,159308,4353],{"emptyLinePlaceholder":2051},[240,159310,159311,159313,159315,159317,159319],{"class":242,"line":261},[240,159312,3489],{"class":288},[240,159314,17655],{"class":257},[240,159316,3664],{"class":288},[240,159318,157910],{"class":264},[240,159320,5691],{"class":257},[240,159322,159323,159325,159327,159330],{"class":242,"line":277},[240,159324,33245],{"class":264},[240,159326,789],{"class":257},[240,159328,159329],{"class":443},"\"成年人\"",[240,159331,2129],{"class":257},[240,159333,159334,159336],{"class":242,"line":294},[240,159335,3655],{"class":288},[240,159337,5691],{"class":257},[240,159339,159340,159342,159344,159347],{"class":242,"line":309},[240,159341,33245],{"class":264},[240,159343,789],{"class":257},[240,159345,159346],{"class":443},"\"未成年人\"",[240,159348,2129],{"class":257},[19,159350,159351],{},"执行逻辑：",[1826,159353,159354,159360,159365],{},[1829,159355,159356,159357,159359],{},"条件成立，执行 ",[23,159358,3489],{}," 代码块。",[1829,159361,159362,159363,159359],{},"条件不成立，执行 ",[23,159364,3655],{},[1829,159366,159367],{},"两个代码块只会执行其中一个。",[14,159369,159371],{"id":159370},"_34-if-elif-else","3.4 if elif else",[19,159373,159374],{},"多条件判断：",[231,159376,159378],{"className":32324,"code":159377,"language":32326,"meta":236,"style":236},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[23,159379,159380,159398,159402,159416,159427,159441,159452,159465,159476,159482],{"__ignoreMap":236},[240,159381,159382,159384,159386,159388,159390,159392,159394,159396],{"class":242,"line":243},[240,159383,156983],{"class":257},[240,159385,440],{"class":288},[240,159387,4335],{"class":264},[240,159389,789],{"class":257},[240,159391,55756],{"class":264},[240,159393,789],{"class":257},[240,159395,154034],{"class":443},[240,159397,32443],{"class":257},[240,159399,159400],{"class":242,"line":250},[240,159401,4353],{"emptyLinePlaceholder":2051},[240,159403,159404,159406,159409,159411,159414],{"class":242,"line":261},[240,159405,3489],{"class":288},[240,159407,159408],{"class":257}," score ",[240,159410,3664],{"class":288},[240,159412,159413],{"class":264}," 90",[240,159415,5691],{"class":257},[240,159417,159418,159420,159422,159425],{"class":242,"line":277},[240,159419,33245],{"class":264},[240,159421,789],{"class":257},[240,159423,159424],{"class":443},"\"优秀\"",[240,159426,2129],{"class":257},[240,159428,159429,159432,159434,159436,159439],{"class":242,"line":294},[240,159430,159431],{"class":288},"elif",[240,159433,159408],{"class":257},[240,159435,3664],{"class":288},[240,159437,159438],{"class":264}," 80",[240,159440,5691],{"class":257},[240,159442,159443,159445,159447,159450],{"class":242,"line":309},[240,159444,33245],{"class":264},[240,159446,789],{"class":257},[240,159448,159449],{"class":443},"\"良好\"",[240,159451,2129],{"class":257},[240,159453,159454,159456,159458,159460,159463],{"class":242,"line":529},[240,159455,159431],{"class":288},[240,159457,159408],{"class":257},[240,159459,3664],{"class":288},[240,159461,159462],{"class":264}," 60",[240,159464,5691],{"class":257},[240,159466,159467,159469,159471,159474],{"class":242,"line":549},[240,159468,33245],{"class":264},[240,159470,789],{"class":257},[240,159472,159473],{"class":443},"\"及格\"",[240,159475,2129],{"class":257},[240,159477,159478,159480],{"class":242,"line":569},[240,159479,3655],{"class":288},[240,159481,5691],{"class":257},[240,159483,159484,159486,159488,159491],{"class":242,"line":589},[240,159485,33245],{"class":264},[240,159487,789],{"class":257},[240,159489,159490],{"class":443},"\"不及格\"",[240,159492,2129],{"class":257},[19,159494,159495],{},"注意判断顺序很重要。",[19,159497,159498,159499,159502],{},"如果把 ",[23,159500,159501],{},"score >= 60"," 放在最前面：",[231,159504,159506],{"className":32324,"code":159505,"language":32326,"meta":236,"style":236},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[23,159507,159508,159520,159530,159542],{"__ignoreMap":236},[240,159509,159510,159512,159514,159516,159518],{"class":242,"line":243},[240,159511,3489],{"class":288},[240,159513,159408],{"class":257},[240,159515,3664],{"class":288},[240,159517,159462],{"class":264},[240,159519,5691],{"class":257},[240,159521,159522,159524,159526,159528],{"class":242,"line":250},[240,159523,33245],{"class":264},[240,159525,789],{"class":257},[240,159527,159473],{"class":443},[240,159529,2129],{"class":257},[240,159531,159532,159534,159536,159538,159540],{"class":242,"line":261},[240,159533,159431],{"class":288},[240,159535,159408],{"class":257},[240,159537,3664],{"class":288},[240,159539,159413],{"class":264},[240,159541,5691],{"class":257},[240,159543,159544,159546,159548,159550],{"class":242,"line":277},[240,159545,33245],{"class":264},[240,159547,789],{"class":257},[240,159549,159424],{"class":443},[240,159551,2129],{"class":257},[19,159553,159554,159555,159557],{},"成绩 95 会先满足 ",[23,159556,159501],{},"，后面的优秀分支就不会执行。",[14,159559,159561],{"id":159560},"_35-判断语句嵌套","3.5 判断语句嵌套",[19,159563,159564],{},"嵌套判断就是在一个判断内部再写判断。",[231,159566,159568],{"className":32324,"code":159567,"language":32326,"meta":236,"style":236},"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",[23,159569,159570,159588,159603,159607,159619,159633,159643,159650,159661,159667],{"__ignoreMap":236},[240,159571,159572,159574,159576,159578,159580,159582,159584,159586],{"class":242,"line":243},[240,159573,148171],{"class":257},[240,159575,440],{"class":288},[240,159577,4335],{"class":264},[240,159579,789],{"class":257},[240,159581,55756],{"class":264},[240,159583,789],{"class":257},[240,159585,154019],{"class":443},[240,159587,32443],{"class":257},[240,159589,159590,159592,159594,159596,159598,159601],{"class":242,"line":250},[240,159591,157986],{"class":257},[240,159593,440],{"class":288},[240,159595,62536],{"class":264},[240,159597,789],{"class":257},[240,159599,159600],{"class":443},"\"是否有票(y\u002Fn):\"",[240,159602,2129],{"class":257},[240,159604,159605],{"class":242,"line":261},[240,159606,4353],{"emptyLinePlaceholder":2051},[240,159608,159609,159611,159613,159615,159617],{"class":242,"line":277},[240,159610,3489],{"class":288},[240,159612,17655],{"class":257},[240,159614,3664],{"class":288},[240,159616,157910],{"class":264},[240,159618,5691],{"class":257},[240,159620,159621,159623,159626,159628,159631],{"class":242,"line":294},[240,159622,5053],{"class":288},[240,159624,159625],{"class":257}," has_ticket ",[240,159627,4901],{"class":288},[240,159629,159630],{"class":443}," \"y\"",[240,159632,5691],{"class":257},[240,159634,159635,159637,159639,159641],{"class":242,"line":309},[240,159636,34397],{"class":264},[240,159638,789],{"class":257},[240,159640,159272],{"class":443},[240,159642,2129],{"class":257},[240,159644,159645,159648],{"class":242,"line":529},[240,159646,159647],{"class":288},"    else",[240,159649,5691],{"class":257},[240,159651,159652,159654,159656,159659],{"class":242,"line":549},[240,159653,34397],{"class":264},[240,159655,789],{"class":257},[240,159657,159658],{"class":443},"\"请先买票\"",[240,159660,2129],{"class":257},[240,159662,159663,159665],{"class":242,"line":569},[240,159664,3655],{"class":288},[240,159666,5691],{"class":257},[240,159668,159669,159671,159673,159676],{"class":242,"line":589},[240,159670,33245],{"class":264},[240,159672,789],{"class":257},[240,159674,159675],{"class":443},"\"未成年人禁止进入\"",[240,159677,2129],{"class":257},[19,159679,159680],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[14,159682,159684],{"id":159683},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[32,159686,159688],{"id":159687},"_361-and","3.6.1 and",[19,159690,159691],{},"两个条件都成立才成立。",[231,159693,159695],{"className":32324,"code":159694,"language":32326,"meta":236,"style":236},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[23,159696,159697,159705,159713,159717,159732],{"__ignoreMap":236},[240,159698,159699,159701,159703],{"class":242,"line":243},[240,159700,148171],{"class":257},[240,159702,440],{"class":288},[240,159704,89978],{"class":264},[240,159706,159707,159709,159711],{"class":242,"line":250},[240,159708,157986],{"class":257},[240,159710,440],{"class":288},[240,159712,155224],{"class":264},[240,159714,159715],{"class":242,"line":261},[240,159716,4353],{"emptyLinePlaceholder":2051},[240,159718,159719,159721,159723,159725,159727,159729],{"class":242,"line":277},[240,159720,3489],{"class":288},[240,159722,17655],{"class":257},[240,159724,3664],{"class":288},[240,159726,157910],{"class":264},[240,159728,122339],{"class":288},[240,159730,159731],{"class":257}," has_ticket:\n",[240,159733,159734,159736,159738,159740],{"class":242,"line":294},[240,159735,33245],{"class":264},[240,159737,789],{"class":257},[240,159739,159272],{"class":443},[240,159741,2129],{"class":257},[32,159743,159745],{"id":159744},"_362-or","3.6.2 or",[19,159747,159748],{},"只要一个条件成立就成立。",[231,159750,159752],{"className":32324,"code":159751,"language":32326,"meta":236,"style":236},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[23,159753,159754,159763,159772,159776,159788],{"__ignoreMap":236},[240,159755,159756,159759,159761],{"class":242,"line":243},[240,159757,159758],{"class":257},"is_vip ",[240,159760,440],{"class":288},[240,159762,127717],{"class":264},[240,159764,159765,159768,159770],{"class":242,"line":250},[240,159766,159767],{"class":257},"coupon ",[240,159769,440],{"class":288},[240,159771,155224],{"class":264},[240,159773,159774],{"class":242,"line":261},[240,159775,4353],{"emptyLinePlaceholder":2051},[240,159777,159778,159780,159783,159785],{"class":242,"line":277},[240,159779,3489],{"class":288},[240,159781,159782],{"class":257}," is_vip ",[240,159784,117000],{"class":288},[240,159786,159787],{"class":257}," coupon:\n",[240,159789,159790,159792,159794,159797],{"class":242,"line":294},[240,159791,33245],{"class":264},[240,159793,789],{"class":257},[240,159795,159796],{"class":443},"\"可以享受优惠\"",[240,159798,2129],{"class":257},[32,159800,159802],{"id":159801},"_363-not","3.6.3 not",[19,159804,159805],{},"取反。",[231,159807,159809],{"className":32324,"code":159808,"language":32326,"meta":236,"style":236},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[23,159810,159811,159820,159824,159833],{"__ignoreMap":236},[240,159812,159813,159816,159818],{"class":242,"line":243},[240,159814,159815],{"class":257},"is_closed ",[240,159817,440],{"class":288},[240,159819,127717],{"class":264},[240,159821,159822],{"class":242,"line":250},[240,159823,4353],{"emptyLinePlaceholder":2051},[240,159825,159826,159828,159830],{"class":242,"line":261},[240,159827,3489],{"class":288},[240,159829,40876],{"class":288},[240,159831,159832],{"class":257}," is_closed:\n",[240,159834,159835,159837,159839,159842],{"class":242,"line":277},[240,159836,33245],{"class":264},[240,159838,789],{"class":257},[240,159840,159841],{"class":443},"\"店铺营业中\"",[240,159843,2129],{"class":257},[14,159845,159847],{"id":159846},"_37-链式比较","3.7 链式比较",[19,159849,159850],{},"Python 支持链式比较：",[231,159852,159854],{"className":32324,"code":159853,"language":32326,"meta":236,"style":236},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[23,159855,159856,159865,159869,159886],{"__ignoreMap":236},[240,159857,159858,159860,159862],{"class":242,"line":243},[240,159859,156983],{"class":257},[240,159861,440],{"class":288},[240,159863,159864],{"class":264}," 85\n",[240,159866,159867],{"class":242,"line":250},[240,159868,4353],{"emptyLinePlaceholder":2051},[240,159870,159871,159873,159875,159878,159880,159882,159884],{"class":242,"line":261},[240,159872,3489],{"class":288},[240,159874,6045],{"class":264},[240,159876,159877],{"class":288}," \u003C=",[240,159879,159408],{"class":257},[240,159881,3545],{"class":288},[240,159883,7705],{"class":264},[240,159885,5691],{"class":257},[240,159887,159888,159890,159892,159895],{"class":242,"line":277},[240,159889,33245],{"class":264},[240,159891,789],{"class":257},[240,159893,159894],{"class":443},"\"成绩合法\"",[240,159896,2129],{"class":257},[19,159898,159899],{},"等价于：",[231,159901,159903],{"className":32324,"code":159902,"language":32326,"meta":236,"style":236},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[23,159904,159905,159925],{"__ignoreMap":236},[240,159906,159907,159909,159911,159913,159915,159917,159919,159921,159923],{"class":242,"line":243},[240,159908,3489],{"class":288},[240,159910,159408],{"class":257},[240,159912,3664],{"class":288},[240,159914,6045],{"class":264},[240,159916,122339],{"class":288},[240,159918,159408],{"class":257},[240,159920,3545],{"class":288},[240,159922,7705],{"class":264},[240,159924,5691],{"class":257},[240,159926,159927,159929,159931,159933],{"class":242,"line":250},[240,159928,33245],{"class":264},[240,159930,789],{"class":257},[240,159932,159894],{"class":443},[240,159934,2129],{"class":257},[14,159936,159938],{"id":159937},"_38-真值和假值","3.8 真值和假值",[19,159940,118377,159941,159943],{},[23,159942,3489],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[19,159945,159946],{},"假值：",[231,159948,159950],{"className":32324,"code":159949,"language":32326,"meta":236,"style":236},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[23,159951,159952,159956,159961,159965,159969,159974,159978,159982,159987],{"__ignoreMap":236},[240,159953,159954],{"class":242,"line":243},[240,159955,159142],{"class":264},[240,159957,159958],{"class":242,"line":250},[240,159959,159960],{"class":264},"None\n",[240,159962,159963],{"class":242,"line":261},[240,159964,5037],{"class":264},[240,159966,159967],{"class":242,"line":277},[240,159968,34288],{"class":264},[240,159970,159971],{"class":242,"line":294},[240,159972,159973],{"class":443},"\"\"\n",[240,159975,159976],{"class":242,"line":309},[240,159977,34303],{"class":257},[240,159979,159980],{"class":242,"line":529},[240,159981,3929],{"class":257},[240,159983,159984],{"class":242,"line":549},[240,159985,159986],{"class":257},"{}\n",[240,159988,159989,159991],{"class":242,"line":569},[240,159990,156915],{"class":264},[240,159992,3929],{"class":257},[19,159994,17084],{},[231,159996,159998],{"className":32324,"code":159997,"language":32326,"meta":236,"style":236},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[23,159999,160000,160014,160018,160025,160045,160051],{"__ignoreMap":236},[240,160001,160002,160004,160006,160008,160010,160012],{"class":242,"line":243},[240,160003,148161],{"class":257},[240,160005,440],{"class":288},[240,160007,62536],{"class":264},[240,160009,789],{"class":257},[240,160011,154004],{"class":443},[240,160013,2129],{"class":257},[240,160015,160016],{"class":242,"line":250},[240,160017,4353],{"emptyLinePlaceholder":2051},[240,160019,160020,160022],{"class":242,"line":261},[240,160021,3489],{"class":288},[240,160023,160024],{"class":257}," name:\n",[240,160026,160027,160029,160031,160033,160035,160037,160039,160041,160043],{"class":242,"line":277},[240,160028,33245],{"class":264},[240,160030,789],{"class":257},[240,160032,2172],{"class":288},[240,160034,158679],{"class":443},[240,160036,2991],{"class":264},[240,160038,81724],{"class":257},[240,160040,3040],{"class":264},[240,160042,2355],{"class":443},[240,160044,2129],{"class":257},[240,160046,160047,160049],{"class":242,"line":294},[240,160048,3655],{"class":288},[240,160050,5691],{"class":257},[240,160052,160053,160055,160057,160060],{"class":242,"line":309},[240,160054,33245],{"class":264},[240,160056,789],{"class":257},[240,160058,160059],{"class":443},"\"姓名不能为空\"",[240,160061,2129],{"class":257},[14,160063,160065],{"id":160064},"_39-match语句","3.9 match语句",[19,160067,160068,160069,160071],{},"Python 3.10 开始支持 ",[23,160070,73181],{},"。它适合处理固定选项。",[231,160073,160075],{"className":32324,"code":160074,"language":32326,"meta":236,"style":236},"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",[23,160076,160077,160093,160097,160104,160114,160125,160134,160145,160154,160165,160172],{"__ignoreMap":236},[240,160078,160079,160082,160084,160086,160088,160091],{"class":242,"line":243},[240,160080,160081],{"class":257},"command ",[240,160083,440],{"class":288},[240,160085,62536],{"class":264},[240,160087,789],{"class":257},[240,160089,160090],{"class":443},"\"请输入命令:\"",[240,160092,2129],{"class":257},[240,160094,160095],{"class":242,"line":250},[240,160096,4353],{"emptyLinePlaceholder":2051},[240,160098,160099,160101],{"class":242,"line":261},[240,160100,73181],{"class":288},[240,160102,160103],{"class":257}," command:\n",[240,160105,160106,160109,160112],{"class":242,"line":277},[240,160107,160108],{"class":288},"    case",[240,160110,160111],{"class":443}," \"start\"",[240,160113,5691],{"class":257},[240,160115,160116,160118,160120,160123],{"class":242,"line":294},[240,160117,34397],{"class":264},[240,160119,789],{"class":257},[240,160121,160122],{"class":443},"\"启动\"",[240,160124,2129],{"class":257},[240,160126,160127,160129,160132],{"class":242,"line":309},[240,160128,160108],{"class":288},[240,160130,160131],{"class":443}," \"stop\"",[240,160133,5691],{"class":257},[240,160135,160136,160138,160140,160143],{"class":242,"line":529},[240,160137,34397],{"class":264},[240,160139,789],{"class":257},[240,160141,160142],{"class":443},"\"停止\"",[240,160144,2129],{"class":257},[240,160146,160147,160149,160152],{"class":242,"line":549},[240,160148,160108],{"class":288},[240,160150,160151],{"class":443}," \"restart\"",[240,160153,5691],{"class":257},[240,160155,160156,160158,160160,160163],{"class":242,"line":569},[240,160157,34397],{"class":264},[240,160159,789],{"class":257},[240,160161,160162],{"class":443},"\"重启\"",[240,160164,2129],{"class":257},[240,160166,160167,160169],{"class":242,"line":589},[240,160168,160108],{"class":288},[240,160170,160171],{"class":257}," _:\n",[240,160173,160174,160176,160178,160181],{"class":242,"line":715},[240,160175,34397],{"class":264},[240,160177,789],{"class":257},[240,160179,160180],{"class":443},"\"未知命令\"",[240,160182,2129],{"class":257},[19,160184,160185,160186,160188,160189,160191],{},"入门阶段掌握 ",[23,160187,156283],{}," 更重要，",[23,160190,73181],{}," 可以作为补充。",[14,160193,160195],{"id":160194},"_310-小案例成绩等级","3.10 小案例：成绩等级",[19,160197,125202],{},[1826,160199,160200,160203,160206],{},[1829,160201,160202],{},"输入成绩。",[1829,160204,160205],{},"判断成绩是否合法。",[1829,160207,160208],{},"输出等级。",[19,160210,11986],{},[231,160212,160214],{"className":32324,"code":160213,"language":32326,"meta":236,"style":236},"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",[23,160215,160216,160234,160238,160256,160267,160279,160290,160302,160313,160326,160337,160349,160360,160366],{"__ignoreMap":236},[240,160217,160218,160220,160222,160224,160226,160228,160230,160232],{"class":242,"line":243},[240,160219,156983],{"class":257},[240,160221,440],{"class":288},[240,160223,111707],{"class":264},[240,160225,789],{"class":257},[240,160227,55756],{"class":264},[240,160229,789],{"class":257},[240,160231,154034],{"class":443},[240,160233,32443],{"class":257},[240,160235,160236],{"class":242,"line":250},[240,160237,4353],{"emptyLinePlaceholder":2051},[240,160239,160240,160242,160244,160246,160248,160250,160252,160254],{"class":242,"line":261},[240,160241,3489],{"class":288},[240,160243,40876],{"class":288},[240,160245,6045],{"class":264},[240,160247,159877],{"class":288},[240,160249,159408],{"class":257},[240,160251,3545],{"class":288},[240,160253,7705],{"class":264},[240,160255,5691],{"class":257},[240,160257,160258,160260,160262,160265],{"class":242,"line":277},[240,160259,33245],{"class":264},[240,160261,789],{"class":257},[240,160263,160264],{"class":443},"\"成绩不合法\"",[240,160266,2129],{"class":257},[240,160268,160269,160271,160273,160275,160277],{"class":242,"line":294},[240,160270,159431],{"class":288},[240,160272,159408],{"class":257},[240,160274,3664],{"class":288},[240,160276,159413],{"class":264},[240,160278,5691],{"class":257},[240,160280,160281,160283,160285,160288],{"class":242,"line":309},[240,160282,33245],{"class":264},[240,160284,789],{"class":257},[240,160286,160287],{"class":443},"\"等级:A\"",[240,160289,2129],{"class":257},[240,160291,160292,160294,160296,160298,160300],{"class":242,"line":529},[240,160293,159431],{"class":288},[240,160295,159408],{"class":257},[240,160297,3664],{"class":288},[240,160299,159438],{"class":264},[240,160301,5691],{"class":257},[240,160303,160304,160306,160308,160311],{"class":242,"line":549},[240,160305,33245],{"class":264},[240,160307,789],{"class":257},[240,160309,160310],{"class":443},"\"等级:B\"",[240,160312,2129],{"class":257},[240,160314,160315,160317,160319,160321,160324],{"class":242,"line":569},[240,160316,159431],{"class":288},[240,160318,159408],{"class":257},[240,160320,3664],{"class":288},[240,160322,160323],{"class":264}," 70",[240,160325,5691],{"class":257},[240,160327,160328,160330,160332,160335],{"class":242,"line":589},[240,160329,33245],{"class":264},[240,160331,789],{"class":257},[240,160333,160334],{"class":443},"\"等级:C\"",[240,160336,2129],{"class":257},[240,160338,160339,160341,160343,160345,160347],{"class":242,"line":715},[240,160340,159431],{"class":288},[240,160342,159408],{"class":257},[240,160344,3664],{"class":288},[240,160346,159462],{"class":264},[240,160348,5691],{"class":257},[240,160350,160351,160353,160355,160358],{"class":242,"line":727},[240,160352,33245],{"class":264},[240,160354,789],{"class":257},[240,160356,160357],{"class":443},"\"等级:D\"",[240,160359,2129],{"class":257},[240,160361,160362,160364],{"class":242,"line":1730},[240,160363,3655],{"class":288},[240,160365,5691],{"class":257},[240,160367,160368,160370,160372,160375],{"class":242,"line":3582},[240,160369,33245],{"class":264},[240,160371,789],{"class":257},[240,160373,160374],{"class":443},"\"等级:E\"",[240,160376,2129],{"class":257},[14,160378,160380],{"id":160379},"_311-小案例会员折扣","3.11 小案例：会员折扣",[19,160382,125202],{},[1826,160384,160385,160388,160391,160394],{},[1829,160386,160387],{},"输入消费金额。",[1829,160389,160390],{},"输入会员等级，普通、银卡、金卡。",[1829,160392,160393],{},"普通不打折，银卡 9 折，金卡 8 折。",[1829,160395,160396],{},"满 500 再减 50。",[19,160398,11986],{},[231,160400,160402],{"className":32324,"code":160401,"language":32326,"meta":236,"style":236},"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",[23,160403,160404,160424,160440,160444,160452,160456,160470,160480,160493,160502,160515,160523,160529,160540,160544,160558,160562,160576,160586,160590],{"__ignoreMap":236},[240,160405,160406,160409,160411,160413,160415,160417,160419,160422],{"class":242,"line":243},[240,160407,160408],{"class":257},"amount ",[240,160410,440],{"class":288},[240,160412,111707],{"class":264},[240,160414,789],{"class":257},[240,160416,55756],{"class":264},[240,160418,789],{"class":257},[240,160420,160421],{"class":443},"\"请输入消费金额:\"",[240,160423,32443],{"class":257},[240,160425,160426,160429,160431,160433,160435,160438],{"class":242,"line":250},[240,160427,160428],{"class":257},"level ",[240,160430,440],{"class":288},[240,160432,62536],{"class":264},[240,160434,789],{"class":257},[240,160436,160437],{"class":443},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[240,160439,2129],{"class":257},[240,160441,160442],{"class":242,"line":261},[240,160443,4353],{"emptyLinePlaceholder":2051},[240,160445,160446,160448,160450],{"class":242,"line":277},[240,160447,158861],{"class":257},[240,160449,440],{"class":288},[240,160451,57632],{"class":264},[240,160453,160454],{"class":242,"line":294},[240,160455,4353],{"emptyLinePlaceholder":2051},[240,160457,160458,160460,160463,160465,160468],{"class":242,"line":309},[240,160459,3489],{"class":288},[240,160461,160462],{"class":257}," level ",[240,160464,4901],{"class":288},[240,160466,160467],{"class":443}," \"银卡\"",[240,160469,5691],{"class":257},[240,160471,160472,160475,160477],{"class":242,"line":529},[240,160473,160474],{"class":257},"    discount ",[240,160476,440],{"class":288},[240,160478,160479],{"class":264}," 0.9\n",[240,160481,160482,160484,160486,160488,160491],{"class":242,"line":549},[240,160483,159431],{"class":288},[240,160485,160462],{"class":257},[240,160487,4901],{"class":288},[240,160489,160490],{"class":443}," \"金卡\"",[240,160492,5691],{"class":257},[240,160494,160495,160497,160499],{"class":242,"line":569},[240,160496,160474],{"class":257},[240,160498,440],{"class":288},[240,160500,160501],{"class":264}," 0.8\n",[240,160503,160504,160506,160508,160510,160513],{"class":242,"line":589},[240,160505,159431],{"class":288},[240,160507,160462],{"class":257},[240,160509,4901],{"class":288},[240,160511,160512],{"class":443}," \"普通\"",[240,160514,5691],{"class":257},[240,160516,160517,160519,160521],{"class":242,"line":715},[240,160518,160474],{"class":257},[240,160520,440],{"class":288},[240,160522,57632],{"class":264},[240,160524,160525,160527],{"class":242,"line":727},[240,160526,3655],{"class":288},[240,160528,5691],{"class":257},[240,160530,160531,160533,160535,160538],{"class":242,"line":1730},[240,160532,33245],{"class":264},[240,160534,789],{"class":257},[240,160536,160537],{"class":443},"\"会员等级输入错误，按普通会员计算\"",[240,160539,2129],{"class":257},[240,160541,160542],{"class":242,"line":3582},[240,160543,4353],{"emptyLinePlaceholder":2051},[240,160545,160546,160549,160551,160554,160556],{"class":242,"line":3596},[240,160547,160548],{"class":257},"pay ",[240,160550,440],{"class":288},[240,160552,160553],{"class":257}," amount ",[240,160555,2554],{"class":288},[240,160557,158900],{"class":257},[240,160559,160560],{"class":242,"line":3601},[240,160561,4353],{"emptyLinePlaceholder":2051},[240,160563,160564,160566,160569,160571,160574],{"class":242,"line":3607},[240,160565,3489],{"class":288},[240,160567,160568],{"class":257}," pay ",[240,160570,3664],{"class":288},[240,160572,160573],{"class":264}," 500",[240,160575,5691],{"class":257},[240,160577,160578,160581,160583],{"class":242,"line":3628},[240,160579,160580],{"class":257},"    pay ",[240,160582,151877],{"class":288},[240,160584,160585],{"class":264}," 50\n",[240,160587,160588],{"class":242,"line":3633},[240,160589,4353],{"emptyLinePlaceholder":2051},[240,160591,160592,160594,160596,160598,160600,160602,160605,160607,160609,160611],{"class":242,"line":3647},[240,160593,32361],{"class":264},[240,160595,789],{"class":257},[240,160597,2172],{"class":288},[240,160599,158981],{"class":443},[240,160601,2991],{"class":264},[240,160603,160604],{"class":257},"pay",[240,160606,158784],{"class":288},[240,160608,3040],{"class":264},[240,160610,158637],{"class":443},[240,160612,2129],{"class":257},[14,160614,160616],{"id":160615},"_312-易错点","3.12 易错点",[1826,160618,160619,160622,160625,160628,160633],{},[1829,160620,160621],{},"冒号不能漏。",[1829,160623,160624],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[1829,160626,160627],{},"多分支判断要注意顺序。",[1829,160629,160630,160631,30331],{},"判断相等用 ",[23,160632,4901],{},[1829,160634,160635],{},"字符串比较区分大小写：",[231,160637,160639],{"className":32324,"code":160638,"language":32326,"meta":236,"style":236},"\"Y\" == \"y\"  # False\n",[23,160640,160641],{"__ignoreMap":236},[240,160642,160643,160646,160648,160650],{"class":242,"line":243},[240,160644,160645],{"class":443},"\"Y\"",[240,160647,103470],{"class":288},[240,160649,159630],{"class":443},[240,160651,160652],{"class":246},"  # False\n",[19,160654,160655],{},"可转换后再判断：",[231,160657,160659],{"className":32324,"code":160658,"language":32326,"meta":236,"style":236},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[23,160660,160661,160678,160691],{"__ignoreMap":236},[240,160662,160663,160666,160668,160670,160672,160675],{"class":242,"line":243},[240,160664,160665],{"class":257},"answer ",[240,160667,440],{"class":288},[240,160669,62536],{"class":264},[240,160671,789],{"class":257},[240,160673,160674],{"class":443},"\"是否继续(y\u002Fn):\"",[240,160676,160677],{"class":257},").lower()\n",[240,160679,160680,160682,160685,160687,160689],{"class":242,"line":250},[240,160681,3489],{"class":288},[240,160683,160684],{"class":257}," answer ",[240,160686,4901],{"class":288},[240,160688,159630],{"class":443},[240,160690,5691],{"class":257},[240,160692,160693,160695,160697,160700],{"class":242,"line":261},[240,160694,33245],{"class":264},[240,160696,789],{"class":257},[240,160698,160699],{"class":443},"\"继续\"",[240,160701,2129],{"class":257},[14,160703,160705],{"id":160704},"_313-本章练习","3.13 本章练习",[1826,160707,160708,160711,160714,160717,160727],{},[1829,160709,160710],{},"输入年龄，判断是否成年。",[1829,160712,160713],{},"输入年份，判断是否为闰年。",[1829,160715,160716],{},"输入三个数字，输出最大值。",[1829,160718,160719,160720,160723,160724,160726],{},"写登录判断：用户名是 ",[23,160721,160722],{},"admin"," 且密码是 ",[23,160725,17033],{}," 才登录成功。",[1829,160728,160729],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[2019,160731,160732],{},"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":236,"searchDepth":250,"depth":250,"links":160734},[160735,160736,160737,160738,160739,160740,160745,160746,160747,160748,160749,160750,160751],{"id":159123,"depth":250,"text":159124},{"id":159176,"depth":250,"text":159177},{"id":159280,"depth":250,"text":159281},{"id":159370,"depth":250,"text":159371},{"id":159560,"depth":250,"text":159561},{"id":159683,"depth":250,"text":159684,"children":160741},[160742,160743,160744],{"id":159687,"depth":261,"text":159688},{"id":159744,"depth":261,"text":159745},{"id":159801,"depth":261,"text":159802},{"id":159846,"depth":250,"text":159847},{"id":159937,"depth":250,"text":159938},{"id":160064,"depth":250,"text":160065},{"id":160194,"depth":250,"text":160195},{"id":160379,"depth":250,"text":160380},{"id":160615,"depth":250,"text":160616},{"id":160704,"depth":250,"text":160705},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":159115,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":160758,"title":160759,"body":160760,"description":2048,"extension":2049,"meta":162529,"navigation":2051,"path":162530,"seo":162531,"stem":162532,"__hash__":162533},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":160761,"toc":162509},[160762,160765,160769,160775,160778,160795,160799,160801,160818,160820,160865,160867,160884,160888,160891,160957,160960,160978,160982,161143,161152,161156,161160,161165,161212,161214,161220,161224,161229,161276,161278,161284,161288,161293,161329,161332,161379,161383,161389,161447,161452,161483,161488,161492,161547,161550,161622,161625,161684,161688,161691,161766,161769,161773,161879,161882,161908,161912,161924,161993,161996,162088,162092,162094,162105,162107,162237,162241,162443,162451,162455,162485,162489,162506],[10,160763,160759],{"id":160764},"_4-循环语句",[14,160766,160768],{"id":160767},"_41-为什么需要循环","4.1 为什么需要循环",[19,160770,160771,160772,160774],{},"如果要输出 1 到 100，不应该写 100 行 ",[23,160773,148097],{},"，而应该用循环。",[19,160776,160777],{},"循环适合处理重复任务：",[1826,160779,160780,160783,160786,160789,160792],{},[1829,160781,160782],{},"重复输出。",[1829,160784,160785],{},"重复输入。",[1829,160787,160788],{},"遍历数据。",[1829,160790,160791],{},"持续执行菜单。",[1829,160793,160794],{},"批量处理文件或数据。",[14,160796,160798],{"id":160797},"_42-while循环","4.2 while循环",[19,160800,7133],{},[231,160802,160804],{"className":32324,"code":160803,"language":32326,"meta":236,"style":236},"while 条件:\n    循环体\n",[23,160805,160806,160813],{"__ignoreMap":236},[240,160807,160808,160810],{"class":242,"line":243},[240,160809,110573],{"class":288},[240,160811,160812],{"class":257}," 条件:\n",[240,160814,160815],{"class":242,"line":250},[240,160816,160817],{"class":257},"    循环体\n",[19,160819,17084],{},[231,160821,160823],{"className":32324,"code":160822,"language":32326,"meta":236,"style":236},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[23,160824,160825,160833,160837,160849,160856],{"__ignoreMap":236},[240,160826,160827,160829,160831],{"class":242,"line":243},[240,160828,102060],{"class":257},[240,160830,440],{"class":288},[240,160832,57632],{"class":264},[240,160834,160835],{"class":242,"line":250},[240,160836,4353],{"emptyLinePlaceholder":2051},[240,160838,160839,160841,160843,160845,160847],{"class":242,"line":261},[240,160840,110573],{"class":288},[240,160842,11389],{"class":257},[240,160844,3545],{"class":288},[240,160846,4101],{"class":264},[240,160848,5691],{"class":257},[240,160850,160851,160853],{"class":242,"line":277},[240,160852,33245],{"class":264},[240,160854,160855],{"class":257},"(i)\n",[240,160857,160858,160861,160863],{"class":242,"line":294},[240,160859,160860],{"class":257},"    i ",[240,160862,11428],{"class":288},[240,160864,57632],{"class":264},[19,160866,82843],{},[1826,160868,160869,160875,160878,160881],{},[1829,160870,160871,160872,30331],{},"判断条件 ",[23,160873,160874],{},"i \u003C= 5",[1829,160876,160877],{},"条件成立，执行循环体。",[1829,160879,160880],{},"执行完后回到条件判断。",[1829,160882,160883],{},"条件不成立，退出循环。",[14,160885,160887],{"id":160886},"_43-while累加","4.3 while累加",[19,160889,160890],{},"计算 1 到 100 的和：",[231,160892,160894],{"className":32324,"code":160893,"language":32326,"meta":236,"style":236},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[23,160895,160896,160904,160912,160916,160928,160938,160946,160950],{"__ignoreMap":236},[240,160897,160898,160900,160902],{"class":242,"line":243},[240,160899,102060],{"class":257},[240,160901,440],{"class":288},[240,160903,57632],{"class":264},[240,160905,160906,160908,160910],{"class":242,"line":250},[240,160907,158885],{"class":257},[240,160909,440],{"class":288},[240,160911,49279],{"class":264},[240,160913,160914],{"class":242,"line":261},[240,160915,4353],{"emptyLinePlaceholder":2051},[240,160917,160918,160920,160922,160924,160926],{"class":242,"line":277},[240,160919,110573],{"class":288},[240,160921,11389],{"class":257},[240,160923,3545],{"class":288},[240,160925,7705],{"class":264},[240,160927,5691],{"class":257},[240,160929,160930,160933,160935],{"class":242,"line":294},[240,160931,160932],{"class":257},"    total ",[240,160934,11428],{"class":288},[240,160936,160937],{"class":257}," i\n",[240,160939,160940,160942,160944],{"class":242,"line":309},[240,160941,160860],{"class":257},[240,160943,11428],{"class":288},[240,160945,57632],{"class":264},[240,160947,160948],{"class":242,"line":529},[240,160949,4353],{"emptyLinePlaceholder":2051},[240,160951,160952,160954],{"class":242,"line":549},[240,160953,32361],{"class":264},[240,160955,160956],{"class":257},"(total)\n",[19,160958,160959],{},"核心思想：",[1826,160961,160962,160967,160972],{},[1829,160963,160964,160966],{},[23,160965,2541],{}," 控制循环次数。",[1829,160968,160969,160971],{},[23,160970,158986],{}," 保存累加结果。",[1829,160973,160974,160975,160977],{},"每轮循环都要更新 ",[23,160976,2541],{},"，否则可能死循环。",[14,160979,160981],{"id":160980},"_44-while猜数字","4.4 while猜数字",[231,160983,160985],{"className":32324,"code":160984,"language":32326,"meta":236,"style":236},"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",[23,160986,160987,160993,160997,161014,161022,161026,161034,161054,161063,161067,161079,161090,161100,161111,161117,161139],{"__ignoreMap":236},[240,160988,160989,160991],{"class":242,"line":243},[240,160990,32338],{"class":288},[240,160992,47274],{"class":257},[240,160994,160995],{"class":242,"line":250},[240,160996,4353],{"emptyLinePlaceholder":2051},[240,160998,160999,161001,161003,161006,161008,161010,161012],{"class":242,"line":261},[240,161000,160665],{"class":257},[240,161002,440],{"class":288},[240,161004,161005],{"class":257}," random.randint(",[240,161007,1643],{"class":264},[240,161009,1277],{"class":257},[240,161011,285],{"class":264},[240,161013,2129],{"class":257},[240,161015,161016,161018,161020],{"class":242,"line":277},[240,161017,148316],{"class":257},[240,161019,440],{"class":288},[240,161021,49279],{"class":264},[240,161023,161024],{"class":242,"line":294},[240,161025,4353],{"emptyLinePlaceholder":2051},[240,161027,161028,161030,161032],{"class":242,"line":309},[240,161029,110573],{"class":288},[240,161031,97205],{"class":264},[240,161033,5691],{"class":257},[240,161035,161036,161039,161041,161043,161045,161047,161049,161052],{"class":242,"line":529},[240,161037,161038],{"class":257},"    guess ",[240,161040,440],{"class":288},[240,161042,4335],{"class":264},[240,161044,789],{"class":257},[240,161046,55756],{"class":264},[240,161048,789],{"class":257},[240,161050,161051],{"class":443},"\"请输入1到100之间的数字:\"",[240,161053,32443],{"class":257},[240,161055,161056,161059,161061],{"class":242,"line":549},[240,161057,161058],{"class":257},"    count ",[240,161060,11428],{"class":288},[240,161062,57632],{"class":264},[240,161064,161065],{"class":242,"line":569},[240,161066,4353],{"emptyLinePlaceholder":2051},[240,161068,161069,161071,161074,161076],{"class":242,"line":589},[240,161070,5053],{"class":288},[240,161072,161073],{"class":257}," guess ",[240,161075,3053],{"class":288},[240,161077,161078],{"class":257}," answer:\n",[240,161080,161081,161083,161085,161088],{"class":242,"line":715},[240,161082,34397],{"class":264},[240,161084,789],{"class":257},[240,161086,161087],{"class":443},"\"猜大了\"",[240,161089,2129],{"class":257},[240,161091,161092,161094,161096,161098],{"class":242,"line":727},[240,161093,41239],{"class":288},[240,161095,161073],{"class":257},[240,161097,431],{"class":288},[240,161099,161078],{"class":257},[240,161101,161102,161104,161106,161109],{"class":242,"line":1730},[240,161103,34397],{"class":264},[240,161105,789],{"class":257},[240,161107,161108],{"class":443},"\"猜小了\"",[240,161110,2129],{"class":257},[240,161112,161113,161115],{"class":242,"line":3582},[240,161114,159647],{"class":288},[240,161116,5691],{"class":257},[240,161118,161119,161121,161123,161125,161128,161130,161132,161134,161137],{"class":242,"line":3596},[240,161120,34397],{"class":264},[240,161122,789],{"class":257},[240,161124,2172],{"class":288},[240,161126,161127],{"class":443},"\"猜对了，一共猜了",[240,161129,2991],{"class":264},[240,161131,86348],{"class":257},[240,161133,3040],{"class":264},[240,161135,161136],{"class":443},"次\"",[240,161138,2129],{"class":257},[240,161140,161141],{"class":242,"line":3601},[240,161142,33573],{"class":288},[19,161144,161145,161148,161149,161151],{},[23,161146,161147],{},"while True"," 表示无限循环，通常配合 ",[23,161150,4006],{}," 使用。",[14,161153,161155],{"id":161154},"_45-break和continue","4.5 break和continue",[32,161157,161159],{"id":161158},"_451-break","4.5.1 break",[19,161161,161162,161164],{},[23,161163,4006],{}," 直接结束整个循环。",[231,161166,161168],{"className":32324,"code":161167,"language":32326,"meta":236,"style":236},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[23,161169,161170,161190,161202,161206],{"__ignoreMap":236},[240,161171,161172,161174,161176,161178,161180,161182,161184,161186,161188],{"class":242,"line":243},[240,161173,4977],{"class":288},[240,161175,11389],{"class":257},[240,161177,27989],{"class":288},[240,161179,34389],{"class":264},[240,161181,789],{"class":257},[240,161183,1643],{"class":264},[240,161185,1277],{"class":257},[240,161187,2445],{"class":264},[240,161189,32732],{"class":257},[240,161191,161192,161194,161196,161198,161200],{"class":242,"line":250},[240,161193,5053],{"class":288},[240,161195,11389],{"class":257},[240,161197,4901],{"class":288},[240,161199,79984],{"class":264},[240,161201,5691],{"class":257},[240,161203,161204],{"class":242,"line":261},[240,161205,33573],{"class":288},[240,161207,161208,161210],{"class":242,"line":277},[240,161209,33245],{"class":264},[240,161211,160855],{"class":257},[19,161213,148082],{},[231,161215,161218],{"className":161216,"code":161217,"language":7139,"meta":236},[7137],"1\n2\n",[23,161219,161217],{"__ignoreMap":236},[32,161221,161223],{"id":161222},"_452-continue","4.5.2 continue",[19,161225,161226,161228],{},[23,161227,156297],{}," 跳过本轮剩余代码，进入下一轮循环。",[231,161230,161232],{"className":32324,"code":161231,"language":32326,"meta":236,"style":236},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[23,161233,161234,161254,161266,161270],{"__ignoreMap":236},[240,161235,161236,161238,161240,161242,161244,161246,161248,161250,161252],{"class":242,"line":243},[240,161237,4977],{"class":288},[240,161239,11389],{"class":257},[240,161241,27989],{"class":288},[240,161243,34389],{"class":264},[240,161245,789],{"class":257},[240,161247,1643],{"class":264},[240,161249,1277],{"class":257},[240,161251,2445],{"class":264},[240,161253,32732],{"class":257},[240,161255,161256,161258,161260,161262,161264],{"class":242,"line":250},[240,161257,5053],{"class":288},[240,161259,11389],{"class":257},[240,161261,4901],{"class":288},[240,161263,79984],{"class":264},[240,161265,5691],{"class":257},[240,161267,161268],{"class":242,"line":261},[240,161269,150137],{"class":288},[240,161271,161272,161274],{"class":242,"line":277},[240,161273,33245],{"class":264},[240,161275,160855],{"class":257},[19,161277,148082],{},[231,161279,161282],{"className":161280,"code":161281,"language":7139,"meta":236},[7137],"1\n2\n4\n5\n",[23,161283,161281],{"__ignoreMap":236},[14,161285,161287],{"id":161286},"_46-for循环","4.6 for循环",[19,161289,161290,161292],{},[23,161291,4977],{}," 常用于遍历序列。",[231,161294,161296],{"className":32324,"code":161295,"language":32326,"meta":236,"style":236},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[23,161297,161298,161307,161311,161322],{"__ignoreMap":236},[240,161299,161300,161302,161304],{"class":242,"line":243},[240,161301,148161],{"class":257},[240,161303,440],{"class":288},[240,161305,161306],{"class":443}," \"python\"\n",[240,161308,161309],{"class":242,"line":250},[240,161310,4353],{"emptyLinePlaceholder":2051},[240,161312,161313,161315,161318,161320],{"class":242,"line":261},[240,161314,4977],{"class":288},[240,161316,161317],{"class":257}," ch ",[240,161319,27989],{"class":288},[240,161321,160024],{"class":257},[240,161323,161324,161326],{"class":242,"line":277},[240,161325,33245],{"class":264},[240,161327,161328],{"class":257},"(ch)\n",[19,161330,161331],{},"遍历列表：",[231,161333,161335],{"className":32324,"code":161334,"language":32326,"meta":236,"style":236},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[23,161336,161337,161359,161363,161373],{"__ignoreMap":236},[240,161338,161339,161342,161344,161346,161348,161350,161352,161354,161357],{"class":242,"line":243},[240,161340,161341],{"class":257},"students ",[240,161343,440],{"class":288},[240,161345,54162],{"class":257},[240,161347,151513],{"class":443},[240,161349,1277],{"class":257},[240,161351,152561],{"class":443},[240,161353,1277],{"class":257},[240,161355,161356],{"class":443},"\"小刚\"",[240,161358,35192],{"class":257},[240,161360,161361],{"class":242,"line":250},[240,161362,4353],{"emptyLinePlaceholder":2051},[240,161364,161365,161367,161369,161371],{"class":242,"line":261},[240,161366,4977],{"class":288},[240,161368,153762],{"class":257},[240,161370,27989],{"class":288},[240,161372,153767],{"class":257},[240,161374,161375,161377],{"class":242,"line":277},[240,161376,33245],{"class":264},[240,161378,151667],{"class":257},[14,161380,161382],{"id":161381},"_47-range函数","4.7 range函数",[19,161384,161385,161388],{},[23,161386,161387],{},"range()"," 用于生成整数序列。",[231,161390,161392],{"className":32324,"code":161391,"language":32326,"meta":236,"style":236},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[23,161393,161394,161408,161426],{"__ignoreMap":236},[240,161395,161396,161398,161400,161402,161405],{"class":242,"line":243},[240,161397,35362],{"class":264},[240,161399,789],{"class":257},[240,161401,1741],{"class":264},[240,161403,161404],{"class":257},")          ",[240,161406,161407],{"class":246},"# 0,1,2,3,4\n",[240,161409,161410,161412,161414,161416,161418,161420,161423],{"class":242,"line":250},[240,161411,35362],{"class":264},[240,161413,789],{"class":257},[240,161415,1643],{"class":264},[240,161417,1277],{"class":257},[240,161419,1741],{"class":264},[240,161421,161422],{"class":257},")       ",[240,161424,161425],{"class":246},"# 1,2,3,4\n",[240,161427,161428,161430,161432,161434,161436,161438,161440,161442,161444],{"class":242,"line":261},[240,161429,35362],{"class":264},[240,161431,789],{"class":257},[240,161433,1643],{"class":264},[240,161435,1277],{"class":257},[240,161437,2546],{"class":264},[240,161439,1277],{"class":257},[240,161441,1668],{"class":264},[240,161443,157286],{"class":257},[240,161445,161446],{"class":246},"# 1,3,5,7,9\n",[19,161448,161449,161450,26565],{},"配合 ",[23,161451,4977],{},[231,161453,161455],{"className":32324,"code":161454,"language":32326,"meta":236,"style":236},"for i in range(1, 6):\n    print(i)\n",[23,161456,161457,161477],{"__ignoreMap":236},[240,161458,161459,161461,161463,161465,161467,161469,161471,161473,161475],{"class":242,"line":243},[240,161460,4977],{"class":288},[240,161462,11389],{"class":257},[240,161464,27989],{"class":288},[240,161466,34389],{"class":264},[240,161468,789],{"class":257},[240,161470,1643],{"class":264},[240,161472,1277],{"class":257},[240,161474,2445],{"class":264},[240,161476,32732],{"class":257},[240,161478,161479,161481],{"class":242,"line":250},[240,161480,33245],{"class":264},[240,161482,160855],{"class":257},[19,161484,10976,161485,161487],{},[23,161486,35362],{}," 的结束值不包含在内。",[14,161489,161491],{"id":161490},"_48-for循环求和","4.8 for循环求和",[231,161493,161495],{"className":32324,"code":161494,"language":32326,"meta":236,"style":236},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[23,161496,161497,161505,161509,161529,161537,161541],{"__ignoreMap":236},[240,161498,161499,161501,161503],{"class":242,"line":243},[240,161500,158885],{"class":257},[240,161502,440],{"class":288},[240,161504,49279],{"class":264},[240,161506,161507],{"class":242,"line":250},[240,161508,4353],{"emptyLinePlaceholder":2051},[240,161510,161511,161513,161515,161517,161519,161521,161523,161525,161527],{"class":242,"line":261},[240,161512,4977],{"class":288},[240,161514,11389],{"class":257},[240,161516,27989],{"class":288},[240,161518,34389],{"class":264},[240,161520,789],{"class":257},[240,161522,1643],{"class":264},[240,161524,1277],{"class":257},[240,161526,2438],{"class":264},[240,161528,32732],{"class":257},[240,161530,161531,161533,161535],{"class":242,"line":277},[240,161532,160932],{"class":257},[240,161534,11428],{"class":288},[240,161536,160937],{"class":257},[240,161538,161539],{"class":242,"line":294},[240,161540,4353],{"emptyLinePlaceholder":2051},[240,161542,161543,161545],{"class":242,"line":309},[240,161544,32361],{"class":264},[240,161546,160956],{"class":257},[19,161548,161549],{},"求偶数和：",[231,161551,161553],{"className":32324,"code":161552,"language":32326,"meta":236,"style":236},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[23,161554,161555,161563,161567,161587,161603,161612,161616],{"__ignoreMap":236},[240,161556,161557,161559,161561],{"class":242,"line":243},[240,161558,158885],{"class":257},[240,161560,440],{"class":288},[240,161562,49279],{"class":264},[240,161564,161565],{"class":242,"line":250},[240,161566,4353],{"emptyLinePlaceholder":2051},[240,161568,161569,161571,161573,161575,161577,161579,161581,161583,161585],{"class":242,"line":261},[240,161570,4977],{"class":288},[240,161572,11389],{"class":257},[240,161574,27989],{"class":288},[240,161576,34389],{"class":264},[240,161578,789],{"class":257},[240,161580,1643],{"class":264},[240,161582,1277],{"class":257},[240,161584,2438],{"class":264},[240,161586,32732],{"class":257},[240,161588,161589,161591,161593,161595,161597,161599,161601],{"class":242,"line":277},[240,161590,5053],{"class":288},[240,161592,11389],{"class":257},[240,161594,2429],{"class":288},[240,161596,16704],{"class":264},[240,161598,103470],{"class":288},[240,161600,6045],{"class":264},[240,161602,5691],{"class":257},[240,161604,161605,161608,161610],{"class":242,"line":294},[240,161606,161607],{"class":257},"        total ",[240,161609,11428],{"class":288},[240,161611,160937],{"class":257},[240,161613,161614],{"class":242,"line":309},[240,161615,4353],{"emptyLinePlaceholder":2051},[240,161617,161618,161620],{"class":242,"line":529},[240,161619,32361],{"class":264},[240,161621,160956],{"class":257},[19,161623,161624],{},"也可以：",[231,161626,161628],{"className":32324,"code":161627,"language":32326,"meta":236,"style":236},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[23,161629,161630,161638,161642,161666,161674,161678],{"__ignoreMap":236},[240,161631,161632,161634,161636],{"class":242,"line":243},[240,161633,158885],{"class":257},[240,161635,440],{"class":288},[240,161637,49279],{"class":264},[240,161639,161640],{"class":242,"line":250},[240,161641,4353],{"emptyLinePlaceholder":2051},[240,161643,161644,161646,161648,161650,161652,161654,161656,161658,161660,161662,161664],{"class":242,"line":261},[240,161645,4977],{"class":288},[240,161647,11389],{"class":257},[240,161649,27989],{"class":288},[240,161651,34389],{"class":264},[240,161653,789],{"class":257},[240,161655,1668],{"class":264},[240,161657,1277],{"class":257},[240,161659,2438],{"class":264},[240,161661,1277],{"class":257},[240,161663,1668],{"class":264},[240,161665,32732],{"class":257},[240,161667,161668,161670,161672],{"class":242,"line":277},[240,161669,160932],{"class":257},[240,161671,11428],{"class":288},[240,161673,160937],{"class":257},[240,161675,161676],{"class":242,"line":294},[240,161677,4353],{"emptyLinePlaceholder":2051},[240,161679,161680,161682],{"class":242,"line":309},[240,161681,32361],{"class":264},[240,161683,160956],{"class":257},[14,161685,161687],{"id":161686},"_49-循环嵌套","4.9 循环嵌套",[19,161689,161690],{},"嵌套循环就是循环里面再写循环。",[231,161692,161694],{"className":32324,"code":161693,"language":32326,"meta":236,"style":236},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[23,161695,161696,161716,161736],{"__ignoreMap":236},[240,161697,161698,161700,161702,161704,161706,161708,161710,161712,161714],{"class":242,"line":243},[240,161699,4977],{"class":288},[240,161701,11389],{"class":257},[240,161703,27989],{"class":288},[240,161705,34389],{"class":264},[240,161707,789],{"class":257},[240,161709,1643],{"class":264},[240,161711,1277],{"class":257},[240,161713,1716],{"class":264},[240,161715,32732],{"class":257},[240,161717,161718,161720,161722,161724,161726,161728,161730,161732,161734],{"class":242,"line":250},[240,161719,5153],{"class":288},[240,161721,11451],{"class":257},[240,161723,27989],{"class":288},[240,161725,34389],{"class":264},[240,161727,789],{"class":257},[240,161729,1643],{"class":264},[240,161731,1277],{"class":257},[240,161733,1716],{"class":264},[240,161735,32732],{"class":257},[240,161737,161738,161740,161742,161744,161747,161749,161751,161753,161756,161758,161760,161762,161764],{"class":242,"line":261},[240,161739,34397],{"class":264},[240,161741,789],{"class":257},[240,161743,2172],{"class":288},[240,161745,161746],{"class":443},"\"i=",[240,161748,2991],{"class":264},[240,161750,2541],{"class":257},[240,161752,3040],{"class":264},[240,161754,161755],{"class":443},", j=",[240,161757,2991],{"class":264},[240,161759,2566],{"class":257},[240,161761,3040],{"class":264},[240,161763,2355],{"class":443},[240,161765,2129],{"class":257},[19,161767,161768],{},"外层循环执行一次，内层循环执行完整一轮。",[14,161770,161772],{"id":161771},"_410-九九乘法表","4.10 九九乘法表",[231,161774,161776],{"className":32324,"code":161775,"language":32326,"meta":236,"style":236},"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",[23,161777,161778,161798,161821,161873],{"__ignoreMap":236},[240,161779,161780,161782,161784,161786,161788,161790,161792,161794,161796],{"class":242,"line":243},[240,161781,4977],{"class":288},[240,161783,11389],{"class":257},[240,161785,27989],{"class":288},[240,161787,34389],{"class":264},[240,161789,789],{"class":257},[240,161791,1643],{"class":264},[240,161793,1277],{"class":257},[240,161795,2546],{"class":264},[240,161797,32732],{"class":257},[240,161799,161800,161802,161804,161806,161808,161810,161812,161815,161817,161819],{"class":242,"line":250},[240,161801,5153],{"class":288},[240,161803,11451],{"class":257},[240,161805,27989],{"class":288},[240,161807,34389],{"class":264},[240,161809,789],{"class":257},[240,161811,1643],{"class":264},[240,161813,161814],{"class":257},", i ",[240,161816,2580],{"class":288},[240,161818,27065],{"class":264},[240,161820,32732],{"class":257},[240,161822,161823,161825,161827,161829,161831,161833,161835,161837,161839,161841,161843,161845,161847,161849,161851,161853,161855,161857,161859,161861,161863,161865,161867,161869,161871],{"class":242,"line":261},[240,161824,34397],{"class":264},[240,161826,789],{"class":257},[240,161828,2172],{"class":288},[240,161830,2355],{"class":443},[240,161832,2991],{"class":264},[240,161834,2566],{"class":257},[240,161836,3040],{"class":264},[240,161838,2554],{"class":443},[240,161840,2991],{"class":264},[240,161842,2541],{"class":257},[240,161844,3040],{"class":264},[240,161846,440],{"class":443},[240,161848,2991],{"class":264},[240,161850,102060],{"class":257},[240,161852,2554],{"class":288},[240,161854,5362],{"class":257},[240,161856,3040],{"class":264},[240,161858,2355],{"class":443},[240,161860,1277],{"class":257},[240,161862,47747],{"class":792},[240,161864,440],{"class":288},[240,161866,2355],{"class":443},[240,161868,3194],{"class":264},[240,161870,2355],{"class":443},[240,161872,2129],{"class":257},[240,161874,161875,161877],{"class":242,"line":277},[240,161876,33245],{"class":264},[240,161878,3929],{"class":257},[19,161880,161881],{},"关键点：",[1826,161883,161884,161890,161896,161902],{},[1829,161885,161886,161887,161889],{},"外层 ",[23,161888,2541],{}," 控制行。",[1829,161891,161892,161893,161895],{},"内层 ",[23,161894,2566],{}," 控制列。",[1829,161897,161898,161899,161901],{},"每行结束后用 ",[23,161900,148097],{}," 换行。",[1829,161903,161904,161907],{},[23,161905,161906],{},"end=\"\\t\""," 让同一行的内容横向排列。",[14,161909,161911],{"id":161910},"_411-循环else","4.11 循环else",[19,161913,161914,161915,161917,161918,161920,161921,161923],{},"Python 的循环可以带 ",[23,161916,3655],{},"。当循环正常结束时执行 ",[23,161919,3655],{},"，如果被 ",[23,161922,4006],{}," 打断，则不执行。",[231,161925,161927],{"className":32324,"code":161926,"language":32326,"meta":236,"style":236},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[23,161928,161929,161949,161961,161972,161976,161982],{"__ignoreMap":236},[240,161930,161931,161933,161935,161937,161939,161941,161943,161945,161947],{"class":242,"line":243},[240,161932,4977],{"class":288},[240,161934,11389],{"class":257},[240,161936,27989],{"class":288},[240,161938,34389],{"class":264},[240,161940,789],{"class":257},[240,161942,1643],{"class":264},[240,161944,1277],{"class":257},[240,161946,2445],{"class":264},[240,161948,32732],{"class":257},[240,161950,161951,161953,161955,161957,161959],{"class":242,"line":250},[240,161952,5053],{"class":288},[240,161954,11389],{"class":257},[240,161956,4901],{"class":288},[240,161958,3991],{"class":264},[240,161960,5691],{"class":257},[240,161962,161963,161965,161967,161970],{"class":242,"line":261},[240,161964,34397],{"class":264},[240,161966,789],{"class":257},[240,161968,161969],{"class":443},"\"找到了\"",[240,161971,2129],{"class":257},[240,161973,161974],{"class":242,"line":277},[240,161975,33573],{"class":288},[240,161977,161978,161980],{"class":242,"line":294},[240,161979,3655],{"class":288},[240,161981,5691],{"class":257},[240,161983,161984,161986,161988,161991],{"class":242,"line":309},[240,161985,33245],{"class":264},[240,161987,789],{"class":257},[240,161989,161990],{"class":443},"\"没找到\"",[240,161992,2129],{"class":257},[19,161994,161995],{},"常用于搜索。",[231,161997,161999],{"className":32324,"code":161998,"language":32326,"meta":236,"style":236},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[23,162000,162001,162022,162031,162035,162047,162058,162068,162072,162078],{"__ignoreMap":236},[240,162002,162003,162006,162008,162010,162012,162014,162016,162018,162020],{"class":242,"line":243},[240,162004,162005],{"class":257},"names ",[240,162007,440],{"class":288},[240,162009,54162],{"class":257},[240,162011,151513],{"class":443},[240,162013,1277],{"class":257},[240,162015,152561],{"class":443},[240,162017,1277],{"class":257},[240,162019,161356],{"class":443},[240,162021,35192],{"class":257},[240,162023,162024,162026,162028],{"class":242,"line":250},[240,162025,113488],{"class":257},[240,162027,440],{"class":288},[240,162029,162030],{"class":443}," \"小李\"\n",[240,162032,162033],{"class":242,"line":261},[240,162034,4353],{"emptyLinePlaceholder":2051},[240,162036,162037,162039,162042,162044],{"class":242,"line":277},[240,162038,4977],{"class":288},[240,162040,162041],{"class":257}," name ",[240,162043,27989],{"class":288},[240,162045,162046],{"class":257}," names:\n",[240,162048,162049,162051,162053,162055],{"class":242,"line":294},[240,162050,5053],{"class":288},[240,162052,162041],{"class":257},[240,162054,4901],{"class":288},[240,162056,162057],{"class":257}," target:\n",[240,162059,162060,162062,162064,162066],{"class":242,"line":309},[240,162061,34397],{"class":264},[240,162063,789],{"class":257},[240,162065,161969],{"class":443},[240,162067,2129],{"class":257},[240,162069,162070],{"class":242,"line":529},[240,162071,33573],{"class":288},[240,162073,162074,162076],{"class":242,"line":549},[240,162075,3655],{"class":288},[240,162077,5691],{"class":257},[240,162079,162080,162082,162084,162086],{"class":242,"line":569},[240,162081,33245],{"class":264},[240,162083,789],{"class":257},[240,162085,161990],{"class":443},[240,162087,2129],{"class":257},[14,162089,162091],{"id":162090},"_412-小案例登录重试","4.12 小案例：登录重试",[19,162093,125202],{},[1826,162095,162096,162099,162102],{},[1829,162097,162098],{},"用户最多输入 3 次密码。",[1829,162100,162101],{},"密码正确则登录成功。",[1829,162103,162104],{},"3 次都错误则锁定账号。",[19,162106,11986],{},[231,162108,162110],{"className":32324,"code":162109,"language":32326,"meta":236,"style":236},"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",[23,162111,162112,162122,162126,162142,162158,162162,162174,162185,162189,162195,162220,162226],{"__ignoreMap":236},[240,162113,162114,162117,162119],{"class":242,"line":243},[240,162115,162116],{"class":257},"password ",[240,162118,440],{"class":288},[240,162120,162121],{"class":443}," \"123456\"\n",[240,162123,162124],{"class":242,"line":250},[240,162125,4353],{"emptyLinePlaceholder":2051},[240,162127,162128,162130,162132,162134,162136,162138,162140],{"class":242,"line":261},[240,162129,4977],{"class":288},[240,162131,11389],{"class":257},[240,162133,27989],{"class":288},[240,162135,34389],{"class":264},[240,162137,789],{"class":257},[240,162139,1692],{"class":264},[240,162141,32732],{"class":257},[240,162143,162144,162147,162149,162151,162153,162156],{"class":242,"line":277},[240,162145,162146],{"class":257},"    user_password ",[240,162148,440],{"class":288},[240,162150,62536],{"class":264},[240,162152,789],{"class":257},[240,162154,162155],{"class":443},"\"请输入密码:\"",[240,162157,2129],{"class":257},[240,162159,162160],{"class":242,"line":294},[240,162161,4353],{"emptyLinePlaceholder":2051},[240,162163,162164,162166,162169,162171],{"class":242,"line":309},[240,162165,5053],{"class":288},[240,162167,162168],{"class":257}," user_password ",[240,162170,4901],{"class":288},[240,162172,162173],{"class":257}," password:\n",[240,162175,162176,162178,162180,162183],{"class":242,"line":529},[240,162177,34397],{"class":264},[240,162179,789],{"class":257},[240,162181,162182],{"class":443},"\"登录成功\"",[240,162184,2129],{"class":257},[240,162186,162187],{"class":242,"line":549},[240,162188,33573],{"class":288},[240,162190,162191,162193],{"class":242,"line":569},[240,162192,159647],{"class":288},[240,162194,5691],{"class":257},[240,162196,162197,162199,162201,162203,162206,162209,162211,162213,162215,162218],{"class":242,"line":589},[240,162198,34397],{"class":264},[240,162200,789],{"class":257},[240,162202,2172],{"class":288},[240,162204,162205],{"class":443},"\"密码错误，还剩",[240,162207,162208],{"class":264},"{2",[240,162210,54207],{"class":288},[240,162212,4984],{"class":257},[240,162214,3040],{"class":264},[240,162216,162217],{"class":443},"次机会\"",[240,162219,2129],{"class":257},[240,162221,162222,162224],{"class":242,"line":715},[240,162223,3655],{"class":288},[240,162225,5691],{"class":257},[240,162227,162228,162230,162232,162235],{"class":242,"line":727},[240,162229,33245],{"class":264},[240,162231,789],{"class":257},[240,162233,162234],{"class":443},"\"账号已锁定\"",[240,162236,2129],{"class":257},[14,162238,162240],{"id":162239},"_413-小案例菜单程序","4.13 小案例：菜单程序",[231,162242,162244],{"className":32324,"code":162243,"language":32326,"meta":236,"style":236},"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",[23,162245,162246,162254,162265,162276,162287,162298,162309,162313,162328,162332,162344,162355,162367,162378,162390,162401,162413,162423,162427,162433],{"__ignoreMap":236},[240,162247,162248,162250,162252],{"class":242,"line":243},[240,162249,110573],{"class":288},[240,162251,97205],{"class":264},[240,162253,5691],{"class":257},[240,162255,162256,162258,162260,162263],{"class":242,"line":250},[240,162257,33245],{"class":264},[240,162259,789],{"class":257},[240,162261,162262],{"class":443},"\"====== 菜单 ======\"",[240,162264,2129],{"class":257},[240,162266,162267,162269,162271,162274],{"class":242,"line":261},[240,162268,33245],{"class":264},[240,162270,789],{"class":257},[240,162272,162273],{"class":443},"\"1. 查询余额\"",[240,162275,2129],{"class":257},[240,162277,162278,162280,162282,162285],{"class":242,"line":277},[240,162279,33245],{"class":264},[240,162281,789],{"class":257},[240,162283,162284],{"class":443},"\"2. 存款\"",[240,162286,2129],{"class":257},[240,162288,162289,162291,162293,162296],{"class":242,"line":294},[240,162290,33245],{"class":264},[240,162292,789],{"class":257},[240,162294,162295],{"class":443},"\"3. 取款\"",[240,162297,2129],{"class":257},[240,162299,162300,162302,162304,162307],{"class":242,"line":309},[240,162301,33245],{"class":264},[240,162303,789],{"class":257},[240,162305,162306],{"class":443},"\"0. 退出\"",[240,162308,2129],{"class":257},[240,162310,162311],{"class":242,"line":529},[240,162312,4353],{"emptyLinePlaceholder":2051},[240,162314,162315,162318,162320,162322,162324,162326],{"class":242,"line":549},[240,162316,162317],{"class":257},"    choice ",[240,162319,440],{"class":288},[240,162321,62536],{"class":264},[240,162323,789],{"class":257},[240,162325,154698],{"class":443},[240,162327,2129],{"class":257},[240,162329,162330],{"class":242,"line":569},[240,162331,4353],{"emptyLinePlaceholder":2051},[240,162333,162334,162336,162338,162340,162342],{"class":242,"line":589},[240,162335,5053],{"class":288},[240,162337,154711],{"class":257},[240,162339,4901],{"class":288},[240,162341,154716],{"class":443},[240,162343,5691],{"class":257},[240,162345,162346,162348,162350,162353],{"class":242,"line":715},[240,162347,34397],{"class":264},[240,162349,789],{"class":257},[240,162351,162352],{"class":443},"\"余额为1000元\"",[240,162354,2129],{"class":257},[240,162356,162357,162359,162361,162363,162365],{"class":242,"line":727},[240,162358,41239],{"class":288},[240,162360,154711],{"class":257},[240,162362,4901],{"class":288},[240,162364,154735],{"class":443},[240,162366,5691],{"class":257},[240,162368,162369,162371,162373,162376],{"class":242,"line":1730},[240,162370,34397],{"class":264},[240,162372,789],{"class":257},[240,162374,162375],{"class":443},"\"存款功能\"",[240,162377,2129],{"class":257},[240,162379,162380,162382,162384,162386,162388],{"class":242,"line":3582},[240,162381,41239],{"class":288},[240,162383,154711],{"class":257},[240,162385,4901],{"class":288},[240,162387,154753],{"class":443},[240,162389,5691],{"class":257},[240,162391,162392,162394,162396,162399],{"class":242,"line":3596},[240,162393,34397],{"class":264},[240,162395,789],{"class":257},[240,162397,162398],{"class":443},"\"取款功能\"",[240,162400,2129],{"class":257},[240,162402,162403,162405,162407,162409,162411],{"class":242,"line":3601},[240,162404,41239],{"class":288},[240,162406,154711],{"class":257},[240,162408,4901],{"class":288},[240,162410,154807],{"class":443},[240,162412,5691],{"class":257},[240,162414,162415,162417,162419,162421],{"class":242,"line":3607},[240,162416,34397],{"class":264},[240,162418,789],{"class":257},[240,162420,154818],{"class":443},[240,162422,2129],{"class":257},[240,162424,162425],{"class":242,"line":3628},[240,162426,33573],{"class":288},[240,162428,162429,162431],{"class":242,"line":3633},[240,162430,159647],{"class":288},[240,162432,5691],{"class":257},[240,162434,162435,162437,162439,162441],{"class":242,"line":3647},[240,162436,34397],{"class":264},[240,162438,789],{"class":257},[240,162440,154839],{"class":443},[240,162442,2129],{"class":257},[19,162444,162445,162446,162448,162449,30331],{},"菜单类程序通常使用 ",[23,162447,161147],{},"，用户选择退出时 ",[23,162450,4006],{},[14,162452,162454],{"id":162453},"_414-易错点","4.14 易错点",[1826,162456,162457,162462,162468,162476,162482],{},[1829,162458,162459,162461],{},[23,162460,110573],{}," 循环必须更新控制变量。",[1829,162463,162464,162467],{},[23,162465,162466],{},"range(1, 10)"," 不包含 10。",[1829,162469,162470,162472,162473,162475],{},[23,162471,4006],{}," 结束整个循环，",[23,162474,156297],{}," 只跳过本轮。",[1829,162477,162478,162479,162481],{},"嵌套循环中，",[23,162480,4006],{}," 只跳出当前所在的一层循环。",[1829,162483,162484],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[14,162486,162488],{"id":162487},"_415-本章练习","4.15 本章练习",[1826,162490,162491,162494,162497,162500,162503],{},[1829,162492,162493],{},"输出 1 到 100。",[1829,162495,162496],{},"计算 1 到 100 的偶数和。",[1829,162498,162499],{},"输出 100 以内能被 3 和 5 同时整除的数。",[1829,162501,162502],{},"编写猜数字游戏，限制最多猜 7 次。",[1829,162504,162505],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[2019,162507,162508],{},"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":236,"searchDepth":250,"depth":250,"links":162510},[162511,162512,162513,162514,162515,162519,162520,162521,162522,162523,162524,162525,162526,162527,162528],{"id":160767,"depth":250,"text":160768},{"id":160797,"depth":250,"text":160798},{"id":160886,"depth":250,"text":160887},{"id":160980,"depth":250,"text":160981},{"id":161154,"depth":250,"text":161155,"children":162516},[162517,162518],{"id":161158,"depth":261,"text":161159},{"id":161222,"depth":261,"text":161223},{"id":161286,"depth":250,"text":161287},{"id":161381,"depth":250,"text":161382},{"id":161490,"depth":250,"text":161491},{"id":161686,"depth":250,"text":161687},{"id":161771,"depth":250,"text":161772},{"id":161910,"depth":250,"text":161911},{"id":162090,"depth":250,"text":162091},{"id":162239,"depth":250,"text":162240},{"id":162453,"depth":250,"text":162454},{"id":162487,"depth":250,"text":162488},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":160759,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":162535,"title":162536,"body":162537,"description":2048,"extension":2049,"meta":164542,"navigation":2051,"path":164543,"seo":164544,"stem":164545,"__hash__":164546},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":162538,"toc":164522},[162539,162542,162546,162549,162552,162566,162569,162583,162587,162589,162608,162610,162657,162659,162673,162677,162751,162754,162758,162761,162820,162828,162831,162884,162887,162891,162896,162951,162959,163009,163013,163018,163026,163125,163131,163135,163140,163143,163154,163195,163208,163212,163215,163251,163254,163267,163270,163330,163334,163338,163341,163392,163396,163399,163446,163452,163518,163521,163525,163528,163644,163647,163651,163654,163760,163764,163767,163805,163808,163850,163853,163913,163916,163920,164384,164387,164391,164418,164424,164485,164489,164519],[10,162540,162536],{"id":162541},"_5-函数基础",[14,162543,162545],{"id":162544},"_51-为什么需要函数","5.1 为什么需要函数",[19,162547,162548],{},"函数用于封装一段可以重复使用的代码。",[19,162550,162551],{},"不使用函数的问题：",[1826,162553,162554,162557,162560,162563],{},[1829,162555,162556],{},"重复代码多。",[1829,162558,162559],{},"修改逻辑时容易漏改。",[1829,162561,162562],{},"主流程不清晰。",[1829,162564,162565],{},"程序越写越长，难以维护。",[19,162567,162568],{},"使用函数后的好处：",[1826,162570,162571,162574,162577,162580],{},[1829,162572,162573],{},"提高复用性。",[1829,162575,162576],{},"提高可读性。",[1829,162578,162579],{},"便于调试。",[1829,162581,162582],{},"便于分工。",[14,162584,162586],{"id":162585},"_52-函数定义","5.2 函数定义",[19,162588,7133],{},[231,162590,162592],{"className":32324,"code":162591,"language":32326,"meta":236,"style":236},"def 函数名():\n    函数体\n",[23,162593,162594,162603],{"__ignoreMap":236},[240,162595,162596,162598,162601],{"class":242,"line":243},[240,162597,33893],{"class":288},[240,162599,162600],{"class":436}," 函数名",[240,162602,33899],{"class":257},[240,162604,162605],{"class":242,"line":250},[240,162606,162607],{"class":257},"    函数体\n",[19,162609,17084],{},[231,162611,162613],{"className":32324,"code":162612,"language":32326,"meta":236,"style":236},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[23,162614,162615,162624,162634,162644,162648,162652],{"__ignoreMap":236},[240,162616,162617,162619,162622],{"class":242,"line":243},[240,162618,33893],{"class":288},[240,162620,162621],{"class":436}," say_hello",[240,162623,33899],{"class":257},[240,162625,162626,162628,162630,162632],{"class":242,"line":250},[240,162627,33245],{"class":264},[240,162629,789],{"class":257},[240,162631,7795],{"class":443},[240,162633,2129],{"class":257},[240,162635,162636,162638,162640,162642],{"class":242,"line":261},[240,162637,33245],{"class":264},[240,162639,789],{"class":257},[240,162641,148264],{"class":443},[240,162643,2129],{"class":257},[240,162645,162646],{"class":242,"line":277},[240,162647,4353],{"emptyLinePlaceholder":2051},[240,162649,162650],{"class":242,"line":294},[240,162651,4353],{"emptyLinePlaceholder":2051},[240,162653,162654],{"class":242,"line":309},[240,162655,162656],{"class":257},"say_hello()\n",[19,162658,10976],{},[1826,162660,162661,162664,162667,162670],{},[1829,162662,162663],{},"函数必须先定义，再调用。",[1829,162665,162666],{},"函数名遵循变量命名规则。",[1829,162668,162669],{},"函数体需要缩进。",[1829,162671,162672],{},"函数不调用就不会执行。",[14,162674,162676],{"id":162675},"_53-函数调用","5.3 函数调用",[231,162678,162680],{"className":32324,"code":162679,"language":32326,"meta":236,"style":236},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[23,162681,162682,162691,162702,162713,162724,162734,162738,162742,162747],{"__ignoreMap":236},[240,162683,162684,162686,162689],{"class":242,"line":243},[240,162685,33893],{"class":288},[240,162687,162688],{"class":436}," print_menu",[240,162690,33899],{"class":257},[240,162692,162693,162695,162697,162700],{"class":242,"line":250},[240,162694,33245],{"class":264},[240,162696,789],{"class":257},[240,162698,162699],{"class":443},"\"1. 查询\"",[240,162701,2129],{"class":257},[240,162703,162704,162706,162708,162711],{"class":242,"line":261},[240,162705,33245],{"class":264},[240,162707,789],{"class":257},[240,162709,162710],{"class":443},"\"2. 添加\"",[240,162712,2129],{"class":257},[240,162714,162715,162717,162719,162722],{"class":242,"line":277},[240,162716,33245],{"class":264},[240,162718,789],{"class":257},[240,162720,162721],{"class":443},"\"3. 删除\"",[240,162723,2129],{"class":257},[240,162725,162726,162728,162730,162732],{"class":242,"line":294},[240,162727,33245],{"class":264},[240,162729,789],{"class":257},[240,162731,162306],{"class":443},[240,162733,2129],{"class":257},[240,162735,162736],{"class":242,"line":309},[240,162737,4353],{"emptyLinePlaceholder":2051},[240,162739,162740],{"class":242,"line":529},[240,162741,4353],{"emptyLinePlaceholder":2051},[240,162743,162744],{"class":242,"line":549},[240,162745,162746],{"class":257},"print_menu()\n",[240,162748,162749],{"class":242,"line":569},[240,162750,162746],{"class":257},[19,162752,162753],{},"函数可以多次调用，每次调用都会执行函数体。",[14,162755,162757],{"id":162756},"_54-参数","5.4 参数",[19,162759,162760],{},"参数用于向函数传递数据。",[231,162762,162764],{"className":32324,"code":162763,"language":32326,"meta":236,"style":236},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[23,162765,162766,162775,162795,162799,162803,162812],{"__ignoreMap":236},[240,162767,162768,162770,162772],{"class":242,"line":243},[240,162769,33893],{"class":288},[240,162771,162621],{"class":436},[240,162773,162774],{"class":257},"(name):\n",[240,162776,162777,162779,162781,162783,162785,162787,162789,162791,162793],{"class":242,"line":250},[240,162778,33245],{"class":264},[240,162780,789],{"class":257},[240,162782,2172],{"class":288},[240,162784,158679],{"class":443},[240,162786,2991],{"class":264},[240,162788,81724],{"class":257},[240,162790,3040],{"class":264},[240,162792,2355],{"class":443},[240,162794,2129],{"class":257},[240,162796,162797],{"class":242,"line":261},[240,162798,4353],{"emptyLinePlaceholder":2051},[240,162800,162801],{"class":242,"line":277},[240,162802,4353],{"emptyLinePlaceholder":2051},[240,162804,162805,162808,162810],{"class":242,"line":294},[240,162806,162807],{"class":257},"say_hello(",[240,162809,151513],{"class":443},[240,162811,2129],{"class":257},[240,162813,162814,162816,162818],{"class":242,"line":309},[240,162815,162807],{"class":257},[240,162817,152561],{"class":443},[240,162819,2129],{"class":257},[19,162821,162822,162824,162825,162827],{},[23,162823,81724],{}," 是形参，",[23,162826,151513],{}," 是实参。",[19,162829,162830],{},"多个参数：",[231,162832,162834],{"className":32324,"code":162833,"language":32326,"meta":236,"style":236},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[23,162835,162836,162844,162857,162863,162867,162871],{"__ignoreMap":236},[240,162837,162838,162840,162842],{"class":242,"line":243},[240,162839,33893],{"class":288},[240,162841,7161],{"class":436},[240,162843,152718],{"class":257},[240,162845,162846,162849,162851,162853,162855],{"class":242,"line":250},[240,162847,162848],{"class":257},"    result ",[240,162850,440],{"class":288},[240,162852,12820],{"class":257},[240,162854,2580],{"class":288},[240,162856,152729],{"class":257},[240,162858,162859,162861],{"class":242,"line":261},[240,162860,33245],{"class":264},[240,162862,78500],{"class":257},[240,162864,162865],{"class":242,"line":277},[240,162866,4353],{"emptyLinePlaceholder":2051},[240,162868,162869],{"class":242,"line":294},[240,162870,4353],{"emptyLinePlaceholder":2051},[240,162872,162873,162876,162878,162880,162882],{"class":242,"line":309},[240,162874,162875],{"class":257},"add(",[240,162877,2546],{"class":264},[240,162879,1277],{"class":257},[240,162881,1000],{"class":264},[240,162883,2129],{"class":257},[19,162885,162886],{},"调用时参数数量必须匹配。",[14,162888,162890],{"id":162889},"_55-返回值","5.5 返回值",[19,162892,162893,162895],{},[23,162894,18994],{}," 用于把函数内部的结果返回给调用者。",[231,162897,162899],{"className":32324,"code":162898,"language":32326,"meta":236,"style":236},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[23,162900,162901,162909,162919,162923,162927,162945],{"__ignoreMap":236},[240,162902,162903,162905,162907],{"class":242,"line":243},[240,162904,33893],{"class":288},[240,162906,7161],{"class":436},[240,162908,152718],{"class":257},[240,162910,162911,162913,162915,162917],{"class":242,"line":250},[240,162912,6042],{"class":288},[240,162914,12820],{"class":257},[240,162916,2580],{"class":288},[240,162918,152729],{"class":257},[240,162920,162921],{"class":242,"line":261},[240,162922,4353],{"emptyLinePlaceholder":2051},[240,162924,162925],{"class":242,"line":277},[240,162926,4353],{"emptyLinePlaceholder":2051},[240,162928,162929,162932,162934,162937,162939,162941,162943],{"class":242,"line":294},[240,162930,162931],{"class":257},"result ",[240,162933,440],{"class":288},[240,162935,162936],{"class":257}," add(",[240,162938,2546],{"class":264},[240,162940,1277],{"class":257},[240,162942,1000],{"class":264},[240,162944,2129],{"class":257},[240,162946,162947,162949],{"class":242,"line":309},[240,162948,32361],{"class":264},[240,162950,78500],{"class":257},[19,162952,162953,162954,162956,162957,30331],{},"如果函数没有写 ",[23,162955,18994],{},"，默认返回 ",[23,162958,97599],{},[231,162960,162962],{"className":32324,"code":162961,"language":32326,"meta":236,"style":236},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[23,162963,162964,162972,162982,162986,162990,162999],{"__ignoreMap":236},[240,162965,162966,162968,162970],{"class":242,"line":243},[240,162967,33893],{"class":288},[240,162969,162621],{"class":436},[240,162971,33899],{"class":257},[240,162973,162974,162976,162978,162980],{"class":242,"line":250},[240,162975,33245],{"class":264},[240,162977,789],{"class":257},[240,162979,7795],{"class":443},[240,162981,2129],{"class":257},[240,162983,162984],{"class":242,"line":261},[240,162985,4353],{"emptyLinePlaceholder":2051},[240,162987,162988],{"class":242,"line":277},[240,162989,4353],{"emptyLinePlaceholder":2051},[240,162991,162992,162994,162996],{"class":242,"line":294},[240,162993,162931],{"class":257},[240,162995,440],{"class":288},[240,162997,162998],{"class":257}," say_hello()\n",[240,163000,163001,163003,163006],{"class":242,"line":309},[240,163002,32361],{"class":264},[240,163004,163005],{"class":257},"(result)  ",[240,163007,163008],{"class":246},"# None\n",[14,163010,163012],{"id":163011},"_56-return的作用","5.6 return的作用",[19,163014,163015,163017],{},[23,163016,18994],{}," 有两个作用：",[1826,163019,163020,163023],{},[1829,163021,163022],{},"返回结果。",[1829,163024,163025],{},"结束函数。",[231,163027,163029],{"className":32324,"code":163028,"language":32326,"meta":236,"style":236},"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",[23,163030,163031,163041,163053,163060,163064,163076,163083,163087,163094,163098,163102,163113],{"__ignoreMap":236},[240,163032,163033,163035,163038],{"class":242,"line":243},[240,163034,33893],{"class":288},[240,163036,163037],{"class":436}," check_age",[240,163039,163040],{"class":257},"(age):\n",[240,163042,163043,163045,163047,163049,163051],{"class":242,"line":250},[240,163044,5053],{"class":288},[240,163046,17655],{"class":257},[240,163048,431],{"class":288},[240,163050,6045],{"class":264},[240,163052,5691],{"class":257},[240,163054,163055,163057],{"class":242,"line":261},[240,163056,16701],{"class":288},[240,163058,163059],{"class":443}," \"年龄不合法\"\n",[240,163061,163062],{"class":242,"line":277},[240,163063,4353],{"emptyLinePlaceholder":2051},[240,163065,163066,163068,163070,163072,163074],{"class":242,"line":294},[240,163067,5053],{"class":288},[240,163069,17655],{"class":257},[240,163071,3664],{"class":288},[240,163073,157910],{"class":264},[240,163075,5691],{"class":257},[240,163077,163078,163080],{"class":242,"line":309},[240,163079,16701],{"class":288},[240,163081,163082],{"class":443}," \"成年人\"\n",[240,163084,163085],{"class":242,"line":529},[240,163086,4353],{"emptyLinePlaceholder":2051},[240,163088,163089,163091],{"class":242,"line":549},[240,163090,6042],{"class":288},[240,163092,163093],{"class":443}," \"未成年人\"\n",[240,163095,163096],{"class":242,"line":569},[240,163097,4353],{"emptyLinePlaceholder":2051},[240,163099,163100],{"class":242,"line":589},[240,163101,4353],{"emptyLinePlaceholder":2051},[240,163103,163104,163106,163109,163111],{"class":242,"line":715},[240,163105,32361],{"class":264},[240,163107,163108],{"class":257},"(check_age(",[240,163110,1000],{"class":264},[240,163112,32443],{"class":257},[240,163114,163115,163117,163119,163121,163123],{"class":242,"line":727},[240,163116,32361],{"class":264},[240,163118,163108],{"class":257},[240,163120,2631],{"class":288},[240,163122,1643],{"class":264},[240,163124,32443],{"class":257},[19,163126,163127,163128,163130],{},"函数执行到 ",[23,163129,18994],{}," 后，后面的代码不会继续执行。",[14,163132,163134],{"id":163133},"_57-none","5.7 None",[19,163136,163137,163139],{},[23,163138,97599],{}," 表示空值或没有结果。",[19,163141,163142],{},"常见使用场景：",[1826,163144,163145,163148,163151],{},[1829,163146,163147],{},"函数没有返回值。",[1829,163149,163150],{},"变量暂时没有具体值。",[1829,163152,163153],{},"表示查询不到结果。",[231,163155,163157],{"className":32324,"code":163156,"language":32326,"meta":236,"style":236},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[23,163158,163159,163167,163171,163184],{"__ignoreMap":236},[240,163160,163161,163163,163165],{"class":242,"line":243},[240,163162,162931],{"class":257},[240,163164,440],{"class":288},[240,163166,153797],{"class":264},[240,163168,163169],{"class":242,"line":250},[240,163170,4353],{"emptyLinePlaceholder":2051},[240,163172,163173,163175,163178,163180,163182],{"class":242,"line":261},[240,163174,3489],{"class":288},[240,163176,163177],{"class":257}," result ",[240,163179,40873],{"class":288},[240,163181,40879],{"class":264},[240,163183,5691],{"class":257},[240,163185,163186,163188,163190,163193],{"class":242,"line":277},[240,163187,33245],{"class":264},[240,163189,789],{"class":257},[240,163191,163192],{"class":443},"\"没有数据\"",[240,163194,2129],{"class":257},[19,163196,163197,163198,163200,163201,163204,163205,30331],{},"判断 ",[23,163199,97599],{}," 推荐使用 ",[23,163202,163203],{},"is None","，不要写成 ",[23,163206,163207],{},"== None",[14,163209,163211],{"id":163210},"_58-函数文档字符串","5.8 函数文档字符串",[19,163213,163214],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[231,163216,163218],{"className":32324,"code":163217,"language":32326,"meta":236,"style":236},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[23,163219,163220,163230,163235],{"__ignoreMap":236},[240,163221,163222,163224,163227],{"class":242,"line":243},[240,163223,33893],{"class":288},[240,163225,163226],{"class":436}," calculate_bmi",[240,163228,163229],{"class":257},"(weight, height):\n",[240,163231,163232],{"class":242,"line":250},[240,163233,163234],{"class":443},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[240,163236,163237,163239,163242,163244,163247,163249],{"class":242,"line":261},[240,163238,6042],{"class":288},[240,163240,163241],{"class":257}," weight ",[240,163243,2683],{"class":288},[240,163245,163246],{"class":257}," height ",[240,163248,12612],{"class":288},[240,163250,49669],{"class":264},[19,163252,163253],{},"查看说明：",[231,163255,163257],{"className":32324,"code":163256,"language":32326,"meta":236,"style":236},"help(calculate_bmi)\n",[23,163258,163259],{"__ignoreMap":236},[240,163260,163261,163264],{"class":242,"line":243},[240,163262,163263],{"class":264},"help",[240,163265,163266],{"class":257},"(calculate_bmi)\n",[19,163268,163269],{},"较完整的写法：",[231,163271,163273],{"className":32324,"code":163272,"language":32326,"meta":236,"style":236},"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",[23,163274,163275,163283,163288,163293,163297,163302,163307,163312,163316],{"__ignoreMap":236},[240,163276,163277,163279,163281],{"class":242,"line":243},[240,163278,33893],{"class":288},[240,163280,163226],{"class":436},[240,163282,163229],{"class":257},[240,163284,163285],{"class":242,"line":250},[240,163286,163287],{"class":443},"    \"\"\"\n",[240,163289,163290],{"class":242,"line":261},[240,163291,163292],{"class":443},"    计算BMI。\n",[240,163294,163295],{"class":242,"line":277},[240,163296,4353],{"emptyLinePlaceholder":2051},[240,163298,163299],{"class":242,"line":294},[240,163300,163301],{"class":443},"    :param weight: 体重，单位kg\n",[240,163303,163304],{"class":242,"line":309},[240,163305,163306],{"class":443},"    :param height: 身高，单位m\n",[240,163308,163309],{"class":242,"line":529},[240,163310,163311],{"class":443},"    :return: BMI数值\n",[240,163313,163314],{"class":242,"line":549},[240,163315,163287],{"class":443},[240,163317,163318,163320,163322,163324,163326,163328],{"class":242,"line":569},[240,163319,6042],{"class":288},[240,163321,163241],{"class":257},[240,163323,2683],{"class":288},[240,163325,163246],{"class":257},[240,163327,12612],{"class":288},[240,163329,49669],{"class":264},[14,163331,163333],{"id":163332},"_59-变量作用域","5.9 变量作用域",[32,163335,163337],{"id":163336},"_591-局部变量","5.9.1 局部变量",[19,163339,163340],{},"在函数内部定义的变量，只能在函数内部使用。",[231,163342,163344],{"className":32324,"code":163343,"language":32326,"meta":236,"style":236},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[23,163345,163346,163355,163363,163369,163373,163377,163382],{"__ignoreMap":236},[240,163347,163348,163350,163353],{"class":242,"line":243},[240,163349,33893],{"class":288},[240,163351,163352],{"class":436}," test",[240,163354,33899],{"class":257},[240,163356,163357,163359,163361],{"class":242,"line":250},[240,163358,47539],{"class":257},[240,163360,440],{"class":288},[240,163362,60359],{"class":264},[240,163364,163365,163367],{"class":242,"line":261},[240,163366,33245],{"class":264},[240,163368,2136],{"class":257},[240,163370,163371],{"class":242,"line":277},[240,163372,4353],{"emptyLinePlaceholder":2051},[240,163374,163375],{"class":242,"line":294},[240,163376,4353],{"emptyLinePlaceholder":2051},[240,163378,163379],{"class":242,"line":309},[240,163380,163381],{"class":257},"test()\n",[240,163383,163384,163386,163389],{"class":242,"line":529},[240,163385,32361],{"class":264},[240,163387,163388],{"class":257},"(num)  ",[240,163390,163391],{"class":246},"# 报错\n",[32,163393,163395],{"id":163394},"_592-全局变量","5.9.2 全局变量",[19,163397,163398],{},"在函数外部定义的变量，可以在函数内部读取。",[231,163400,163402],{"className":32324,"code":163401,"language":32326,"meta":236,"style":236},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[23,163403,163404,163412,163416,163420,163428,163434,163438,163442],{"__ignoreMap":236},[240,163405,163406,163408,163410],{"class":242,"line":243},[240,163407,148161],{"class":257},[240,163409,440],{"class":288},[240,163411,150978],{"class":443},[240,163413,163414],{"class":242,"line":250},[240,163415,4353],{"emptyLinePlaceholder":2051},[240,163417,163418],{"class":242,"line":261},[240,163419,4353],{"emptyLinePlaceholder":2051},[240,163421,163422,163424,163426],{"class":242,"line":277},[240,163423,33893],{"class":288},[240,163425,162621],{"class":436},[240,163427,33899],{"class":257},[240,163429,163430,163432],{"class":242,"line":294},[240,163431,33245],{"class":264},[240,163433,152285],{"class":257},[240,163435,163436],{"class":242,"line":309},[240,163437,4353],{"emptyLinePlaceholder":2051},[240,163439,163440],{"class":242,"line":529},[240,163441,4353],{"emptyLinePlaceholder":2051},[240,163443,163444],{"class":242,"line":549},[240,163445,162656],{"class":257},[19,163447,163448,163449,30331],{},"如果要在函数内部修改全局变量，需要 ",[23,163450,163451],{},"global",[231,163453,163455],{"className":32324,"code":163454,"language":32326,"meta":236,"style":236},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[23,163456,163457,163465,163469,163473,163482,163490,163498,163502,163506,163511],{"__ignoreMap":236},[240,163458,163459,163461,163463],{"class":242,"line":243},[240,163460,148316],{"class":257},[240,163462,440],{"class":288},[240,163464,49279],{"class":264},[240,163466,163467],{"class":242,"line":250},[240,163468,4353],{"emptyLinePlaceholder":2051},[240,163470,163471],{"class":242,"line":261},[240,163472,4353],{"emptyLinePlaceholder":2051},[240,163474,163475,163477,163480],{"class":242,"line":277},[240,163476,33893],{"class":288},[240,163478,163479],{"class":436}," add_count",[240,163481,33899],{"class":257},[240,163483,163484,163487],{"class":242,"line":294},[240,163485,163486],{"class":288},"    global",[240,163488,163489],{"class":257}," count\n",[240,163491,163492,163494,163496],{"class":242,"line":309},[240,163493,161058],{"class":257},[240,163495,11428],{"class":288},[240,163497,57632],{"class":264},[240,163499,163500],{"class":242,"line":529},[240,163501,4353],{"emptyLinePlaceholder":2051},[240,163503,163504],{"class":242,"line":549},[240,163505,4353],{"emptyLinePlaceholder":2051},[240,163507,163508],{"class":242,"line":569},[240,163509,163510],{"class":257},"add_count()\n",[240,163512,163513,163515],{"class":242,"line":589},[240,163514,32361],{"class":264},[240,163516,163517],{"class":257},"(count)\n",[19,163519,163520],{},"不建议大量使用全局变量，项目变大后很难维护。",[14,163522,163524],{"id":163523},"_510-函数嵌套调用","5.10 函数嵌套调用",[19,163526,163527],{},"一个函数中可以调用另一个函数。",[231,163529,163531],{"className":32324,"code":163530,"language":32326,"meta":236,"style":236},"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",[23,163532,163533,163542,163556,163560,163564,163573,163578,163598,163619,163623,163627,163631],{"__ignoreMap":236},[240,163534,163535,163537,163540],{"class":242,"line":243},[240,163536,33893],{"class":288},[240,163538,163539],{"class":436}," print_line",[240,163541,33899],{"class":257},[240,163543,163544,163546,163548,163550,163552,163554],{"class":242,"line":250},[240,163545,33245],{"class":264},[240,163547,789],{"class":257},[240,163549,34429],{"class":443},[240,163551,8469],{"class":288},[240,163553,80579],{"class":264},[240,163555,2129],{"class":257},[240,163557,163558],{"class":242,"line":261},[240,163559,4353],{"emptyLinePlaceholder":2051},[240,163561,163562],{"class":242,"line":277},[240,163563,4353],{"emptyLinePlaceholder":2051},[240,163565,163566,163568,163571],{"class":242,"line":294},[240,163567,33893],{"class":288},[240,163569,163570],{"class":436}," print_info",[240,163572,151000],{"class":257},[240,163574,163575],{"class":242,"line":309},[240,163576,163577],{"class":257},"    print_line()\n",[240,163579,163580,163582,163584,163586,163588,163590,163592,163594,163596],{"class":242,"line":529},[240,163581,33245],{"class":264},[240,163583,789],{"class":257},[240,163585,2172],{"class":288},[240,163587,158307],{"class":443},[240,163589,2991],{"class":264},[240,163591,81724],{"class":257},[240,163593,3040],{"class":264},[240,163595,2355],{"class":443},[240,163597,2129],{"class":257},[240,163599,163600,163602,163604,163606,163609,163611,163613,163615,163617],{"class":242,"line":549},[240,163601,33245],{"class":264},[240,163603,789],{"class":257},[240,163605,2172],{"class":288},[240,163607,163608],{"class":443},"\"年龄:",[240,163610,2991],{"class":264},[240,163612,72144],{"class":257},[240,163614,3040],{"class":264},[240,163616,2355],{"class":443},[240,163618,2129],{"class":257},[240,163620,163621],{"class":242,"line":569},[240,163622,163577],{"class":257},[240,163624,163625],{"class":242,"line":589},[240,163626,4353],{"emptyLinePlaceholder":2051},[240,163628,163629],{"class":242,"line":715},[240,163630,4353],{"emptyLinePlaceholder":2051},[240,163632,163633,163636,163638,163640,163642],{"class":242,"line":727},[240,163634,163635],{"class":257},"print_info(",[240,163637,151513],{"class":443},[240,163639,1277],{"class":257},[240,163641,2748],{"class":264},[240,163643,2129],{"class":257},[19,163645,163646],{},"这种方式可以把小功能组合成大功能。",[14,163648,163650],{"id":163649},"_511-参数检查","5.11 参数检查",[19,163652,163653],{},"函数内部可以检查参数是否合法。",[231,163655,163657],{"className":32324,"code":163656,"language":32326,"meta":236,"style":236},"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",[23,163658,163659,163668,163680,163686,163696,163700,163704,163721,163725,163737,163748,163754],{"__ignoreMap":236},[240,163660,163661,163663,163666],{"class":242,"line":243},[240,163662,33893],{"class":288},[240,163664,163665],{"class":436}," divide",[240,163667,152718],{"class":257},[240,163669,163670,163672,163674,163676,163678],{"class":242,"line":250},[240,163671,5053],{"class":288},[240,163673,12833],{"class":257},[240,163675,4901],{"class":288},[240,163677,6045],{"class":264},[240,163679,5691],{"class":257},[240,163681,163682,163684],{"class":242,"line":261},[240,163683,16701],{"class":288},[240,163685,153797],{"class":264},[240,163687,163688,163690,163692,163694],{"class":242,"line":277},[240,163689,6042],{"class":288},[240,163691,12820],{"class":257},[240,163693,2683],{"class":288},[240,163695,152729],{"class":257},[240,163697,163698],{"class":242,"line":294},[240,163699,4353],{"emptyLinePlaceholder":2051},[240,163701,163702],{"class":242,"line":309},[240,163703,4353],{"emptyLinePlaceholder":2051},[240,163705,163706,163708,163710,163713,163715,163717,163719],{"class":242,"line":529},[240,163707,162931],{"class":257},[240,163709,440],{"class":288},[240,163711,163712],{"class":257}," divide(",[240,163714,2546],{"class":264},[240,163716,1277],{"class":257},[240,163718,1274],{"class":264},[240,163720,2129],{"class":257},[240,163722,163723],{"class":242,"line":549},[240,163724,4353],{"emptyLinePlaceholder":2051},[240,163726,163727,163729,163731,163733,163735],{"class":242,"line":569},[240,163728,3489],{"class":288},[240,163730,163177],{"class":257},[240,163732,40873],{"class":288},[240,163734,40879],{"class":264},[240,163736,5691],{"class":257},[240,163738,163739,163741,163743,163746],{"class":242,"line":589},[240,163740,33245],{"class":264},[240,163742,789],{"class":257},[240,163744,163745],{"class":443},"\"除数不能为0\"",[240,163747,2129],{"class":257},[240,163749,163750,163752],{"class":242,"line":715},[240,163751,3655],{"class":288},[240,163753,5691],{"class":257},[240,163755,163756,163758],{"class":242,"line":727},[240,163757,33245],{"class":264},[240,163759,78500],{"class":257},[14,163761,163763],{"id":163762},"_512-类型提示","5.12 类型提示",[19,163765,163766],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[231,163768,163770],{"className":32324,"code":163769,"language":32326,"meta":236,"style":236},"def add(a: int, b: int) -> int:\n    return a + b\n",[23,163771,163772,163795],{"__ignoreMap":236},[240,163773,163774,163776,163778,163781,163783,163786,163788,163791,163793],{"class":242,"line":243},[240,163775,33893],{"class":288},[240,163777,7161],{"class":436},[240,163779,163780],{"class":257},"(a: ",[240,163782,2126],{"class":264},[240,163784,163785],{"class":257},", b: ",[240,163787,2126],{"class":264},[240,163789,163790],{"class":257},") -> ",[240,163792,2126],{"class":264},[240,163794,5691],{"class":257},[240,163796,163797,163799,163801,163803],{"class":242,"line":250},[240,163798,6042],{"class":288},[240,163800,12820],{"class":257},[240,163802,2580],{"class":288},[240,163804,152729],{"class":257},[19,163806,163807],{},"字符串参数：",[231,163809,163811],{"className":32324,"code":163810,"language":32326,"meta":236,"style":236},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[23,163812,163813,163830],{"__ignoreMap":236},[240,163814,163815,163817,163819,163822,163824,163826,163828],{"class":242,"line":243},[240,163816,33893],{"class":288},[240,163818,162621],{"class":436},[240,163820,163821],{"class":257},"(name: ",[240,163823,3262],{"class":264},[240,163825,163790],{"class":257},[240,163827,97599],{"class":264},[240,163829,5691],{"class":257},[240,163831,163832,163834,163836,163838,163840,163842,163844,163846,163848],{"class":242,"line":250},[240,163833,33245],{"class":264},[240,163835,789],{"class":257},[240,163837,2172],{"class":288},[240,163839,158679],{"class":443},[240,163841,2991],{"class":264},[240,163843,81724],{"class":257},[240,163845,3040],{"class":264},[240,163847,2355],{"class":443},[240,163849,2129],{"class":257},[19,163851,163852],{},"列表参数：",[231,163854,163856],{"className":32324,"code":163855,"language":32326,"meta":236,"style":236},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[23,163857,163858,163877,163885,163897,163906],{"__ignoreMap":236},[240,163859,163860,163862,163865,163868,163870,163873,163875],{"class":242,"line":243},[240,163861,33893],{"class":288},[240,163863,163864],{"class":436}," get_total",[240,163866,163867],{"class":257},"(numbers: list[",[240,163869,2126],{"class":264},[240,163871,163872],{"class":257},"]) -> ",[240,163874,2126],{"class":264},[240,163876,5691],{"class":257},[240,163878,163879,163881,163883],{"class":242,"line":250},[240,163880,160932],{"class":257},[240,163882,440],{"class":288},[240,163884,49279],{"class":264},[240,163886,163887,163889,163892,163894],{"class":242,"line":261},[240,163888,5153],{"class":288},[240,163890,163891],{"class":257}," number ",[240,163893,27989],{"class":288},[240,163895,163896],{"class":257}," numbers:\n",[240,163898,163899,163901,163903],{"class":242,"line":277},[240,163900,161607],{"class":257},[240,163902,11428],{"class":288},[240,163904,163905],{"class":257}," number\n",[240,163907,163908,163910],{"class":242,"line":294},[240,163909,6042],{"class":288},[240,163911,163912],{"class":257}," total\n",[19,163914,163915],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[14,163917,163919],{"id":163918},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[231,163921,163923],{"className":32324,"code":163922,"language":32326,"meta":236,"style":236},"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",[23,163924,163925,163935,163939,163943,163951,163962,163972,163982,163992,164002,164006,164010,164019,164041,164045,164049,164058,164064,164084,164096,164107,164111,164120,164131,164136,164140,164144,164153,164159,164178,164190,164200,164204,164215,164225,164229,164237,164248,164252,164256,164260,164268,164273,164287,164291,164303,164308,164320,164325,164337,164342,164354,164364,164368,164374],{"__ignoreMap":236},[240,163926,163927,163930,163932],{"class":242,"line":243},[240,163928,163929],{"class":257},"balance ",[240,163931,440],{"class":288},[240,163933,163934],{"class":264}," 1000\n",[240,163936,163937],{"class":242,"line":250},[240,163938,4353],{"emptyLinePlaceholder":2051},[240,163940,163941],{"class":242,"line":261},[240,163942,4353],{"emptyLinePlaceholder":2051},[240,163944,163945,163947,163949],{"class":242,"line":277},[240,163946,33893],{"class":288},[240,163948,153658],{"class":436},[240,163950,33899],{"class":257},[240,163952,163953,163955,163957,163960],{"class":242,"line":294},[240,163954,33245],{"class":264},[240,163956,789],{"class":257},[240,163958,163959],{"class":443},"\"====== ATM ======\"",[240,163961,2129],{"class":257},[240,163963,163964,163966,163968,163970],{"class":242,"line":309},[240,163965,33245],{"class":264},[240,163967,789],{"class":257},[240,163969,162273],{"class":443},[240,163971,2129],{"class":257},[240,163973,163974,163976,163978,163980],{"class":242,"line":529},[240,163975,33245],{"class":264},[240,163977,789],{"class":257},[240,163979,162284],{"class":443},[240,163981,2129],{"class":257},[240,163983,163984,163986,163988,163990],{"class":242,"line":549},[240,163985,33245],{"class":264},[240,163987,789],{"class":257},[240,163989,162295],{"class":443},[240,163991,2129],{"class":257},[240,163993,163994,163996,163998,164000],{"class":242,"line":569},[240,163995,33245],{"class":264},[240,163997,789],{"class":257},[240,163999,162306],{"class":443},[240,164001,2129],{"class":257},[240,164003,164004],{"class":242,"line":589},[240,164005,4353],{"emptyLinePlaceholder":2051},[240,164007,164008],{"class":242,"line":715},[240,164009,4353],{"emptyLinePlaceholder":2051},[240,164011,164012,164014,164017],{"class":242,"line":727},[240,164013,33893],{"class":288},[240,164015,164016],{"class":436}," show_balance",[240,164018,33899],{"class":257},[240,164020,164021,164023,164025,164027,164030,164032,164035,164037,164039],{"class":242,"line":1730},[240,164022,33245],{"class":264},[240,164024,789],{"class":257},[240,164026,2172],{"class":288},[240,164028,164029],{"class":443},"\"当前余额:",[240,164031,2991],{"class":264},[240,164033,164034],{"class":257},"balance",[240,164036,3040],{"class":264},[240,164038,158637],{"class":443},[240,164040,2129],{"class":257},[240,164042,164043],{"class":242,"line":3582},[240,164044,4353],{"emptyLinePlaceholder":2051},[240,164046,164047],{"class":242,"line":3596},[240,164048,4353],{"emptyLinePlaceholder":2051},[240,164050,164051,164053,164056],{"class":242,"line":3601},[240,164052,33893],{"class":288},[240,164054,164055],{"class":436}," save_money",[240,164057,33899],{"class":257},[240,164059,164060,164062],{"class":242,"line":3607},[240,164061,163486],{"class":288},[240,164063,151724],{"class":257},[240,164065,164066,164069,164071,164073,164075,164077,164079,164082],{"class":242,"line":3628},[240,164067,164068],{"class":257},"    money ",[240,164070,440],{"class":288},[240,164072,111707],{"class":264},[240,164074,789],{"class":257},[240,164076,55756],{"class":264},[240,164078,789],{"class":257},[240,164080,164081],{"class":443},"\"请输入存款金额:\"",[240,164083,32443],{"class":257},[240,164085,164086,164088,164090,164092,164094],{"class":242,"line":3633},[240,164087,5053],{"class":288},[240,164089,151767],{"class":257},[240,164091,3545],{"class":288},[240,164093,6045],{"class":264},[240,164095,5691],{"class":257},[240,164097,164098,164100,164102,164105],{"class":242,"line":3647},[240,164099,34397],{"class":264},[240,164101,789],{"class":257},[240,164103,164104],{"class":443},"\"金额必须大于0\"",[240,164106,2129],{"class":257},[240,164108,164109],{"class":242,"line":3652},[240,164110,153986],{"class":288},[240,164112,164113,164116,164118],{"class":242,"line":3681},[240,164114,164115],{"class":257},"    balance ",[240,164117,11428],{"class":288},[240,164119,151800],{"class":257},[240,164121,164122,164124,164126,164129],{"class":242,"line":3686},[240,164123,33245],{"class":264},[240,164125,789],{"class":257},[240,164127,164128],{"class":443},"\"存款成功\"",[240,164130,2129],{"class":257},[240,164132,164133],{"class":242,"line":3703},[240,164134,164135],{"class":257},"    show_balance()\n",[240,164137,164138],{"class":242,"line":3708},[240,164139,4353],{"emptyLinePlaceholder":2051},[240,164141,164142],{"class":242,"line":3713},[240,164143,4353],{"emptyLinePlaceholder":2051},[240,164145,164146,164148,164151],{"class":242,"line":3718},[240,164147,33893],{"class":288},[240,164149,164150],{"class":436}," withdraw_money",[240,164152,33899],{"class":257},[240,164154,164155,164157],{"class":242,"line":3732},[240,164156,163486],{"class":288},[240,164158,151724],{"class":257},[240,164160,164161,164163,164165,164167,164169,164171,164173,164176],{"class":242,"line":3737},[240,164162,164068],{"class":257},[240,164164,440],{"class":288},[240,164166,111707],{"class":264},[240,164168,789],{"class":257},[240,164170,55756],{"class":264},[240,164172,789],{"class":257},[240,164174,164175],{"class":443},"\"请输入取款金额:\"",[240,164177,32443],{"class":257},[240,164179,164180,164182,164184,164186,164188],{"class":242,"line":4530},[240,164181,5053],{"class":288},[240,164183,151767],{"class":257},[240,164185,3545],{"class":288},[240,164187,6045],{"class":264},[240,164189,5691],{"class":257},[240,164191,164192,164194,164196,164198],{"class":242,"line":4544},[240,164193,34397],{"class":264},[240,164195,789],{"class":257},[240,164197,164104],{"class":443},[240,164199,2129],{"class":257},[240,164201,164202],{"class":242,"line":4552},[240,164203,153986],{"class":288},[240,164205,164206,164208,164210,164212],{"class":242,"line":4557},[240,164207,5053],{"class":288},[240,164209,151767],{"class":257},[240,164211,3053],{"class":288},[240,164213,164214],{"class":257}," balance:\n",[240,164216,164217,164219,164221,164223],{"class":242,"line":4563},[240,164218,34397],{"class":264},[240,164220,789],{"class":257},[240,164222,151862],{"class":443},[240,164224,2129],{"class":257},[240,164226,164227],{"class":242,"line":4569},[240,164228,153986],{"class":288},[240,164230,164231,164233,164235],{"class":242,"line":4574},[240,164232,164115],{"class":257},[240,164234,151877],{"class":288},[240,164236,151800],{"class":257},[240,164238,164239,164241,164243,164246],{"class":242,"line":9899},[240,164240,33245],{"class":264},[240,164242,789],{"class":257},[240,164244,164245],{"class":443},"\"取款成功\"",[240,164247,2129],{"class":257},[240,164249,164250],{"class":242,"line":9923},[240,164251,164135],{"class":257},[240,164253,164254],{"class":242,"line":9928},[240,164255,4353],{"emptyLinePlaceholder":2051},[240,164257,164258],{"class":242,"line":9934},[240,164259,4353],{"emptyLinePlaceholder":2051},[240,164261,164262,164264,164266],{"class":242,"line":9961},[240,164263,110573],{"class":288},[240,164265,97205],{"class":264},[240,164267,5691],{"class":257},[240,164269,164270],{"class":242,"line":9966},[240,164271,164272],{"class":257},"    show_menu()\n",[240,164274,164275,164277,164279,164281,164283,164285],{"class":242,"line":9972},[240,164276,162317],{"class":257},[240,164278,440],{"class":288},[240,164280,62536],{"class":264},[240,164282,789],{"class":257},[240,164284,154698],{"class":443},[240,164286,2129],{"class":257},[240,164288,164289],{"class":242,"line":9984},[240,164290,4353],{"emptyLinePlaceholder":2051},[240,164292,164293,164295,164297,164299,164301],{"class":242,"line":9996},[240,164294,5053],{"class":288},[240,164296,154711],{"class":257},[240,164298,4901],{"class":288},[240,164300,154716],{"class":443},[240,164302,5691],{"class":257},[240,164304,164305],{"class":242,"line":10008},[240,164306,164307],{"class":257},"        show_balance()\n",[240,164309,164310,164312,164314,164316,164318],{"class":242,"line":11667},[240,164311,41239],{"class":288},[240,164313,154711],{"class":257},[240,164315,4901],{"class":288},[240,164317,154735],{"class":443},[240,164319,5691],{"class":257},[240,164321,164322],{"class":242,"line":11692},[240,164323,164324],{"class":257},"        save_money()\n",[240,164326,164327,164329,164331,164333,164335],{"class":242,"line":11715},[240,164328,41239],{"class":288},[240,164330,154711],{"class":257},[240,164332,4901],{"class":288},[240,164334,154753],{"class":443},[240,164336,5691],{"class":257},[240,164338,164339],{"class":242,"line":11739},[240,164340,164341],{"class":257},"        withdraw_money()\n",[240,164343,164344,164346,164348,164350,164352],{"class":242,"line":11744},[240,164345,41239],{"class":288},[240,164347,154711],{"class":257},[240,164349,4901],{"class":288},[240,164351,154807],{"class":443},[240,164353,5691],{"class":257},[240,164355,164356,164358,164360,164362],{"class":242,"line":11749},[240,164357,34397],{"class":264},[240,164359,789],{"class":257},[240,164361,154818],{"class":443},[240,164363,2129],{"class":257},[240,164365,164366],{"class":242,"line":11754},[240,164367,33573],{"class":288},[240,164369,164370,164372],{"class":242,"line":11763},[240,164371,159647],{"class":288},[240,164373,5691],{"class":257},[240,164375,164376,164378,164380,164382],{"class":242,"line":11768},[240,164377,34397],{"class":264},[240,164379,789],{"class":257},[240,164381,154839],{"class":443},[240,164383,2129],{"class":257},[19,164385,164386],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[14,164388,164390],{"id":164389},"_514-易错点","5.14 易错点",[1826,164392,164393,164396,164399,164404,164409,164412],{},[1829,164394,164395],{},"函数定义后必须调用才会执行。",[1829,164397,164398],{},"函数名后面有括号才是调用。",[1829,164400,164401,164403],{},[23,164402,18994],{}," 后面的代码不会执行。",[1829,164405,164406,164407,30331],{},"没有返回值的函数默认返回 ",[23,164408,97599],{},[1829,164410,164411],{},"局部变量不能在函数外部访问。",[1829,164413,164414,164415,164417],{},"不要滥用 ",[23,164416,163451],{},"，更好的方式是让函数返回新值。",[19,164419,164420,164421,164423],{},"例如不用 ",[23,164422,163451],{}," 改写存款：",[231,164425,164427],{"className":32324,"code":164426,"language":32326,"meta":236,"style":236},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[23,164428,164429,164438,164449,164453,164457,164465,164478],{"__ignoreMap":236},[240,164430,164431,164433,164435],{"class":242,"line":243},[240,164432,33893],{"class":288},[240,164434,164055],{"class":436},[240,164436,164437],{"class":257},"(balance, money):\n",[240,164439,164440,164442,164445,164447],{"class":242,"line":250},[240,164441,6042],{"class":288},[240,164443,164444],{"class":257}," balance ",[240,164446,2580],{"class":288},[240,164448,151800],{"class":257},[240,164450,164451],{"class":242,"line":261},[240,164452,4353],{"emptyLinePlaceholder":2051},[240,164454,164455],{"class":242,"line":277},[240,164456,4353],{"emptyLinePlaceholder":2051},[240,164458,164459,164461,164463],{"class":242,"line":294},[240,164460,163929],{"class":257},[240,164462,440],{"class":288},[240,164464,163934],{"class":264},[240,164466,164467,164469,164471,164474,164476],{"class":242,"line":309},[240,164468,163929],{"class":257},[240,164470,440],{"class":288},[240,164472,164473],{"class":257}," save_money(balance, ",[240,164475,3676],{"class":264},[240,164477,2129],{"class":257},[240,164479,164480,164482],{"class":242,"line":529},[240,164481,32361],{"class":264},[240,164483,164484],{"class":257},"(balance)\n",[14,164486,164488],{"id":164487},"_515-本章练习","5.15 本章练习",[1826,164490,164491,164498,164504,164510,164516],{},[1829,164492,164493,164494,164497],{},"定义函数 ",[23,164495,164496],{},"print_student(name, age)","，输出学生信息。",[1829,164499,164493,164500,164503],{},[23,164501,164502],{},"get_max(a, b, c)","，返回三个数中的最大值。",[1829,164505,164493,164506,164509],{},[23,164507,164508],{},"is_even(num)","，判断一个数是否为偶数。",[1829,164511,164493,164512,164515],{},[23,164513,164514],{},"calculate_bmi(weight, height)","，返回 BMI。",[1829,164517,164518],{},"把第 4 章的菜单程序拆分成多个函数。",[2019,164520,164521],{},"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":236,"searchDepth":250,"depth":250,"links":164523},[164524,164525,164526,164527,164528,164529,164530,164531,164532,164536,164537,164538,164539,164540,164541],{"id":162544,"depth":250,"text":162545},{"id":162585,"depth":250,"text":162586},{"id":162675,"depth":250,"text":162676},{"id":162756,"depth":250,"text":162757},{"id":162889,"depth":250,"text":162890},{"id":163011,"depth":250,"text":163012},{"id":163133,"depth":250,"text":163134},{"id":163210,"depth":250,"text":163211},{"id":163332,"depth":250,"text":163333,"children":164533},[164534,164535],{"id":163336,"depth":261,"text":163337},{"id":163394,"depth":261,"text":163395},{"id":163523,"depth":250,"text":163524},{"id":163649,"depth":250,"text":163650},{"id":163762,"depth":250,"text":163763},{"id":163918,"depth":250,"text":163919},{"id":164389,"depth":250,"text":164390},{"id":164487,"depth":250,"text":164488},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":162536,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":164548,"title":164549,"body":164550,"description":2048,"extension":2049,"meta":167594,"navigation":2051,"path":167595,"seo":167596,"stem":167597,"__hash__":167598},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":164551,"toc":167575},[164552,164555,164559,164562,164565,164669,164672,164676,164679,164759,164762,164766,164769,164829,164832,164868,164871,164886,164890,164963,164966,165021,165024,165094,165097,165181,165191,165249,165253,165298,165301,165327,165330,165436,165440,165443,165485,165488,165552,165555,165559,165562,165623,165626,165656,165659,165697,165701,165704,165713,165716,165840,165843,165884,165888,165891,165902,165942,165945,165960,165965,165968,166035,166038,166128,166132,166135,166183,166186,166213,166215,166245,166248,166268,166271,166302,166305,166338,166342,166345,166369,166372,166396,166399,166423,166427,166430,166560,166563,166643,166646,166721,166725,166728,166778,166781,166823,166826,166850,166852,166876,166879,166934,166937,167003,167007,167010,167013,167051,167054,167107,167110,167156,167159,167192,167195,167199,167518,167522,167551,167555,167572],[10,164553,164549],{"id":164554},"_6-数据容器",[14,164556,164558],{"id":164557},"_61-什么是数据容器","6.1 什么是数据容器",[19,164560,164561],{},"数据容器用于一次保存多个数据。",[19,164563,164564],{},"常见容器：",[802,164566,164567,164584],{},[805,164568,164569],{},[808,164570,164571,164573,164576,164579,164582],{},[811,164572,27718],{},[811,164574,164575],{},"是否有序",[811,164577,164578],{},"是否可变",[811,164580,164581],{},"是否允许重复",[811,164583,29438],{},[819,164585,164586,164604,164620,164635,164652],{},[808,164587,164588,164591,164594,164597,164600],{},[824,164589,164590],{},"list列表",[824,164592,164593],{},"有序",[824,164595,164596],{},"可变",[824,164598,164599],{},"允许",[824,164601,164602],{},[23,164603,156882],{},[808,164605,164606,164609,164611,164614,164616],{},[824,164607,164608],{},"tuple元组",[824,164610,164593],{},[824,164612,164613],{},"不可变",[824,164615,164599],{},[824,164617,164618],{},[23,164619,156895],{},[808,164621,164622,164625,164627,164629,164631],{},[824,164623,164624],{},"str字符串",[824,164626,164593],{},[824,164628,164613],{},[824,164630,164599],{},[824,164632,164633],{},[23,164634,157505],{},[808,164636,164637,164640,164643,164645,164648],{},[824,164638,164639],{},"set集合",[824,164641,164642],{},"无序",[824,164644,164596],{},[824,164646,164647],{},"不允许",[824,164649,164650],{},[23,164651,156920],{},[808,164653,164654,164657,164659,164661,164664],{},[824,164655,164656],{},"dict字典",[824,164658,164593],{},[824,164660,164596],{},[824,164662,164663],{},"key不允许重复",[824,164665,164666],{},[23,164667,164668],{},"{\"name\": \"小明\"}",[19,164670,164671],{},"Python 3.7 之后，字典保持插入顺序。",[14,164673,164675],{"id":164674},"_62-列表list","6.2 列表list",[19,164677,164678],{},"列表用于保存一组有顺序的数据。",[231,164680,164682],{"className":32324,"code":164681,"language":32326,"meta":236,"style":236},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[23,164683,164684,164704,164729,164750],{"__ignoreMap":236},[240,164685,164686,164688,164690,164692,164694,164696,164698,164700,164702],{"class":242,"line":243},[240,164687,162005],{"class":257},[240,164689,440],{"class":288},[240,164691,54162],{"class":257},[240,164693,151513],{"class":443},[240,164695,1277],{"class":257},[240,164697,152561],{"class":443},[240,164699,1277],{"class":257},[240,164701,161356],{"class":443},[240,164703,35192],{"class":257},[240,164705,164706,164709,164711,164713,164715,164717,164719,164721,164723,164725,164727],{"class":242,"line":250},[240,164707,164708],{"class":257},"numbers ",[240,164710,440],{"class":288},[240,164712,54162],{"class":257},[240,164714,1643],{"class":264},[240,164716,1277],{"class":257},[240,164718,1668],{"class":264},[240,164720,1277],{"class":257},[240,164722,1692],{"class":264},[240,164724,1277],{"class":257},[240,164726,1716],{"class":264},[240,164728,35192],{"class":257},[240,164730,164731,164734,164736,164738,164740,164742,164744,164746,164748],{"class":242,"line":261},[240,164732,164733],{"class":257},"mixed ",[240,164735,440],{"class":288},[240,164737,54162],{"class":257},[240,164739,151513],{"class":443},[240,164741,1277],{"class":257},[240,164743,2748],{"class":264},[240,164745,1277],{"class":257},[240,164747,33422],{"class":264},[240,164749,35192],{"class":257},[240,164751,164752,164755,164757],{"class":242,"line":277},[240,164753,164754],{"class":257},"empty ",[240,164756,440],{"class":288},[240,164758,53776],{"class":257},[19,164760,164761],{},"推荐一个列表中保存同类数据，代码更清晰。",[14,164763,164765],{"id":164764},"_63-列表索引","6.3 列表索引",[19,164767,164768],{},"正向索引从 0 开始：",[231,164770,164772],{"className":32324,"code":164771,"language":32326,"meta":236,"style":236},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[23,164773,164774,164794,164798,164809,164819],{"__ignoreMap":236},[240,164775,164776,164778,164780,164782,164784,164786,164788,164790,164792],{"class":242,"line":243},[240,164777,162005],{"class":257},[240,164779,440],{"class":288},[240,164781,54162],{"class":257},[240,164783,151513],{"class":443},[240,164785,1277],{"class":257},[240,164787,152561],{"class":443},[240,164789,1277],{"class":257},[240,164791,161356],{"class":443},[240,164793,35192],{"class":257},[240,164795,164796],{"class":242,"line":250},[240,164797,4353],{"emptyLinePlaceholder":2051},[240,164799,164800,164802,164805,164807],{"class":242,"line":261},[240,164801,32361],{"class":264},[240,164803,164804],{"class":257},"(names[",[240,164806,1274],{"class":264},[240,164808,6609],{"class":257},[240,164810,164811,164813,164815,164817],{"class":242,"line":277},[240,164812,32361],{"class":264},[240,164814,164804],{"class":257},[240,164816,1643],{"class":264},[240,164818,6609],{"class":257},[240,164820,164821,164823,164825,164827],{"class":242,"line":294},[240,164822,32361],{"class":264},[240,164824,164804],{"class":257},[240,164826,1668],{"class":264},[240,164828,6609],{"class":257},[19,164830,164831],{},"反向索引从 -1 开始：",[231,164833,164835],{"className":32324,"code":164834,"language":32326,"meta":236,"style":236},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[23,164836,164837,164853],{"__ignoreMap":236},[240,164838,164839,164841,164843,164845,164847,164850],{"class":242,"line":243},[240,164840,32361],{"class":264},[240,164842,164804],{"class":257},[240,164844,2631],{"class":288},[240,164846,1643],{"class":264},[240,164848,164849],{"class":257},"])  ",[240,164851,164852],{"class":246},"# 小刚\n",[240,164854,164855,164857,164859,164861,164863,164865],{"class":242,"line":250},[240,164856,32361],{"class":264},[240,164858,164804],{"class":257},[240,164860,2631],{"class":288},[240,164862,1668],{"class":264},[240,164864,164849],{"class":257},[240,164866,164867],{"class":246},"# 小红\n",[19,164869,164870],{},"索引越界会报错：",[231,164872,164874],{"className":32324,"code":164873,"language":32326,"meta":236,"style":236},"print(names[3])\n",[23,164875,164876],{"__ignoreMap":236},[240,164877,164878,164880,164882,164884],{"class":242,"line":243},[240,164879,32361],{"class":264},[240,164881,164804],{"class":257},[240,164883,1692],{"class":264},[240,164885,6609],{"class":257},[14,164887,164889],{"id":164888},"_64-列表常用方法","6.4 列表常用方法",[231,164891,164893],{"className":32324,"code":164892,"language":32326,"meta":236,"style":236},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[23,164894,164895,164911,164915,164924,164938,164952,164956],{"__ignoreMap":236},[240,164896,164897,164899,164901,164903,164905,164907,164909],{"class":242,"line":243},[240,164898,162005],{"class":257},[240,164900,440],{"class":288},[240,164902,54162],{"class":257},[240,164904,151513],{"class":443},[240,164906,1277],{"class":257},[240,164908,152561],{"class":443},[240,164910,35192],{"class":257},[240,164912,164913],{"class":242,"line":250},[240,164914,4353],{"emptyLinePlaceholder":2051},[240,164916,164917,164920,164922],{"class":242,"line":261},[240,164918,164919],{"class":257},"names.append(",[240,164921,161356],{"class":443},[240,164923,2129],{"class":257},[240,164925,164926,164929,164931,164933,164936],{"class":242,"line":277},[240,164927,164928],{"class":257},"names.insert(",[240,164930,1643],{"class":264},[240,164932,1277],{"class":257},[240,164934,164935],{"class":443},"\"小李\"",[240,164937,2129],{"class":257},[240,164939,164940,164943,164945,164947,164950],{"class":242,"line":294},[240,164941,164942],{"class":257},"names.extend([",[240,164944,10634],{"class":443},[240,164946,1277],{"class":257},[240,164948,164949],{"class":443},"\"小赵\"",[240,164951,6609],{"class":257},[240,164953,164954],{"class":242,"line":309},[240,164955,4353],{"emptyLinePlaceholder":2051},[240,164957,164958,164960],{"class":242,"line":529},[240,164959,32361],{"class":264},[240,164961,164962],{"class":257},"(names)\n",[19,164964,164965],{},"删除元素：",[231,164967,164969],{"className":32324,"code":164968,"language":32326,"meta":236,"style":236},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[23,164970,164971,164980,164990,165004,165016],{"__ignoreMap":236},[240,164972,164973,164976,164978],{"class":242,"line":243},[240,164974,164975],{"class":257},"names.remove(",[240,164977,152561],{"class":443},[240,164979,2129],{"class":257},[240,164981,164982,164985,164987],{"class":242,"line":250},[240,164983,164984],{"class":257},"last ",[240,164986,440],{"class":288},[240,164988,164989],{"class":257}," names.pop()\n",[240,164991,164992,164995,164997,165000,165002],{"class":242,"line":261},[240,164993,164994],{"class":257},"first ",[240,164996,440],{"class":288},[240,164998,164999],{"class":257}," names.pop(",[240,165001,1274],{"class":264},[240,165003,2129],{"class":257},[240,165005,165006,165009,165012,165014],{"class":242,"line":277},[240,165007,165008],{"class":288},"del",[240,165010,165011],{"class":257}," names[",[240,165013,1274],{"class":264},[240,165015,35192],{"class":257},[240,165017,165018],{"class":242,"line":294},[240,165019,165020],{"class":257},"names.clear()\n",[19,165022,165023],{},"查询和统计：",[231,165025,165027],{"className":32324,"code":165026,"language":32326,"meta":236,"style":236},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[23,165028,165029,165057,165061,165072,165083],{"__ignoreMap":236},[240,165030,165031,165033,165035,165037,165039,165041,165043,165045,165047,165049,165051,165053,165055],{"class":242,"line":243},[240,165032,164708],{"class":257},[240,165034,440],{"class":288},[240,165036,54162],{"class":257},[240,165038,1643],{"class":264},[240,165040,1277],{"class":257},[240,165042,1668],{"class":264},[240,165044,1277],{"class":257},[240,165046,1692],{"class":264},[240,165048,1277],{"class":257},[240,165050,1668],{"class":264},[240,165052,1277],{"class":257},[240,165054,1716],{"class":264},[240,165056,35192],{"class":257},[240,165058,165059],{"class":242,"line":250},[240,165060,4353],{"emptyLinePlaceholder":2051},[240,165062,165063,165065,165068,165070],{"class":242,"line":261},[240,165064,32361],{"class":264},[240,165066,165067],{"class":257},"(numbers.index(",[240,165069,1692],{"class":264},[240,165071,32443],{"class":257},[240,165073,165074,165076,165079,165081],{"class":242,"line":277},[240,165075,32361],{"class":264},[240,165077,165078],{"class":257},"(numbers.count(",[240,165080,1668],{"class":264},[240,165082,32443],{"class":257},[240,165084,165085,165087,165089,165091],{"class":242,"line":294},[240,165086,32361],{"class":264},[240,165088,789],{"class":257},[240,165090,9309],{"class":264},[240,165092,165093],{"class":257},"(numbers))\n",[19,165095,165096],{},"排序：",[231,165098,165100],{"className":32324,"code":165099,"language":32326,"meta":236,"style":236},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[23,165101,165102,165126,165130,165135,165142,165146,165160,165166,165170,165175],{"__ignoreMap":236},[240,165103,165104,165106,165108,165110,165112,165114,165116,165118,165120,165122,165124],{"class":242,"line":243},[240,165105,164708],{"class":257},[240,165107,440],{"class":288},[240,165109,54162],{"class":257},[240,165111,1692],{"class":264},[240,165113,1277],{"class":257},[240,165115,1643],{"class":264},[240,165117,1277],{"class":257},[240,165119,1741],{"class":264},[240,165121,1277],{"class":257},[240,165123,1668],{"class":264},[240,165125,35192],{"class":257},[240,165127,165128],{"class":242,"line":250},[240,165129,4353],{"emptyLinePlaceholder":2051},[240,165131,165132],{"class":242,"line":261},[240,165133,165134],{"class":257},"numbers.sort()\n",[240,165136,165137,165139],{"class":242,"line":277},[240,165138,32361],{"class":264},[240,165140,165141],{"class":257},"(numbers)\n",[240,165143,165144],{"class":242,"line":294},[240,165145,4353],{"emptyLinePlaceholder":2051},[240,165147,165148,165151,165154,165156,165158],{"class":242,"line":309},[240,165149,165150],{"class":257},"numbers.sort(",[240,165152,165153],{"class":792},"reverse",[240,165155,440],{"class":288},[240,165157,33422],{"class":264},[240,165159,2129],{"class":257},[240,165161,165162,165164],{"class":242,"line":529},[240,165163,32361],{"class":264},[240,165165,165141],{"class":257},[240,165167,165168],{"class":242,"line":549},[240,165169,4353],{"emptyLinePlaceholder":2051},[240,165171,165172],{"class":242,"line":569},[240,165173,165174],{"class":257},"numbers.reverse()\n",[240,165176,165177,165179],{"class":242,"line":589},[240,165178,32361],{"class":264},[240,165180,165141],{"class":257},[19,165182,165183,165186,165187,165190],{},[23,165184,165185],{},"sort()"," 会修改原列表，",[23,165188,165189],{},"sorted()"," 返回新列表。",[231,165192,165194],{"className":32324,"code":165193,"language":32326,"meta":236,"style":236},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[23,165195,165196,165220,165232,165236,165242],{"__ignoreMap":236},[240,165197,165198,165200,165202,165204,165206,165208,165210,165212,165214,165216,165218],{"class":242,"line":243},[240,165199,164708],{"class":257},[240,165201,440],{"class":288},[240,165203,54162],{"class":257},[240,165205,1692],{"class":264},[240,165207,1277],{"class":257},[240,165209,1643],{"class":264},[240,165211,1277],{"class":257},[240,165213,1741],{"class":264},[240,165215,1277],{"class":257},[240,165217,1668],{"class":264},[240,165219,35192],{"class":257},[240,165221,165222,165225,165227,165230],{"class":242,"line":250},[240,165223,165224],{"class":257},"new_numbers ",[240,165226,440],{"class":288},[240,165228,165229],{"class":264}," sorted",[240,165231,165141],{"class":257},[240,165233,165234],{"class":242,"line":261},[240,165235,4353],{"emptyLinePlaceholder":2051},[240,165237,165238,165240],{"class":242,"line":277},[240,165239,32361],{"class":264},[240,165241,165141],{"class":257},[240,165243,165244,165246],{"class":242,"line":294},[240,165245,32361],{"class":264},[240,165247,165248],{"class":257},"(new_numbers)\n",[14,165250,165252],{"id":165251},"_65-列表遍历","6.5 列表遍历",[231,165254,165256],{"className":32324,"code":165255,"language":32326,"meta":236,"style":236},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[23,165257,165258,165278,165282,165292],{"__ignoreMap":236},[240,165259,165260,165262,165264,165266,165268,165270,165272,165274,165276],{"class":242,"line":243},[240,165261,162005],{"class":257},[240,165263,440],{"class":288},[240,165265,54162],{"class":257},[240,165267,151513],{"class":443},[240,165269,1277],{"class":257},[240,165271,152561],{"class":443},[240,165273,1277],{"class":257},[240,165275,161356],{"class":443},[240,165277,35192],{"class":257},[240,165279,165280],{"class":242,"line":250},[240,165281,4353],{"emptyLinePlaceholder":2051},[240,165283,165284,165286,165288,165290],{"class":242,"line":261},[240,165285,4977],{"class":288},[240,165287,162041],{"class":257},[240,165289,27989],{"class":288},[240,165291,162046],{"class":257},[240,165293,165294,165296],{"class":242,"line":277},[240,165295,33245],{"class":264},[240,165297,152285],{"class":257},[19,165299,165300],{},"需要索引时：",[231,165302,165304],{"className":32324,"code":165303,"language":32326,"meta":236,"style":236},"for index, name in enumerate(names):\n    print(index, name)\n",[23,165305,165306,165320],{"__ignoreMap":236},[240,165307,165308,165310,165313,165315,165317],{"class":242,"line":243},[240,165309,4977],{"class":288},[240,165311,165312],{"class":257}," index, name ",[240,165314,27989],{"class":288},[240,165316,33552],{"class":264},[240,165318,165319],{"class":257},"(names):\n",[240,165321,165322,165324],{"class":242,"line":250},[240,165323,33245],{"class":264},[240,165325,165326],{"class":257},"(index, name)\n",[19,165328,165329],{},"统计总分：",[231,165331,165333],{"className":32324,"code":165332,"language":32326,"meta":236,"style":236},"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",[23,165334,165335,165360,165368,165372,165383,165391,165395,165412],{"__ignoreMap":236},[240,165336,165337,165340,165342,165344,165346,165348,165350,165352,165354,165356,165358],{"class":242,"line":243},[240,165338,165339],{"class":257},"scores ",[240,165341,440],{"class":288},[240,165343,54162],{"class":257},[240,165345,2957],{"class":264},[240,165347,1277],{"class":257},[240,165349,2833],{"class":264},[240,165351,1277],{"class":257},[240,165353,2358],{"class":264},[240,165355,1277],{"class":257},[240,165357,2660],{"class":264},[240,165359,35192],{"class":257},[240,165361,165362,165364,165366],{"class":242,"line":250},[240,165363,158885],{"class":257},[240,165365,440],{"class":288},[240,165367,49279],{"class":264},[240,165369,165370],{"class":242,"line":261},[240,165371,4353],{"emptyLinePlaceholder":2051},[240,165373,165374,165376,165378,165380],{"class":242,"line":277},[240,165375,4977],{"class":288},[240,165377,159408],{"class":257},[240,165379,27989],{"class":288},[240,165381,165382],{"class":257}," scores:\n",[240,165384,165385,165387,165389],{"class":242,"line":294},[240,165386,160932],{"class":257},[240,165388,11428],{"class":288},[240,165390,3536],{"class":257},[240,165392,165393],{"class":242,"line":309},[240,165394,4353],{"emptyLinePlaceholder":2051},[240,165396,165397,165400,165402,165405,165407,165409],{"class":242,"line":529},[240,165398,165399],{"class":257},"avg ",[240,165401,440],{"class":288},[240,165403,165404],{"class":257}," total ",[240,165406,2683],{"class":288},[240,165408,9282],{"class":264},[240,165410,165411],{"class":257},"(scores)\n",[240,165413,165414,165416,165418,165420,165423,165425,165428,165430,165432,165434],{"class":242,"line":549},[240,165415,32361],{"class":264},[240,165417,789],{"class":257},[240,165419,2172],{"class":288},[240,165421,165422],{"class":443},"\"平均分:",[240,165424,2991],{"class":264},[240,165426,165427],{"class":257},"avg",[240,165429,158784],{"class":288},[240,165431,3040],{"class":264},[240,165433,2355],{"class":443},[240,165435,2129],{"class":257},[14,165437,165439],{"id":165438},"_66-元组tuple","6.6 元组tuple",[19,165441,165442],{},"元组和列表类似，但不可修改。",[231,165444,165446],{"className":32324,"code":165445,"language":32326,"meta":236,"style":236},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[23,165447,165448,165465],{"__ignoreMap":236},[240,165449,165450,165453,165455,165457,165459,165461,165463],{"class":242,"line":243},[240,165451,165452],{"class":257},"point ",[240,165454,440],{"class":288},[240,165456,3612],{"class":257},[240,165458,2546],{"class":264},[240,165460,1277],{"class":257},[240,165462,1000],{"class":264},[240,165464,2129],{"class":257},[240,165466,165467,165469,165471,165473,165475,165477,165479,165481,165483],{"class":242,"line":250},[240,165468,118224],{"class":257},[240,165470,440],{"class":288},[240,165472,3612],{"class":257},[240,165474,151513],{"class":443},[240,165476,1277],{"class":257},[240,165478,2748],{"class":264},[240,165480,1277],{"class":257},[240,165482,71192],{"class":443},[240,165484,2129],{"class":257},[19,165486,165487],{},"单元素元组必须加逗号：",[231,165489,165491],{"className":32324,"code":165490,"language":32326,"meta":236,"style":236},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[23,165492,165493,165507,165520,165524,165538],{"__ignoreMap":236},[240,165494,165495,165498,165500,165502,165504],{"class":242,"line":243},[240,165496,165497],{"class":257},"t1 ",[240,165499,440],{"class":288},[240,165501,3612],{"class":257},[240,165503,2546],{"class":264},[240,165505,165506],{"class":257},",)\n",[240,165508,165509,165512,165514,165516,165518],{"class":242,"line":250},[240,165510,165511],{"class":257},"t2 ",[240,165513,440],{"class":288},[240,165515,3612],{"class":257},[240,165517,2546],{"class":264},[240,165519,2129],{"class":257},[240,165521,165522],{"class":242,"line":261},[240,165523,4353],{"emptyLinePlaceholder":2051},[240,165525,165526,165528,165530,165532,165535],{"class":242,"line":277},[240,165527,32361],{"class":264},[240,165529,789],{"class":257},[240,165531,105017],{"class":264},[240,165533,165534],{"class":257},"(t1))  ",[240,165536,165537],{"class":246},"# tuple\n",[240,165539,165540,165542,165544,165546,165549],{"class":242,"line":294},[240,165541,32361],{"class":264},[240,165543,789],{"class":257},[240,165545,105017],{"class":264},[240,165547,165548],{"class":257},"(t2))  ",[240,165550,165551],{"class":246},"# int\n",[19,165553,165554],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[14,165556,165558],{"id":165557},"_67-字符串str","6.7 字符串str",[19,165560,165561],{},"字符串也是序列，可以索引、切片和遍历。",[231,165563,165565],{"className":32324,"code":165564,"language":32326,"meta":236,"style":236},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[23,165566,165567,165575,165579,165590,165602,165606,165617],{"__ignoreMap":236},[240,165568,165569,165571,165573],{"class":242,"line":243},[240,165570,158069],{"class":257},[240,165572,440],{"class":288},[240,165574,161306],{"class":443},[240,165576,165577],{"class":242,"line":250},[240,165578,4353],{"emptyLinePlaceholder":2051},[240,165580,165581,165583,165586,165588],{"class":242,"line":261},[240,165582,32361],{"class":264},[240,165584,165585],{"class":257},"(text[",[240,165587,1274],{"class":264},[240,165589,6609],{"class":257},[240,165591,165592,165594,165596,165598,165600],{"class":242,"line":277},[240,165593,32361],{"class":264},[240,165595,165585],{"class":257},[240,165597,2631],{"class":288},[240,165599,1643],{"class":264},[240,165601,6609],{"class":257},[240,165603,165604],{"class":242,"line":294},[240,165605,4353],{"emptyLinePlaceholder":2051},[240,165607,165608,165610,165612,165614],{"class":242,"line":309},[240,165609,4977],{"class":288},[240,165611,161317],{"class":257},[240,165613,27989],{"class":288},[240,165615,165616],{"class":257}," text:\n",[240,165618,165619,165621],{"class":242,"line":529},[240,165620,33245],{"class":264},[240,165622,161328],{"class":257},[19,165624,165625],{},"字符串不可变：",[231,165627,165629],{"className":32324,"code":165628,"language":32326,"meta":236,"style":236},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[23,165630,165631,165639],{"__ignoreMap":236},[240,165632,165633,165635,165637],{"class":242,"line":243},[240,165634,158069],{"class":257},[240,165636,440],{"class":288},[240,165638,161306],{"class":443},[240,165640,165641,165644,165646,165648,165650,165653],{"class":242,"line":250},[240,165642,165643],{"class":257},"text[",[240,165645,1274],{"class":264},[240,165647,6395],{"class":257},[240,165649,440],{"class":288},[240,165651,165652],{"class":443}," \"P\"",[240,165654,165655],{"class":246},"  # 报错\n",[19,165657,165658],{},"如果要得到新字符串：",[231,165660,165662],{"className":32324,"code":165661,"language":32326,"meta":236,"style":236},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[23,165663,165664,165672,165690],{"__ignoreMap":236},[240,165665,165666,165668,165670],{"class":242,"line":243},[240,165667,158069],{"class":257},[240,165669,440],{"class":288},[240,165671,161306],{"class":443},[240,165673,165674,165676,165678,165680,165682,165685,165687],{"class":242,"line":250},[240,165675,158069],{"class":257},[240,165677,440],{"class":288},[240,165679,165652],{"class":443},[240,165681,47512],{"class":288},[240,165683,165684],{"class":257}," text[",[240,165686,1643],{"class":264},[240,165688,165689],{"class":257},":]\n",[240,165691,165692,165694],{"class":242,"line":261},[240,165693,32361],{"class":264},[240,165695,165696],{"class":257},"(text)\n",[14,165698,165700],{"id":165699},"_68-切片","6.8 切片",[19,165702,165703],{},"切片用于从序列中取一部分。",[231,165705,165707],{"className":32324,"code":165706,"language":32326,"meta":236,"style":236},"序列[开始:结束:步长]\n",[23,165708,165709],{"__ignoreMap":236},[240,165710,165711],{"class":242,"line":243},[240,165712,165706],{"class":257},[19,165714,165715],{},"结束位置不包含。",[231,165717,165719],{"className":32324,"code":165718,"language":32326,"meta":236,"style":236},"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",[23,165720,165721,165758,165762,165781,165796,165810,165824],{"__ignoreMap":236},[240,165722,165723,165726,165728,165730,165732,165734,165736,165738,165740,165742,165744,165746,165748,165750,165752,165754,165756],{"class":242,"line":243},[240,165724,165725],{"class":257},"nums ",[240,165727,440],{"class":288},[240,165729,54162],{"class":257},[240,165731,1274],{"class":264},[240,165733,1277],{"class":257},[240,165735,1643],{"class":264},[240,165737,1277],{"class":257},[240,165739,1668],{"class":264},[240,165741,1277],{"class":257},[240,165743,1692],{"class":264},[240,165745,1277],{"class":257},[240,165747,1716],{"class":264},[240,165749,1277],{"class":257},[240,165751,1741],{"class":264},[240,165753,1277],{"class":257},[240,165755,2445],{"class":264},[240,165757,35192],{"class":257},[240,165759,165760],{"class":242,"line":250},[240,165761,4353],{"emptyLinePlaceholder":2051},[240,165763,165764,165766,165769,165771,165773,165775,165778],{"class":242,"line":261},[240,165765,32361],{"class":264},[240,165767,165768],{"class":257},"(nums[",[240,165770,1643],{"class":264},[240,165772,2954],{"class":257},[240,165774,1716],{"class":264},[240,165776,165777],{"class":257},"])    ",[240,165779,165780],{"class":246},"# [1, 2, 3]\n",[240,165782,165783,165785,165788,165790,165793],{"class":242,"line":277},[240,165784,32361],{"class":264},[240,165786,165787],{"class":257},"(nums[:",[240,165789,1692],{"class":264},[240,165791,165792],{"class":257},"])     ",[240,165794,165795],{"class":246},"# [0, 1, 2]\n",[240,165797,165798,165800,165802,165804,165807],{"class":242,"line":294},[240,165799,32361],{"class":264},[240,165801,165768],{"class":257},[240,165803,1692],{"class":264},[240,165805,165806],{"class":257},":])     ",[240,165808,165809],{"class":246},"# [3, 4, 5, 6]\n",[240,165811,165812,165814,165817,165819,165821],{"class":242,"line":309},[240,165813,32361],{"class":264},[240,165815,165816],{"class":257},"(nums[::",[240,165818,1668],{"class":264},[240,165820,165777],{"class":257},[240,165822,165823],{"class":246},"# [0, 2, 4, 6]\n",[240,165825,165826,165828,165830,165832,165834,165837],{"class":242,"line":529},[240,165827,32361],{"class":264},[240,165829,165816],{"class":257},[240,165831,2631],{"class":288},[240,165833,1643],{"class":264},[240,165835,165836],{"class":257},"])   ",[240,165838,165839],{"class":246},"# 反转\n",[19,165841,165842],{},"字符串切片：",[231,165844,165846],{"className":32324,"code":165845,"language":32326,"meta":236,"style":236},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[23,165847,165848,165857,165871],{"__ignoreMap":236},[240,165849,165850,165852,165854],{"class":242,"line":243},[240,165851,158069],{"class":257},[240,165853,440],{"class":288},[240,165855,165856],{"class":443}," \"abcdef\"\n",[240,165858,165859,165861,165863,165865,165867,165869],{"class":242,"line":250},[240,165860,32361],{"class":264},[240,165862,165585],{"class":257},[240,165864,1643],{"class":264},[240,165866,2954],{"class":257},[240,165868,1716],{"class":264},[240,165870,6609],{"class":257},[240,165872,165873,165875,165878,165880,165882],{"class":242,"line":261},[240,165874,32361],{"class":264},[240,165876,165877],{"class":257},"(text[::",[240,165879,2631],{"class":288},[240,165881,1643],{"class":264},[240,165883,6609],{"class":257},[14,165885,165887],{"id":165886},"_69-集合set","6.9 集合set",[19,165889,165890],{},"集合特点：",[1826,165892,165893,165896,165899],{},[1829,165894,165895],{},"无序。",[1829,165897,165898],{},"元素不重复。",[1829,165900,165901],{},"可以做交集、并集、差集。",[231,165903,165905],{"className":32324,"code":165904,"language":32326,"meta":236,"style":236},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[23,165906,165907,165935],{"__ignoreMap":236},[240,165908,165909,165911,165913,165915,165917,165919,165921,165923,165925,165927,165929,165931,165933],{"class":242,"line":243},[240,165910,165725],{"class":257},[240,165912,440],{"class":288},[240,165914,6400],{"class":257},[240,165916,1643],{"class":264},[240,165918,1277],{"class":257},[240,165920,1668],{"class":264},[240,165922,1277],{"class":257},[240,165924,1692],{"class":264},[240,165926,1277],{"class":257},[240,165928,1692],{"class":264},[240,165930,1277],{"class":257},[240,165932,1716],{"class":264},[240,165934,312],{"class":257},[240,165936,165937,165939],{"class":242,"line":250},[240,165938,32361],{"class":264},[240,165940,165941],{"class":257},"(nums)\n",[19,165943,165944],{},"创建空集合：",[231,165946,165948],{"className":32324,"code":165947,"language":32326,"meta":236,"style":236},"s = set()\n",[23,165949,165950],{"__ignoreMap":236},[240,165951,165952,165954,165956,165958],{"class":242,"line":243},[240,165953,12530],{"class":257},[240,165955,440],{"class":288},[240,165957,121632],{"class":264},[240,165959,3929],{"class":257},[19,165961,10976,165962,165964],{},[23,165963,34405],{}," 是空字典，不是空集合。",[19,165966,165967],{},"集合常用操作：",[231,165969,165971],{"className":32324,"code":165970,"language":32326,"meta":236,"style":236},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[23,165972,165973,165993,165997,166006,166015,166024],{"__ignoreMap":236},[240,165974,165975,165977,165979,165981,165983,165985,165987,165989,165991],{"class":242,"line":243},[240,165976,12530],{"class":257},[240,165978,440],{"class":288},[240,165980,6400],{"class":257},[240,165982,1643],{"class":264},[240,165984,1277],{"class":257},[240,165986,1668],{"class":264},[240,165988,1277],{"class":257},[240,165990,1692],{"class":264},[240,165992,312],{"class":257},[240,165994,165995],{"class":242,"line":250},[240,165996,4353],{"emptyLinePlaceholder":2051},[240,165998,165999,166002,166004],{"class":242,"line":261},[240,166000,166001],{"class":257},"s.add(",[240,166003,1716],{"class":264},[240,166005,2129],{"class":257},[240,166007,166008,166011,166013],{"class":242,"line":277},[240,166009,166010],{"class":257},"s.remove(",[240,166012,1668],{"class":264},[240,166014,2129],{"class":257},[240,166016,166017,166020,166022],{"class":242,"line":294},[240,166018,166019],{"class":257},"s.discard(",[240,166021,2546],{"class":264},[240,166023,2129],{"class":257},[240,166025,166026,166028,166030,166032],{"class":242,"line":309},[240,166027,32361],{"class":264},[240,166029,789],{"class":257},[240,166031,9309],{"class":264},[240,166033,166034],{"class":257},"(s))\n",[19,166036,166037],{},"交并差：",[231,166039,166041],{"className":32324,"code":166040,"language":32326,"meta":236,"style":236},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[23,166042,166043,166063,166083,166087,166102,166115],{"__ignoreMap":236},[240,166044,166045,166047,166049,166051,166053,166055,166057,166059,166061],{"class":242,"line":243},[240,166046,12870],{"class":257},[240,166048,440],{"class":288},[240,166050,6400],{"class":257},[240,166052,1643],{"class":264},[240,166054,1277],{"class":257},[240,166056,1668],{"class":264},[240,166058,1277],{"class":257},[240,166060,1692],{"class":264},[240,166062,312],{"class":257},[240,166064,166065,166067,166069,166071,166073,166075,166077,166079,166081],{"class":242,"line":250},[240,166066,12896],{"class":257},[240,166068,440],{"class":288},[240,166070,6400],{"class":257},[240,166072,1692],{"class":264},[240,166074,1277],{"class":257},[240,166076,1716],{"class":264},[240,166078,1277],{"class":257},[240,166080,1741],{"class":264},[240,166082,312],{"class":257},[240,166084,166085],{"class":242,"line":261},[240,166086,4353],{"emptyLinePlaceholder":2051},[240,166088,166089,166091,166094,166096,166099],{"class":242,"line":277},[240,166090,32361],{"class":264},[240,166092,166093],{"class":257},"(a ",[240,166095,2454],{"class":288},[240,166097,166098],{"class":257}," b)  ",[240,166100,166101],{"class":246},"# 交集\n",[240,166103,166104,166106,166108,166110,166112],{"class":242,"line":294},[240,166105,32361],{"class":264},[240,166107,166093],{"class":257},[240,166109,3015],{"class":288},[240,166111,166098],{"class":257},[240,166113,166114],{"class":246},"# 并集\n",[240,166116,166117,166119,166121,166123,166125],{"class":242,"line":309},[240,166118,32361],{"class":264},[240,166120,166093],{"class":257},[240,166122,2631],{"class":288},[240,166124,166098],{"class":257},[240,166126,166127],{"class":246},"# 差集\n",[14,166129,166131],{"id":166130},"_610-字典dict","6.10 字典dict",[19,166133,166134],{},"字典通过 key-value 保存数据。",[231,166136,166138],{"className":32324,"code":166137,"language":32326,"meta":236,"style":236},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[23,166139,166140,166148,166158,166169,166179],{"__ignoreMap":236},[240,166141,166142,166144,166146],{"class":242,"line":243},[240,166143,151106],{"class":257},[240,166145,440],{"class":288},[240,166147,258],{"class":257},[240,166149,166150,166152,166154,166156],{"class":242,"line":250},[240,166151,148645],{"class":443},[240,166153,268],{"class":257},[240,166155,151513],{"class":443},[240,166157,33412],{"class":257},[240,166159,166160,166163,166165,166167],{"class":242,"line":261},[240,166161,166162],{"class":443},"    \"age\"",[240,166164,268],{"class":257},[240,166166,2748],{"class":264},[240,166168,33412],{"class":257},[240,166170,166171,166174,166176],{"class":242,"line":277},[240,166172,166173],{"class":443},"    \"score\"",[240,166175,268],{"class":257},[240,166177,166178],{"class":264},"95\n",[240,166180,166181],{"class":242,"line":294},[240,166182,312],{"class":257},[19,166184,166185],{},"获取值：",[231,166187,166189],{"className":32324,"code":166188,"language":32326,"meta":236,"style":236},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[23,166190,166191,166202],{"__ignoreMap":236},[240,166192,166193,166195,166198,166200],{"class":242,"line":243},[240,166194,32361],{"class":264},[240,166196,166197],{"class":257},"(student[",[240,166199,64602],{"class":443},[240,166201,6609],{"class":257},[240,166203,166204,166206,166209,166211],{"class":242,"line":250},[240,166205,32361],{"class":264},[240,166207,166208],{"class":257},"(student.get(",[240,166210,64602],{"class":443},[240,166212,32443],{"class":257},[19,166214,17337],{},[231,166216,166218],{"className":32324,"code":166217,"language":32326,"meta":236,"style":236},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[23,166219,166220,166233],{"__ignoreMap":236},[240,166221,166222,166224,166227,166230],{"class":242,"line":243},[240,166223,154484],{"class":257},[240,166225,166226],{"class":443},"\"address\"",[240,166228,166229],{"class":257},"]     ",[240,166231,166232],{"class":246},"# key不存在会报错\n",[240,166234,166235,166238,166240,166242],{"class":242,"line":250},[240,166236,166237],{"class":257},"student.get(",[240,166239,166226],{"class":443},[240,166241,1230],{"class":257},[240,166243,166244],{"class":246},"# key不存在返回None\n",[19,166246,166247],{},"设置默认值：",[231,166249,166251],{"className":32324,"code":166250,"language":32326,"meta":236,"style":236},"print(student.get(\"address\", \"未知\"))\n",[23,166252,166253],{"__ignoreMap":236},[240,166254,166255,166257,166259,166261,166263,166266],{"class":242,"line":243},[240,166256,32361],{"class":264},[240,166258,166208],{"class":257},[240,166260,166226],{"class":443},[240,166262,1277],{"class":257},[240,166264,166265],{"class":443},"\"未知\"",[240,166267,32443],{"class":257},[19,166269,166270],{},"新增和修改：",[231,166272,166274],{"className":32324,"code":166273,"language":32326,"meta":236,"style":236},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[23,166275,166276,166289],{"__ignoreMap":236},[240,166277,166278,166280,166282,166284,166286],{"class":242,"line":243},[240,166279,154484],{"class":257},[240,166281,71047],{"class":443},[240,166283,6395],{"class":257},[240,166285,440],{"class":288},[240,166287,166288],{"class":264}," 19\n",[240,166290,166291,166293,166295,166297,166299],{"class":242,"line":250},[240,166292,154484],{"class":257},[240,166294,166226],{"class":443},[240,166296,6395],{"class":257},[240,166298,440],{"class":288},[240,166300,166301],{"class":443}," \"北京\"\n",[19,166303,166304],{},"删除：",[231,166306,166308],{"className":32324,"code":166307,"language":32326,"meta":236,"style":236},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[23,166309,166310,166323,166333],{"__ignoreMap":236},[240,166311,166312,166314,166316,166319,166321],{"class":242,"line":243},[240,166313,156983],{"class":257},[240,166315,440],{"class":288},[240,166317,166318],{"class":257}," student.pop(",[240,166320,153097],{"class":443},[240,166322,2129],{"class":257},[240,166324,166325,166327,166329,166331],{"class":242,"line":250},[240,166326,165008],{"class":288},[240,166328,153774],{"class":257},[240,166330,71047],{"class":443},[240,166332,35192],{"class":257},[240,166334,166335],{"class":242,"line":261},[240,166336,166337],{"class":257},"student.clear()\n",[14,166339,166341],{"id":166340},"_611-字典遍历","6.11 字典遍历",[19,166343,166344],{},"遍历 key：",[231,166346,166348],{"className":32324,"code":166347,"language":32326,"meta":236,"style":236},"for key in student:\n    print(key, student[key])\n",[23,166349,166350,166362],{"__ignoreMap":236},[240,166351,166352,166354,166357,166359],{"class":242,"line":243},[240,166353,4977],{"class":288},[240,166355,166356],{"class":257}," key ",[240,166358,27989],{"class":288},[240,166360,166361],{"class":257}," student:\n",[240,166363,166364,166366],{"class":242,"line":250},[240,166365,33245],{"class":264},[240,166367,166368],{"class":257},"(key, student[key])\n",[19,166370,166371],{},"遍历 value：",[231,166373,166375],{"className":32324,"code":166374,"language":32326,"meta":236,"style":236},"for value in student.values():\n    print(value)\n",[23,166376,166377,166389],{"__ignoreMap":236},[240,166378,166379,166381,166384,166386],{"class":242,"line":243},[240,166380,4977],{"class":288},[240,166382,166383],{"class":257}," value ",[240,166385,27989],{"class":288},[240,166387,166388],{"class":257}," student.values():\n",[240,166390,166391,166393],{"class":242,"line":250},[240,166392,33245],{"class":264},[240,166394,166395],{"class":257},"(value)\n",[19,166397,166398],{},"遍历 key 和 value：",[231,166400,166402],{"className":32324,"code":166401,"language":32326,"meta":236,"style":236},"for key, value in student.items():\n    print(key, value)\n",[23,166403,166404,166416],{"__ignoreMap":236},[240,166405,166406,166408,166411,166413],{"class":242,"line":243},[240,166407,4977],{"class":288},[240,166409,166410],{"class":257}," key, value ",[240,166412,27989],{"class":288},[240,166414,166415],{"class":257}," student.items():\n",[240,166417,166418,166420],{"class":242,"line":250},[240,166419,33245],{"class":264},[240,166421,166422],{"class":257},"(key, value)\n",[14,166424,166426],{"id":166425},"_612-嵌套容器","6.12 嵌套容器",[19,166428,166429],{},"列表中保存字典，是项目中最常见的结构之一。",[231,166431,166433],{"className":32324,"code":166432,"language":32326,"meta":236,"style":236},"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",[23,166434,166435,166443,166471,166499,166527,166531,166535,166545],{"__ignoreMap":236},[240,166436,166437,166439,166441],{"class":242,"line":243},[240,166438,161341],{"class":257},[240,166440,440],{"class":288},[240,166442,57380],{"class":257},[240,166444,166445,166447,166449,166451,166453,166455,166457,166459,166461,166463,166465,166467,166469],{"class":242,"line":250},[240,166446,150010],{"class":257},[240,166448,64602],{"class":443},[240,166450,268],{"class":257},[240,166452,151513],{"class":443},[240,166454,1277],{"class":257},[240,166456,71047],{"class":443},[240,166458,268],{"class":257},[240,166460,2748],{"class":264},[240,166462,1277],{"class":257},[240,166464,153097],{"class":443},[240,166466,268],{"class":257},[240,166468,3082],{"class":264},[240,166470,6882],{"class":257},[240,166472,166473,166475,166477,166479,166481,166483,166485,166487,166489,166491,166493,166495,166497],{"class":242,"line":261},[240,166474,150010],{"class":257},[240,166476,64602],{"class":443},[240,166478,268],{"class":257},[240,166480,152561],{"class":443},[240,166482,1277],{"class":257},[240,166484,71047],{"class":443},[240,166486,268],{"class":257},[240,166488,2723],{"class":264},[240,166490,1277],{"class":257},[240,166492,153097],{"class":443},[240,166494,268],{"class":257},[240,166496,2908],{"class":264},[240,166498,6882],{"class":257},[240,166500,166501,166503,166505,166507,166509,166511,166513,166515,166517,166519,166521,166523,166525],{"class":242,"line":277},[240,166502,150010],{"class":257},[240,166504,64602],{"class":443},[240,166506,268],{"class":257},[240,166508,161356],{"class":443},[240,166510,1277],{"class":257},[240,166512,71047],{"class":443},[240,166514,268],{"class":257},[240,166516,2773],{"class":264},[240,166518,1277],{"class":257},[240,166520,153097],{"class":443},[240,166522,268],{"class":257},[240,166524,2506],{"class":264},[240,166526,6882],{"class":257},[240,166528,166529],{"class":242,"line":294},[240,166530,35192],{"class":257},[240,166532,166533],{"class":242,"line":309},[240,166534,4353],{"emptyLinePlaceholder":2051},[240,166536,166537,166539,166541,166543],{"class":242,"line":529},[240,166538,4977],{"class":288},[240,166540,153762],{"class":257},[240,166542,27989],{"class":288},[240,166544,153767],{"class":257},[240,166546,166547,166549,166551,166553,166556,166558],{"class":242,"line":549},[240,166548,33245],{"class":264},[240,166550,166197],{"class":257},[240,166552,64602],{"class":443},[240,166554,166555],{"class":257},"], student[",[240,166557,153097],{"class":443},[240,166559,6609],{"class":257},[19,166561,166562],{},"统计平均分：",[231,166564,166566],{"className":32324,"code":166565,"language":32326,"meta":236,"style":236},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[23,166567,166568,166576,166580,166590,166602,166606,166621],{"__ignoreMap":236},[240,166569,166570,166572,166574],{"class":242,"line":243},[240,166571,158885],{"class":257},[240,166573,440],{"class":288},[240,166575,49279],{"class":264},[240,166577,166578],{"class":242,"line":250},[240,166579,4353],{"emptyLinePlaceholder":2051},[240,166581,166582,166584,166586,166588],{"class":242,"line":261},[240,166583,4977],{"class":288},[240,166585,153762],{"class":257},[240,166587,27989],{"class":288},[240,166589,153767],{"class":257},[240,166591,166592,166594,166596,166598,166600],{"class":242,"line":277},[240,166593,160932],{"class":257},[240,166595,11428],{"class":288},[240,166597,153774],{"class":257},[240,166599,153097],{"class":443},[240,166601,35192],{"class":257},[240,166603,166604],{"class":242,"line":294},[240,166605,4353],{"emptyLinePlaceholder":2051},[240,166607,166608,166610,166612,166614,166616,166618],{"class":242,"line":309},[240,166609,165399],{"class":257},[240,166611,440],{"class":288},[240,166613,165404],{"class":257},[240,166615,2683],{"class":288},[240,166617,9282],{"class":264},[240,166619,166620],{"class":257},"(students)\n",[240,166622,166623,166625,166627,166629,166631,166633,166635,166637,166639,166641],{"class":242,"line":529},[240,166624,32361],{"class":264},[240,166626,789],{"class":257},[240,166628,2172],{"class":288},[240,166630,165422],{"class":443},[240,166632,2991],{"class":264},[240,166634,165427],{"class":257},[240,166636,158784],{"class":288},[240,166638,3040],{"class":264},[240,166640,2355],{"class":443},[240,166642,2129],{"class":257},[19,166644,166645],{},"查找学生：",[231,166647,166649],{"className":32324,"code":166648,"language":32326,"meta":236,"style":236},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[23,166650,166651,166666,166670,166680,166694,166700,166704,166710],{"__ignoreMap":236},[240,166652,166653,166655,166657,166659,166661,166664],{"class":242,"line":243},[240,166654,113488],{"class":257},[240,166656,440],{"class":288},[240,166658,62536],{"class":264},[240,166660,789],{"class":257},[240,166662,166663],{"class":443},"\"请输入学生姓名:\"",[240,166665,2129],{"class":257},[240,166667,166668],{"class":242,"line":250},[240,166669,4353],{"emptyLinePlaceholder":2051},[240,166671,166672,166674,166676,166678],{"class":242,"line":261},[240,166673,4977],{"class":288},[240,166675,153762],{"class":257},[240,166677,27989],{"class":288},[240,166679,153767],{"class":257},[240,166681,166682,166684,166686,166688,166690,166692],{"class":242,"line":277},[240,166683,5053],{"class":288},[240,166685,153774],{"class":257},[240,166687,64602],{"class":443},[240,166689,6395],{"class":257},[240,166691,4901],{"class":288},[240,166693,162057],{"class":257},[240,166695,166696,166698],{"class":242,"line":294},[240,166697,34397],{"class":264},[240,166699,151667],{"class":257},[240,166701,166702],{"class":242,"line":309},[240,166703,33573],{"class":288},[240,166705,166706,166708],{"class":242,"line":529},[240,166707,3655],{"class":288},[240,166709,5691],{"class":257},[240,166711,166712,166714,166716,166719],{"class":242,"line":549},[240,166713,33245],{"class":264},[240,166715,789],{"class":257},[240,166717,166718],{"class":443},"\"没有找到\"",[240,166720,2129],{"class":257},[14,166722,166724],{"id":166723},"_613-容器通用操作","6.13 容器通用操作",[19,166726,166727],{},"长度：",[231,166729,166731],{"className":32324,"code":166730,"language":32326,"meta":236,"style":236},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[23,166732,166733,166752,166762],{"__ignoreMap":236},[240,166734,166735,166737,166740,166742,166744,166746,166748,166750],{"class":242,"line":243},[240,166736,9309],{"class":264},[240,166738,166739],{"class":257},"([",[240,166741,1643],{"class":264},[240,166743,1277],{"class":257},[240,166745,1668],{"class":264},[240,166747,1277],{"class":257},[240,166749,1692],{"class":264},[240,166751,6609],{"class":257},[240,166753,166754,166756,166758,166760],{"class":242,"line":250},[240,166755,9309],{"class":264},[240,166757,789],{"class":257},[240,166759,157505],{"class":443},[240,166761,2129],{"class":257},[240,166763,166764,166766,166769,166771,166773,166775],{"class":242,"line":261},[240,166765,9309],{"class":264},[240,166767,166768],{"class":257},"({",[240,166770,64602],{"class":443},[240,166772,268],{"class":257},[240,166774,151513],{"class":443},[240,166776,166777],{"class":257},"})\n",[19,166779,166780],{},"最大最小：",[231,166782,166784],{"className":32324,"code":166783,"language":32326,"meta":236,"style":236},"max([1, 2, 3])\nmin([1, 2, 3])\n",[23,166785,166786,166804],{"__ignoreMap":236},[240,166787,166788,166790,166792,166794,166796,166798,166800,166802],{"class":242,"line":243},[240,166789,7966],{"class":264},[240,166791,166739],{"class":257},[240,166793,1643],{"class":264},[240,166795,1277],{"class":257},[240,166797,1668],{"class":264},[240,166799,1277],{"class":257},[240,166801,1692],{"class":264},[240,166803,6609],{"class":257},[240,166805,166806,166809,166811,166813,166815,166817,166819,166821],{"class":242,"line":250},[240,166807,166808],{"class":264},"min",[240,166810,166739],{"class":257},[240,166812,1643],{"class":264},[240,166814,1277],{"class":257},[240,166816,1668],{"class":264},[240,166818,1277],{"class":257},[240,166820,1692],{"class":264},[240,166822,6609],{"class":257},[19,166824,166825],{},"求和：",[231,166827,166829],{"className":32324,"code":166828,"language":32326,"meta":236,"style":236},"sum([1, 2, 3])\n",[23,166830,166831],{"__ignoreMap":236},[240,166832,166833,166836,166838,166840,166842,166844,166846,166848],{"class":242,"line":243},[240,166834,166835],{"class":264},"sum",[240,166837,166739],{"class":257},[240,166839,1643],{"class":264},[240,166841,1277],{"class":257},[240,166843,1668],{"class":264},[240,166845,1277],{"class":257},[240,166847,1692],{"class":264},[240,166849,6609],{"class":257},[19,166851,165096],{},[231,166853,166855],{"className":32324,"code":166854,"language":32326,"meta":236,"style":236},"sorted([3, 1, 2])\n",[23,166856,166857],{"__ignoreMap":236},[240,166858,166859,166862,166864,166866,166868,166870,166872,166874],{"class":242,"line":243},[240,166860,166861],{"class":264},"sorted",[240,166863,166739],{"class":257},[240,166865,1692],{"class":264},[240,166867,1277],{"class":257},[240,166869,1643],{"class":264},[240,166871,1277],{"class":257},[240,166873,1668],{"class":264},[240,166875,6609],{"class":257},[19,166877,166878],{},"类型转换：",[231,166880,166882],{"className":32324,"code":166881,"language":32326,"meta":236,"style":236},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[23,166883,166884,166894,166912],{"__ignoreMap":236},[240,166885,166886,166888,166890,166892],{"class":242,"line":243},[240,166887,155695],{"class":264},[240,166889,789],{"class":257},[240,166891,157505],{"class":443},[240,166893,2129],{"class":257},[240,166895,166896,166898,166900,166902,166904,166906,166908,166910],{"class":242,"line":250},[240,166897,156890],{"class":264},[240,166899,166739],{"class":257},[240,166901,1643],{"class":264},[240,166903,1277],{"class":257},[240,166905,1668],{"class":264},[240,166907,1277],{"class":257},[240,166909,1692],{"class":264},[240,166911,6609],{"class":257},[240,166913,166914,166916,166918,166920,166922,166924,166926,166928,166930,166932],{"class":242,"line":261},[240,166915,156915],{"class":264},[240,166917,166739],{"class":257},[240,166919,1643],{"class":264},[240,166921,1277],{"class":257},[240,166923,1643],{"class":264},[240,166925,1277],{"class":257},[240,166927,1668],{"class":264},[240,166929,1277],{"class":257},[240,166931,1692],{"class":264},[240,166933,6609],{"class":257},[19,166935,166936],{},"成员判断：",[231,166938,166940],{"className":32324,"code":166939,"language":32326,"meta":236,"style":236},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[23,166941,166942,166959,166983],{"__ignoreMap":236},[240,166943,166944,166946,166948,166951,166954,166957],{"class":242,"line":243},[240,166945,32361],{"class":264},[240,166947,789],{"class":257},[240,166949,166950],{"class":443},"\"a\"",[240,166952,166953],{"class":288}," in",[240,166955,166956],{"class":443}," \"abc\"",[240,166958,2129],{"class":257},[240,166960,166961,166963,166965,166967,166969,166971,166973,166975,166977,166979,166981],{"class":242,"line":250},[240,166962,32361],{"class":264},[240,166964,789],{"class":257},[240,166966,1643],{"class":264},[240,166968,166953],{"class":288},[240,166970,54162],{"class":257},[240,166972,1643],{"class":264},[240,166974,1277],{"class":257},[240,166976,1668],{"class":264},[240,166978,1277],{"class":257},[240,166980,1692],{"class":264},[240,166982,6609],{"class":257},[240,166984,166985,166987,166989,166991,166993,166995,166997,166999,167001],{"class":242,"line":261},[240,166986,32361],{"class":264},[240,166988,789],{"class":257},[240,166990,64602],{"class":443},[240,166992,166953],{"class":288},[240,166994,6400],{"class":257},[240,166996,64602],{"class":443},[240,166998,268],{"class":257},[240,167000,151513],{"class":443},[240,167002,166777],{"class":257},[14,167004,167006],{"id":167005},"_614-推导式","6.14 推导式",[19,167008,167009],{},"推导式用于快速生成容器。",[19,167011,167012],{},"列表推导式：",[231,167014,167016],{"className":32324,"code":167015,"language":32326,"meta":236,"style":236},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[23,167017,167018,167045],{"__ignoreMap":236},[240,167019,167020,167022,167024,167027,167029,167031,167033,167035,167037,167039,167041,167043],{"class":242,"line":243},[240,167021,165725],{"class":257},[240,167023,440],{"class":288},[240,167025,167026],{"class":257}," [i ",[240,167028,4977],{"class":288},[240,167030,11389],{"class":257},[240,167032,27989],{"class":288},[240,167034,34389],{"class":264},[240,167036,789],{"class":257},[240,167038,1643],{"class":264},[240,167040,1277],{"class":257},[240,167042,2445],{"class":264},[240,167044,99213],{"class":257},[240,167046,167047,167049],{"class":242,"line":250},[240,167048,32361],{"class":264},[240,167050,165941],{"class":257},[19,167052,167053],{},"带条件：",[231,167055,167057],{"className":32324,"code":167056,"language":32326,"meta":236,"style":236},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[23,167058,167059,167100],{"__ignoreMap":236},[240,167060,167061,167064,167066,167068,167070,167072,167074,167076,167078,167080,167082,167084,167086,167088,167090,167092,167094,167096,167098],{"class":242,"line":243},[240,167062,167063],{"class":257},"even_nums ",[240,167065,440],{"class":288},[240,167067,167026],{"class":257},[240,167069,4977],{"class":288},[240,167071,11389],{"class":257},[240,167073,27989],{"class":288},[240,167075,34389],{"class":264},[240,167077,789],{"class":257},[240,167079,1643],{"class":264},[240,167081,1277],{"class":257},[240,167083,2438],{"class":264},[240,167085,1230],{"class":257},[240,167087,3489],{"class":288},[240,167089,11389],{"class":257},[240,167091,2429],{"class":288},[240,167093,16704],{"class":264},[240,167095,103470],{"class":288},[240,167097,6045],{"class":264},[240,167099,35192],{"class":257},[240,167101,167102,167104],{"class":242,"line":250},[240,167103,32361],{"class":264},[240,167105,167106],{"class":257},"(even_nums)\n",[19,167108,167109],{},"字典推导式：",[231,167111,167113],{"className":32324,"code":167112,"language":32326,"meta":236,"style":236},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[23,167114,167115,167149],{"__ignoreMap":236},[240,167116,167117,167120,167122,167125,167127,167129,167132,167134,167136,167138,167140,167142,167144,167146],{"class":242,"line":243},[240,167118,167119],{"class":257},"squares ",[240,167121,440],{"class":288},[240,167123,167124],{"class":257}," {i: i ",[240,167126,12612],{"class":288},[240,167128,16704],{"class":264},[240,167130,167131],{"class":288}," for",[240,167133,11389],{"class":257},[240,167135,27989],{"class":288},[240,167137,34389],{"class":264},[240,167139,789],{"class":257},[240,167141,1643],{"class":264},[240,167143,1277],{"class":257},[240,167145,2445],{"class":264},[240,167147,167148],{"class":257},")}\n",[240,167150,167151,167153],{"class":242,"line":250},[240,167152,32361],{"class":264},[240,167154,167155],{"class":257},"(squares)\n",[19,167157,167158],{},"集合推导式：",[231,167160,167162],{"className":32324,"code":167161,"language":32326,"meta":236,"style":236},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[23,167163,167164,167185],{"__ignoreMap":236},[240,167165,167166,167169,167171,167174,167176,167178,167180,167183],{"class":242,"line":243},[240,167167,167168],{"class":257},"chars ",[240,167170,440],{"class":288},[240,167172,167173],{"class":257}," {ch ",[240,167175,4977],{"class":288},[240,167177,161317],{"class":257},[240,167179,27989],{"class":288},[240,167181,167182],{"class":443}," \"hello\"",[240,167184,312],{"class":257},[240,167186,167187,167189],{"class":242,"line":250},[240,167188,32361],{"class":264},[240,167190,167191],{"class":257},"(chars)\n",[19,167193,167194],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[14,167196,167198],{"id":167197},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[231,167200,167202],{"className":32324,"code":167201,"language":32326,"meta":236,"style":236},"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",[23,167203,167204,167212,167232,167252,167272,167292,167296,167300,167308,167322,167331,167335,167345,167357,167361,167381,167390,167394,167410,167415,167419,167433,167437,167459,167495],{"__ignoreMap":236},[240,167205,167206,167208,167210],{"class":242,"line":243},[240,167207,161341],{"class":257},[240,167209,440],{"class":288},[240,167211,57380],{"class":257},[240,167213,167214,167216,167218,167220,167222,167224,167226,167228,167230],{"class":242,"line":250},[240,167215,150010],{"class":257},[240,167217,64602],{"class":443},[240,167219,268],{"class":257},[240,167221,151513],{"class":443},[240,167223,1277],{"class":257},[240,167225,153097],{"class":443},[240,167227,268],{"class":257},[240,167229,3082],{"class":264},[240,167231,6882],{"class":257},[240,167233,167234,167236,167238,167240,167242,167244,167246,167248,167250],{"class":242,"line":261},[240,167235,150010],{"class":257},[240,167237,64602],{"class":443},[240,167239,268],{"class":257},[240,167241,152561],{"class":443},[240,167243,1277],{"class":257},[240,167245,153097],{"class":443},[240,167247,268],{"class":257},[240,167249,2908],{"class":264},[240,167251,6882],{"class":257},[240,167253,167254,167256,167258,167260,167262,167264,167266,167268,167270],{"class":242,"line":277},[240,167255,150010],{"class":257},[240,167257,64602],{"class":443},[240,167259,268],{"class":257},[240,167261,161356],{"class":443},[240,167263,1277],{"class":257},[240,167265,153097],{"class":443},[240,167267,268],{"class":257},[240,167269,2506],{"class":264},[240,167271,6882],{"class":257},[240,167273,167274,167276,167278,167280,167282,167284,167286,167288,167290],{"class":242,"line":294},[240,167275,150010],{"class":257},[240,167277,64602],{"class":443},[240,167279,268],{"class":257},[240,167281,164935],{"class":443},[240,167283,1277],{"class":257},[240,167285,153097],{"class":443},[240,167287,268],{"class":257},[240,167289,2977],{"class":264},[240,167291,6882],{"class":257},[240,167293,167294],{"class":242,"line":309},[240,167295,35192],{"class":257},[240,167297,167298],{"class":242,"line":529},[240,167299,4353],{"emptyLinePlaceholder":2051},[240,167301,167302,167304,167306],{"class":242,"line":549},[240,167303,158885],{"class":257},[240,167305,440],{"class":288},[240,167307,49279],{"class":264},[240,167309,167310,167313,167315,167318,167320],{"class":242,"line":569},[240,167311,167312],{"class":257},"max_student ",[240,167314,440],{"class":288},[240,167316,167317],{"class":257}," students[",[240,167319,1274],{"class":264},[240,167321,35192],{"class":257},[240,167323,167324,167327,167329],{"class":242,"line":589},[240,167325,167326],{"class":257},"passed ",[240,167328,440],{"class":288},[240,167330,53776],{"class":257},[240,167332,167333],{"class":242,"line":715},[240,167334,4353],{"emptyLinePlaceholder":2051},[240,167336,167337,167339,167341,167343],{"class":242,"line":727},[240,167338,4977],{"class":288},[240,167340,153762],{"class":257},[240,167342,27989],{"class":288},[240,167344,153767],{"class":257},[240,167346,167347,167349,167351,167353,167355],{"class":242,"line":1730},[240,167348,160932],{"class":257},[240,167350,11428],{"class":288},[240,167352,153774],{"class":257},[240,167354,153097],{"class":443},[240,167356,35192],{"class":257},[240,167358,167359],{"class":242,"line":3582},[240,167360,4353],{"emptyLinePlaceholder":2051},[240,167362,167363,167365,167367,167369,167371,167373,167376,167378],{"class":242,"line":3596},[240,167364,5053],{"class":288},[240,167366,153774],{"class":257},[240,167368,153097],{"class":443},[240,167370,6395],{"class":257},[240,167372,3053],{"class":288},[240,167374,167375],{"class":257}," max_student[",[240,167377,153097],{"class":443},[240,167379,167380],{"class":257},"]:\n",[240,167382,167383,167386,167388],{"class":242,"line":3601},[240,167384,167385],{"class":257},"        max_student ",[240,167387,440],{"class":288},[240,167389,153790],{"class":257},[240,167391,167392],{"class":242,"line":3607},[240,167393,4353],{"emptyLinePlaceholder":2051},[240,167395,167396,167398,167400,167402,167404,167406,167408],{"class":242,"line":3628},[240,167397,5053],{"class":288},[240,167399,153774],{"class":257},[240,167401,153097],{"class":443},[240,167403,6395],{"class":257},[240,167405,3664],{"class":288},[240,167407,159462],{"class":264},[240,167409,5691],{"class":257},[240,167411,167412],{"class":242,"line":3633},[240,167413,167414],{"class":257},"        passed.append(student)\n",[240,167416,167417],{"class":242,"line":3647},[240,167418,4353],{"emptyLinePlaceholder":2051},[240,167420,167421,167423,167425,167427,167429,167431],{"class":242,"line":3652},[240,167422,165399],{"class":257},[240,167424,440],{"class":288},[240,167426,165404],{"class":257},[240,167428,2683],{"class":288},[240,167430,9282],{"class":264},[240,167432,166620],{"class":257},[240,167434,167435],{"class":242,"line":3681},[240,167436,4353],{"emptyLinePlaceholder":2051},[240,167438,167439,167441,167443,167445,167447,167449,167451,167453,167455,167457],{"class":242,"line":3686},[240,167440,32361],{"class":264},[240,167442,789],{"class":257},[240,167444,2172],{"class":288},[240,167446,165422],{"class":443},[240,167448,2991],{"class":264},[240,167450,165427],{"class":257},[240,167452,158784],{"class":288},[240,167454,3040],{"class":264},[240,167456,2355],{"class":443},[240,167458,2129],{"class":257},[240,167460,167461,167463,167465,167467,167470,167472,167475,167477,167479,167481,167483,167485,167487,167489,167491,167493],{"class":242,"line":3703},[240,167462,32361],{"class":264},[240,167464,789],{"class":257},[240,167466,2172],{"class":288},[240,167468,167469],{"class":443},"\"最高分学生:",[240,167471,2991],{"class":264},[240,167473,167474],{"class":257},"max_student[",[240,167476,154507],{"class":443},[240,167478,3034],{"class":257},[240,167480,3040],{"class":264},[240,167482,6400],{"class":264},[240,167484,167474],{"class":257},[240,167486,154545],{"class":443},[240,167488,3034],{"class":257},[240,167490,3040],{"class":264},[240,167492,2355],{"class":443},[240,167494,2129],{"class":257},[240,167496,167497,167499,167501,167503,167506,167509,167512,167514,167516],{"class":242,"line":3708},[240,167498,32361],{"class":264},[240,167500,789],{"class":257},[240,167502,2172],{"class":288},[240,167504,167505],{"class":443},"\"及格人数:",[240,167507,167508],{"class":264},"{len",[240,167510,167511],{"class":257},"(passed)",[240,167513,3040],{"class":264},[240,167515,2355],{"class":443},[240,167517,2129],{"class":257},[14,167519,167521],{"id":167520},"_616-易错点","6.16 易错点",[1826,167523,167524,167527,167530,167533,167539,167548],{},[1829,167525,167526],{},"列表可变，元组和字符串不可变。",[1829,167528,167529],{},"切片结束位置不包含。",[1829,167531,167532],{},"字典通过 key 取值，不是通过索引。",[1829,167534,167535,167536,30331],{},"空集合要用 ",[23,167537,167538],{},"set()",[1829,167540,106276,167541,167544,167545,30331],{},[23,167542,167543],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[23,167546,167547],{},"get()",[1829,167549,167550],{},"嵌套容器要先看清楚每一层是什么类型。",[14,167552,167554],{"id":167553},"_617-本章练习","6.17 本章练习",[1826,167556,167557,167560,167563,167566,167569],{},[1829,167558,167559],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[1829,167561,167562],{},"输入一句话，统计每个字符出现次数。",[1829,167564,167565],{},"使用集合去除列表中的重复元素。",[1829,167567,167568],{},"使用字典保存一个学生的信息，并实现修改成绩。",[1829,167570,167571],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[2019,167573,167574],{},"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":236,"searchDepth":250,"depth":250,"links":167576},[167577,167578,167579,167580,167581,167582,167583,167584,167585,167586,167587,167588,167589,167590,167591,167592,167593],{"id":164557,"depth":250,"text":164558},{"id":164674,"depth":250,"text":164675},{"id":164764,"depth":250,"text":164765},{"id":164888,"depth":250,"text":164889},{"id":165251,"depth":250,"text":165252},{"id":165438,"depth":250,"text":165439},{"id":165557,"depth":250,"text":165558},{"id":165699,"depth":250,"text":165700},{"id":165886,"depth":250,"text":165887},{"id":166130,"depth":250,"text":166131},{"id":166340,"depth":250,"text":166341},{"id":166425,"depth":250,"text":166426},{"id":166723,"depth":250,"text":166724},{"id":167005,"depth":250,"text":167006},{"id":167197,"depth":250,"text":167198},{"id":167520,"depth":250,"text":167521},{"id":167553,"depth":250,"text":167554},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":164549,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":167600,"title":167601,"body":167602,"description":2048,"extension":2049,"meta":169774,"navigation":2051,"path":169775,"seo":169776,"stem":169777,"__hash__":169778},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":167603,"toc":169749},[167604,167607,167611,167614,167694,167697,167718,167721,167725,167728,167790,167793,167810,167814,167817,167862,167864,167872,167876,167879,167961,167964,167967,167992,167995,168018,168022,168025,168027,168089,168092,168094,168145,168149,168153,168159,168264,168268,168274,168345,168349,168352,168420,168423,168503,168507,168513,168549,168552,168555,168665,168671,168675,168678,168750,168753,168757,168761,168766,168828,168832,168837,168905,168909,168914,169030,169034,169037,169117,169120,169124,169127,169231,169233,169248,169251,169255,169393,169401,169405,169407,169418,169420,169678,169682,169714,169718,169746],[10,167605,167601],{"id":167606},"_7-函数进阶",[14,167608,167610],{"id":167609},"_71-多返回值","7.1 多返回值",[19,167612,167613],{},"Python 函数可以返回多个值，本质上返回的是元组。",[231,167615,167617],{"className":32324,"code":167616,"language":32326,"meta":236,"style":236},"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",[23,167618,167619,167628,167636,167644,167653,167660,167664,167668,167677,167683],{"__ignoreMap":236},[240,167620,167621,167623,167626],{"class":242,"line":243},[240,167622,33893],{"class":288},[240,167624,167625],{"class":436}," get_info",[240,167627,33899],{"class":257},[240,167629,167630,167632,167634],{"class":242,"line":250},[240,167631,153995],{"class":257},[240,167633,440],{"class":288},[240,167635,150978],{"class":443},[240,167637,167638,167640,167642],{"class":242,"line":261},[240,167639,154011],{"class":257},[240,167641,440],{"class":288},[240,167643,148176],{"class":264},[240,167645,167646,167648,167650],{"class":242,"line":277},[240,167647,154026],{"class":257},[240,167649,440],{"class":288},[240,167651,167652],{"class":264}," 95\n",[240,167654,167655,167657],{"class":242,"line":294},[240,167656,6042],{"class":288},[240,167658,167659],{"class":257}," name, age, score\n",[240,167661,167662],{"class":242,"line":309},[240,167663,4353],{"emptyLinePlaceholder":2051},[240,167665,167666],{"class":242,"line":529},[240,167667,4353],{"emptyLinePlaceholder":2051},[240,167669,167670,167672,167674],{"class":242,"line":549},[240,167671,162931],{"class":257},[240,167673,440],{"class":288},[240,167675,167676],{"class":257}," get_info()\n",[240,167678,167679,167681],{"class":242,"line":569},[240,167680,32361],{"class":264},[240,167682,78500],{"class":257},[240,167684,167685,167687,167689,167691],{"class":242,"line":589},[240,167686,32361],{"class":264},[240,167688,789],{"class":257},[240,167690,105017],{"class":264},[240,167692,167693],{"class":257},"(result))\n",[19,167695,167696],{},"可以直接解包：",[231,167698,167700],{"className":32324,"code":167699,"language":32326,"meta":236,"style":236},"name, age, score = get_info()\nprint(name, age, score)\n",[23,167701,167702,167711],{"__ignoreMap":236},[240,167703,167704,167707,167709],{"class":242,"line":243},[240,167705,167706],{"class":257},"name, age, score ",[240,167708,440],{"class":288},[240,167710,167676],{"class":257},[240,167712,167713,167715],{"class":242,"line":250},[240,167714,32361],{"class":264},[240,167716,167717],{"class":257},"(name, age, score)\n",[19,167719,167720],{},"返回多个值适合函数需要同时给出多个结果时使用。",[14,167722,167724],{"id":167723},"_72-位置参数","7.2 位置参数",[19,167726,167727],{},"位置参数按顺序传递。",[231,167729,167731],{"className":32324,"code":167730,"language":32326,"meta":236,"style":236},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[23,167732,167733,167741,167769,167773,167777],{"__ignoreMap":236},[240,167734,167735,167737,167739],{"class":242,"line":243},[240,167736,33893],{"class":288},[240,167738,150997],{"class":436},[240,167740,151000],{"class":257},[240,167742,167743,167745,167747,167749,167751,167753,167755,167757,167759,167761,167763,167765,167767],{"class":242,"line":250},[240,167744,33245],{"class":264},[240,167746,789],{"class":257},[240,167748,2172],{"class":288},[240,167750,151011],{"class":443},[240,167752,2991],{"class":264},[240,167754,81724],{"class":257},[240,167756,3040],{"class":264},[240,167758,151020],{"class":443},[240,167760,2991],{"class":264},[240,167762,72144],{"class":257},[240,167764,3040],{"class":264},[240,167766,151029],{"class":443},[240,167768,2129],{"class":257},[240,167770,167771],{"class":242,"line":261},[240,167772,4353],{"emptyLinePlaceholder":2051},[240,167774,167775],{"class":242,"line":277},[240,167776,4353],{"emptyLinePlaceholder":2051},[240,167778,167779,167782,167784,167786,167788],{"class":242,"line":294},[240,167780,167781],{"class":257},"introduce(",[240,167783,151513],{"class":443},[240,167785,1277],{"class":257},[240,167787,2748],{"class":264},[240,167789,2129],{"class":257},[19,167791,167792],{},"顺序错了就会得到错误含义：",[231,167794,167796],{"className":32324,"code":167795,"language":32326,"meta":236,"style":236},"introduce(18, \"小明\")\n",[23,167797,167798],{"__ignoreMap":236},[240,167799,167800,167802,167804,167806,167808],{"class":242,"line":243},[240,167801,167781],{"class":257},[240,167803,2748],{"class":264},[240,167805,1277],{"class":257},[240,167807,151513],{"class":443},[240,167809,2129],{"class":257},[14,167811,167813],{"id":167812},"_73-关键字参数","7.3 关键字参数",[19,167815,167816],{},"关键字参数按参数名传递。",[231,167818,167820],{"className":32324,"code":167819,"language":32326,"meta":236,"style":236},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[23,167821,167822,167842],{"__ignoreMap":236},[240,167823,167824,167826,167828,167830,167832,167834,167836,167838,167840],{"class":242,"line":243},[240,167825,167781],{"class":257},[240,167827,81724],{"class":792},[240,167829,440],{"class":288},[240,167831,151513],{"class":443},[240,167833,1277],{"class":257},[240,167835,72144],{"class":792},[240,167837,440],{"class":288},[240,167839,2748],{"class":264},[240,167841,2129],{"class":257},[240,167843,167844,167846,167848,167850,167852,167854,167856,167858,167860],{"class":242,"line":250},[240,167845,167781],{"class":257},[240,167847,72144],{"class":792},[240,167849,440],{"class":288},[240,167851,2748],{"class":264},[240,167853,1277],{"class":257},[240,167855,81724],{"class":792},[240,167857,440],{"class":288},[240,167859,151513],{"class":443},[240,167861,2129],{"class":257},[19,167863,119844],{},[1826,167865,167866,167869],{},[1829,167867,167868],{},"顺序不容易错。",[1829,167870,167871],{},"调用时可读性更强。",[14,167873,167875],{"id":167874},"_74-默认参数","7.4 默认参数",[19,167877,167878],{},"默认参数给参数设置默认值。",[231,167880,167882],{"className":32324,"code":167881,"language":32326,"meta":236,"style":236},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[23,167883,167884,167900,167930,167934,167938,167948],{"__ignoreMap":236},[240,167885,167886,167888,167890,167893,167895,167898],{"class":242,"line":243},[240,167887,33893],{"class":288},[240,167889,124003],{"class":436},[240,167891,167892],{"class":257},"(host, port",[240,167894,440],{"class":288},[240,167896,167897],{"class":264},"3306",[240,167899,32732],{"class":257},[240,167901,167902,167904,167906,167908,167911,167913,167915,167917,167919,167921,167924,167926,167928],{"class":242,"line":250},[240,167903,33245],{"class":264},[240,167905,789],{"class":257},[240,167907,2172],{"class":288},[240,167909,167910],{"class":443},"\"连接",[240,167912,2991],{"class":264},[240,167914,29341],{"class":257},[240,167916,3040],{"class":264},[240,167918,2954],{"class":443},[240,167920,2991],{"class":264},[240,167922,167923],{"class":257},"port",[240,167925,3040],{"class":264},[240,167927,2355],{"class":443},[240,167929,2129],{"class":257},[240,167931,167932],{"class":242,"line":261},[240,167933,4353],{"emptyLinePlaceholder":2051},[240,167935,167936],{"class":242,"line":277},[240,167937,4353],{"emptyLinePlaceholder":2051},[240,167939,167940,167943,167946],{"class":242,"line":294},[240,167941,167942],{"class":257},"connect(",[240,167944,167945],{"class":443},"\"localhost\"",[240,167947,2129],{"class":257},[240,167949,167950,167952,167954,167956,167959],{"class":242,"line":309},[240,167951,167942],{"class":257},[240,167953,167945],{"class":443},[240,167955,1277],{"class":257},[240,167957,167958],{"class":264},"6379",[240,167960,2129],{"class":257},[19,167962,167963],{},"注意：默认参数必须放在非默认参数后面。",[19,167965,167966],{},"错误：",[231,167968,167970],{"className":32324,"code":167969,"language":32326,"meta":236,"style":236},"def connect(port=3306, host):\n    pass\n",[23,167971,167972,167988],{"__ignoreMap":236},[240,167973,167974,167976,167978,167981,167983,167985],{"class":242,"line":243},[240,167975,33893],{"class":288},[240,167977,124003],{"class":436},[240,167979,167980],{"class":257},"(port",[240,167982,440],{"class":288},[240,167984,167897],{"class":264},[240,167986,167987],{"class":257},", host):\n",[240,167989,167990],{"class":242,"line":250},[240,167991,151162],{"class":288},[19,167993,167994],{},"正确：",[231,167996,167998],{"className":32324,"code":167997,"language":32326,"meta":236,"style":236},"def connect(host, port=3306):\n    pass\n",[23,167999,168000,168014],{"__ignoreMap":236},[240,168001,168002,168004,168006,168008,168010,168012],{"class":242,"line":243},[240,168003,33893],{"class":288},[240,168005,124003],{"class":436},[240,168007,167892],{"class":257},[240,168009,440],{"class":288},[240,168011,167897],{"class":264},[240,168013,32732],{"class":257},[240,168015,168016],{"class":242,"line":250},[240,168017,151162],{"class":288},[14,168019,168021],{"id":168020},"_75-默认参数的坑","7.5 默认参数的坑",[19,168023,168024],{},"不要使用可变对象作为默认参数。",[19,168026,159248],{},[231,168028,168030],{"className":32324,"code":168029,"language":32326,"meta":236,"style":236},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[23,168031,168032,168047,168052,168059,168063,168067,168078],{"__ignoreMap":236},[240,168033,168034,168036,168039,168042,168044],{"class":242,"line":243},[240,168035,33893],{"class":288},[240,168037,168038],{"class":436}," add_item",[240,168040,168041],{"class":257},"(item, items",[240,168043,440],{"class":288},[240,168045,168046],{"class":257},"[]):\n",[240,168048,168049],{"class":242,"line":250},[240,168050,168051],{"class":257},"    items.append(item)\n",[240,168053,168054,168056],{"class":242,"line":261},[240,168055,6042],{"class":288},[240,168057,168058],{"class":257}," items\n",[240,168060,168061],{"class":242,"line":277},[240,168062,4353],{"emptyLinePlaceholder":2051},[240,168064,168065],{"class":242,"line":294},[240,168066,4353],{"emptyLinePlaceholder":2051},[240,168068,168069,168071,168074,168076],{"class":242,"line":309},[240,168070,32361],{"class":264},[240,168072,168073],{"class":257},"(add_item(",[240,168075,166950],{"class":443},[240,168077,32443],{"class":257},[240,168079,168080,168082,168084,168087],{"class":242,"line":529},[240,168081,32361],{"class":264},[240,168083,168073],{"class":257},[240,168085,168086],{"class":443},"\"b\"",[240,168088,32443],{"class":257},[19,168090,168091],{},"第二次调用会复用第一次的列表。",[19,168093,157513],{},[231,168095,168097],{"className":32324,"code":168096,"language":32326,"meta":236,"style":236},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[23,168098,168099,168113,168126,168135,168139],{"__ignoreMap":236},[240,168100,168101,168103,168105,168107,168109,168111],{"class":242,"line":243},[240,168102,33893],{"class":288},[240,168104,168038],{"class":436},[240,168106,168041],{"class":257},[240,168108,440],{"class":288},[240,168110,97599],{"class":264},[240,168112,32732],{"class":257},[240,168114,168115,168117,168120,168122,168124],{"class":242,"line":250},[240,168116,5053],{"class":288},[240,168118,168119],{"class":257}," items ",[240,168121,40873],{"class":288},[240,168123,40879],{"class":264},[240,168125,5691],{"class":257},[240,168127,168128,168131,168133],{"class":242,"line":261},[240,168129,168130],{"class":257},"        items ",[240,168132,440],{"class":288},[240,168134,53776],{"class":257},[240,168136,168137],{"class":242,"line":277},[240,168138,168051],{"class":257},[240,168140,168141,168143],{"class":242,"line":294},[240,168142,6042],{"class":288},[240,168144,168058],{"class":257},[14,168146,168148],{"id":168147},"_76-不定长参数","7.6 不定长参数",[32,168150,168152],{"id":168151},"_761-args","7.6.1 *args",[19,168154,168155,168158],{},[23,168156,168157],{},"*args"," 接收任意数量的位置参数，得到元组。",[231,168160,168162],{"className":32324,"code":168161,"language":32326,"meta":236,"style":236},"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",[23,168163,168164,168177,168185,168196,168205,168211,168215,168219,168238],{"__ignoreMap":236},[240,168165,168166,168168,168170,168172,168174],{"class":242,"line":243},[240,168167,33893],{"class":288},[240,168169,7161],{"class":436},[240,168171,789],{"class":257},[240,168173,2554],{"class":288},[240,168175,168176],{"class":257},"args):\n",[240,168178,168179,168181,168183],{"class":242,"line":250},[240,168180,160932],{"class":257},[240,168182,440],{"class":288},[240,168184,49279],{"class":264},[240,168186,168187,168189,168191,168193],{"class":242,"line":261},[240,168188,5153],{"class":288},[240,168190,157805],{"class":257},[240,168192,27989],{"class":288},[240,168194,168195],{"class":257}," args:\n",[240,168197,168198,168200,168202],{"class":242,"line":277},[240,168199,161607],{"class":257},[240,168201,11428],{"class":288},[240,168203,168204],{"class":257}," num\n",[240,168206,168207,168209],{"class":242,"line":294},[240,168208,6042],{"class":288},[240,168210,163912],{"class":257},[240,168212,168213],{"class":242,"line":309},[240,168214,4353],{"emptyLinePlaceholder":2051},[240,168216,168217],{"class":242,"line":529},[240,168218,4353],{"emptyLinePlaceholder":2051},[240,168220,168221,168223,168226,168228,168230,168232,168234,168236],{"class":242,"line":549},[240,168222,32361],{"class":264},[240,168224,168225],{"class":257},"(add(",[240,168227,1643],{"class":264},[240,168229,1277],{"class":257},[240,168231,1668],{"class":264},[240,168233,1277],{"class":257},[240,168235,1692],{"class":264},[240,168237,32443],{"class":257},[240,168239,168240,168242,168244,168246,168248,168250,168252,168254,168256,168258,168260,168262],{"class":242,"line":569},[240,168241,32361],{"class":264},[240,168243,168225],{"class":257},[240,168245,1643],{"class":264},[240,168247,1277],{"class":257},[240,168249,1668],{"class":264},[240,168251,1277],{"class":257},[240,168253,1692],{"class":264},[240,168255,1277],{"class":257},[240,168257,1716],{"class":264},[240,168259,1277],{"class":257},[240,168261,1741],{"class":264},[240,168263,32443],{"class":257},[32,168265,168267],{"id":168266},"_762-kwargs","7.6.2 **kwargs",[19,168269,168270,168273],{},[23,168271,168272],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[231,168275,168277],{"className":32324,"code":168276,"language":32326,"meta":236,"style":236},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[23,168278,168279,168292,168303,168309,168313,168317],{"__ignoreMap":236},[240,168280,168281,168283,168285,168287,168289],{"class":242,"line":243},[240,168282,33893],{"class":288},[240,168284,163570],{"class":436},[240,168286,789],{"class":257},[240,168288,12612],{"class":288},[240,168290,168291],{"class":257},"kwargs):\n",[240,168293,168294,168296,168298,168300],{"class":242,"line":250},[240,168295,5153],{"class":288},[240,168297,166410],{"class":257},[240,168299,27989],{"class":288},[240,168301,168302],{"class":257}," kwargs.items():\n",[240,168304,168305,168307],{"class":242,"line":261},[240,168306,34397],{"class":264},[240,168308,166422],{"class":257},[240,168310,168311],{"class":242,"line":277},[240,168312,4353],{"emptyLinePlaceholder":2051},[240,168314,168315],{"class":242,"line":294},[240,168316,4353],{"emptyLinePlaceholder":2051},[240,168318,168319,168321,168323,168325,168327,168329,168331,168333,168335,168337,168339,168341,168343],{"class":242,"line":309},[240,168320,163635],{"class":257},[240,168322,81724],{"class":792},[240,168324,440],{"class":288},[240,168326,151513],{"class":443},[240,168328,1277],{"class":257},[240,168330,72144],{"class":792},[240,168332,440],{"class":288},[240,168334,2748],{"class":264},[240,168336,1277],{"class":257},[240,168338,72195],{"class":792},[240,168340,440],{"class":288},[240,168342,71192],{"class":443},[240,168344,2129],{"class":257},[14,168346,168348],{"id":168347},"_77-参数解包","7.7 参数解包",[19,168350,168351],{},"列表或元组解包为位置参数：",[231,168353,168355],{"className":32324,"code":168354,"language":32326,"meta":236,"style":236},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[23,168356,168357,168366,168381,168385,168389,168409],{"__ignoreMap":236},[240,168358,168359,168361,168363],{"class":242,"line":243},[240,168360,33893],{"class":288},[240,168362,7161],{"class":436},[240,168364,168365],{"class":257},"(a, b, c):\n",[240,168367,168368,168370,168372,168374,168376,168378],{"class":242,"line":250},[240,168369,6042],{"class":288},[240,168371,12820],{"class":257},[240,168373,2580],{"class":288},[240,168375,12833],{"class":257},[240,168377,2580],{"class":288},[240,168379,168380],{"class":257}," c\n",[240,168382,168383],{"class":242,"line":261},[240,168384,4353],{"emptyLinePlaceholder":2051},[240,168386,168387],{"class":242,"line":277},[240,168388,4353],{"emptyLinePlaceholder":2051},[240,168390,168391,168393,168395,168397,168399,168401,168403,168405,168407],{"class":242,"line":294},[240,168392,165725],{"class":257},[240,168394,440],{"class":288},[240,168396,54162],{"class":257},[240,168398,1643],{"class":264},[240,168400,1277],{"class":257},[240,168402,1668],{"class":264},[240,168404,1277],{"class":257},[240,168406,1692],{"class":264},[240,168408,35192],{"class":257},[240,168410,168411,168413,168415,168417],{"class":242,"line":309},[240,168412,32361],{"class":264},[240,168414,168225],{"class":257},[240,168416,2554],{"class":288},[240,168418,168419],{"class":257},"nums))\n",[19,168421,168422],{},"字典解包为关键字参数：",[231,168424,168426],{"className":32324,"code":168425,"language":32326,"meta":236,"style":236},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[23,168427,168428,168436,168462,168466,168470,168494],{"__ignoreMap":236},[240,168429,168430,168432,168434],{"class":242,"line":243},[240,168431,33893],{"class":288},[240,168433,150997],{"class":436},[240,168435,151000],{"class":257},[240,168437,168438,168440,168442,168444,168446,168448,168450,168452,168454,168456,168458,168460],{"class":242,"line":250},[240,168439,33245],{"class":264},[240,168441,789],{"class":257},[240,168443,2172],{"class":288},[240,168445,2355],{"class":443},[240,168447,2991],{"class":264},[240,168449,81724],{"class":257},[240,168451,3040],{"class":264},[240,168453,6400],{"class":264},[240,168455,72144],{"class":257},[240,168457,3040],{"class":264},[240,168459,2355],{"class":443},[240,168461,2129],{"class":257},[240,168463,168464],{"class":242,"line":261},[240,168465,4353],{"emptyLinePlaceholder":2051},[240,168467,168468],{"class":242,"line":277},[240,168469,4353],{"emptyLinePlaceholder":2051},[240,168471,168472,168474,168476,168478,168480,168482,168484,168486,168488,168490,168492],{"class":242,"line":294},[240,168473,118224],{"class":257},[240,168475,440],{"class":288},[240,168477,6400],{"class":257},[240,168479,64602],{"class":443},[240,168481,268],{"class":257},[240,168483,151513],{"class":443},[240,168485,1277],{"class":257},[240,168487,71047],{"class":443},[240,168489,268],{"class":257},[240,168491,2748],{"class":264},[240,168493,312],{"class":257},[240,168495,168496,168498,168500],{"class":242,"line":309},[240,168497,167781],{"class":257},[240,168499,12612],{"class":288},[240,168501,168502],{"class":257},"info)\n",[14,168504,168506],{"id":168505},"_78-匿名函数lambda","7.8 匿名函数lambda",[19,168508,168509,168512],{},[23,168510,168511],{},"lambda"," 用于定义简单匿名函数。",[231,168514,168516],{"className":32324,"code":168515,"language":32326,"meta":236,"style":236},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[23,168517,168518,168535],{"__ignoreMap":236},[240,168519,168520,168523,168525,168528,168531,168533],{"class":242,"line":243},[240,168521,168522],{"class":257},"add ",[240,168524,440],{"class":288},[240,168526,168527],{"class":288}," lambda",[240,168529,168530],{"class":257}," a, b: a ",[240,168532,2580],{"class":288},[240,168534,152729],{"class":257},[240,168536,168537,168539,168541,168543,168545,168547],{"class":242,"line":250},[240,168538,32361],{"class":264},[240,168540,168225],{"class":257},[240,168542,1643],{"class":264},[240,168544,1277],{"class":257},[240,168546,1668],{"class":264},[240,168548,32443],{"class":257},[19,168550,168551],{},"常和排序、过滤等函数一起使用。",[19,168553,168554],{},"按分数排序：",[231,168556,168558],{"className":32324,"code":168557,"language":32326,"meta":236,"style":236},"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",[23,168559,168560,168568,168588,168608,168628,168632,168636,168659],{"__ignoreMap":236},[240,168561,168562,168564,168566],{"class":242,"line":243},[240,168563,161341],{"class":257},[240,168565,440],{"class":288},[240,168567,57380],{"class":257},[240,168569,168570,168572,168574,168576,168578,168580,168582,168584,168586],{"class":242,"line":250},[240,168571,150010],{"class":257},[240,168573,64602],{"class":443},[240,168575,268],{"class":257},[240,168577,151513],{"class":443},[240,168579,1277],{"class":257},[240,168581,153097],{"class":443},[240,168583,268],{"class":257},[240,168585,3082],{"class":264},[240,168587,6882],{"class":257},[240,168589,168590,168592,168594,168596,168598,168600,168602,168604,168606],{"class":242,"line":261},[240,168591,150010],{"class":257},[240,168593,64602],{"class":443},[240,168595,268],{"class":257},[240,168597,152561],{"class":443},[240,168599,1277],{"class":257},[240,168601,153097],{"class":443},[240,168603,268],{"class":257},[240,168605,2908],{"class":264},[240,168607,6882],{"class":257},[240,168609,168610,168612,168614,168616,168618,168620,168622,168624,168626],{"class":242,"line":277},[240,168611,150010],{"class":257},[240,168613,64602],{"class":443},[240,168615,268],{"class":257},[240,168617,161356],{"class":443},[240,168619,1277],{"class":257},[240,168621,153097],{"class":443},[240,168623,268],{"class":257},[240,168625,2506],{"class":264},[240,168627,6882],{"class":257},[240,168629,168630],{"class":242,"line":294},[240,168631,35192],{"class":257},[240,168633,168634],{"class":242,"line":309},[240,168635,4353],{"emptyLinePlaceholder":2051},[240,168637,168638,168641,168643,168645,168647,168649,168651,168653,168655,168657],{"class":242,"line":529},[240,168639,168640],{"class":257},"students.sort(",[240,168642,155571],{"class":792},[240,168644,155574],{"class":288},[240,168646,155577],{"class":257},[240,168648,153097],{"class":443},[240,168650,114112],{"class":257},[240,168652,165153],{"class":792},[240,168654,440],{"class":288},[240,168656,33422],{"class":264},[240,168658,2129],{"class":257},[240,168660,168661,168663],{"class":242,"line":549},[240,168662,32361],{"class":264},[240,168664,166620],{"class":257},[19,168666,168667,168668,168670],{},"如果逻辑复杂，不要硬写 ",[23,168669,168511],{},"，定义普通函数更清晰。",[14,168672,168674],{"id":168673},"_79-函数作为参数","7.9 函数作为参数",[19,168676,168677],{},"函数可以作为参数传给另一个函数。",[231,168679,168681],{"className":32324,"code":168680,"language":32326,"meta":236,"style":236},"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",[23,168682,168683,168691,168701,168705,168709,168719,168726,168730,168734],{"__ignoreMap":236},[240,168684,168685,168687,168689],{"class":242,"line":243},[240,168686,33893],{"class":288},[240,168688,7161],{"class":436},[240,168690,152718],{"class":257},[240,168692,168693,168695,168697,168699],{"class":242,"line":250},[240,168694,6042],{"class":288},[240,168696,12820],{"class":257},[240,168698,2580],{"class":288},[240,168700,152729],{"class":257},[240,168702,168703],{"class":242,"line":261},[240,168704,4353],{"emptyLinePlaceholder":2051},[240,168706,168707],{"class":242,"line":277},[240,168708,4353],{"emptyLinePlaceholder":2051},[240,168710,168711,168713,168716],{"class":242,"line":294},[240,168712,33893],{"class":288},[240,168714,168715],{"class":436}," calculate",[240,168717,168718],{"class":257},"(a, b, func):\n",[240,168720,168721,168723],{"class":242,"line":309},[240,168722,6042],{"class":288},[240,168724,168725],{"class":257}," func(a, b)\n",[240,168727,168728],{"class":242,"line":529},[240,168729,4353],{"emptyLinePlaceholder":2051},[240,168731,168732],{"class":242,"line":549},[240,168733,4353],{"emptyLinePlaceholder":2051},[240,168735,168736,168738,168741,168743,168745,168747],{"class":242,"line":569},[240,168737,32361],{"class":264},[240,168739,168740],{"class":257},"(calculate(",[240,168742,2546],{"class":264},[240,168744,1277],{"class":257},[240,168746,1000],{"class":264},[240,168748,168749],{"class":257},", add))\n",[19,168751,168752],{},"这种思想在排序、回调、框架中经常出现。",[14,168754,168756],{"id":168755},"_710-mapfiltersorted","7.10 map、filter、sorted",[32,168758,168760],{"id":168759},"_7101-map","7.10.1 map",[19,168762,168763,168765],{},[23,168764,75959],{}," 对每个元素执行函数。",[231,168767,168769],{"className":32324,"code":168768,"language":32326,"meta":236,"style":236},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[23,168770,168771,168795,168818],{"__ignoreMap":236},[240,168772,168773,168775,168777,168779,168781,168783,168785,168787,168789,168791,168793],{"class":242,"line":243},[240,168774,165725],{"class":257},[240,168776,440],{"class":288},[240,168778,54162],{"class":257},[240,168780,1643],{"class":264},[240,168782,1277],{"class":257},[240,168784,1668],{"class":264},[240,168786,1277],{"class":257},[240,168788,1692],{"class":264},[240,168790,1277],{"class":257},[240,168792,1716],{"class":264},[240,168794,35192],{"class":257},[240,168796,168797,168799,168801,168804,168806,168808,168811,168813,168815],{"class":242,"line":250},[240,168798,162931],{"class":257},[240,168800,440],{"class":288},[240,168802,168803],{"class":264}," map",[240,168805,789],{"class":257},[240,168807,168511],{"class":288},[240,168809,168810],{"class":257}," x: x ",[240,168812,2554],{"class":288},[240,168814,16704],{"class":264},[240,168816,168817],{"class":257},", nums)\n",[240,168819,168820,168822,168824,168826],{"class":242,"line":261},[240,168821,32361],{"class":264},[240,168823,789],{"class":257},[240,168825,155695],{"class":264},[240,168827,167693],{"class":257},[32,168829,168831],{"id":168830},"_7102-filter","7.10.2 filter",[19,168833,168834,168836],{},[23,168835,81965],{}," 保留满足条件的元素。",[231,168838,168840],{"className":32324,"code":168839,"language":32326,"meta":236,"style":236},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[23,168841,168842,168870,168895],{"__ignoreMap":236},[240,168843,168844,168846,168848,168850,168852,168854,168856,168858,168860,168862,168864,168866,168868],{"class":242,"line":243},[240,168845,165725],{"class":257},[240,168847,440],{"class":288},[240,168849,54162],{"class":257},[240,168851,1643],{"class":264},[240,168853,1277],{"class":257},[240,168855,1668],{"class":264},[240,168857,1277],{"class":257},[240,168859,1692],{"class":264},[240,168861,1277],{"class":257},[240,168863,1716],{"class":264},[240,168865,1277],{"class":257},[240,168867,1741],{"class":264},[240,168869,35192],{"class":257},[240,168871,168872,168874,168876,168879,168881,168883,168885,168887,168889,168891,168893],{"class":242,"line":250},[240,168873,162931],{"class":257},[240,168875,440],{"class":288},[240,168877,168878],{"class":264}," filter",[240,168880,789],{"class":257},[240,168882,168511],{"class":288},[240,168884,168810],{"class":257},[240,168886,2429],{"class":288},[240,168888,16704],{"class":264},[240,168890,103470],{"class":288},[240,168892,6045],{"class":264},[240,168894,168817],{"class":257},[240,168896,168897,168899,168901,168903],{"class":242,"line":261},[240,168898,32361],{"class":264},[240,168900,789],{"class":257},[240,168902,155695],{"class":264},[240,168904,167693],{"class":257},[32,168906,168908],{"id":168907},"_7103-sorted","7.10.3 sorted",[19,168910,168911,168913],{},[23,168912,166861],{}," 返回排序后的新列表。",[231,168915,168917],{"className":32324,"code":168916,"language":32326,"meta":236,"style":236},"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",[23,168918,168919,168927,168947,168967,168987,168991,168995,169024],{"__ignoreMap":236},[240,168920,168921,168923,168925],{"class":242,"line":243},[240,168922,161341],{"class":257},[240,168924,440],{"class":288},[240,168926,57380],{"class":257},[240,168928,168929,168931,168933,168935,168937,168939,168941,168943,168945],{"class":242,"line":250},[240,168930,150010],{"class":257},[240,168932,64602],{"class":443},[240,168934,268],{"class":257},[240,168936,151513],{"class":443},[240,168938,1277],{"class":257},[240,168940,153097],{"class":443},[240,168942,268],{"class":257},[240,168944,3082],{"class":264},[240,168946,6882],{"class":257},[240,168948,168949,168951,168953,168955,168957,168959,168961,168963,168965],{"class":242,"line":261},[240,168950,150010],{"class":257},[240,168952,64602],{"class":443},[240,168954,268],{"class":257},[240,168956,152561],{"class":443},[240,168958,1277],{"class":257},[240,168960,153097],{"class":443},[240,168962,268],{"class":257},[240,168964,2908],{"class":264},[240,168966,6882],{"class":257},[240,168968,168969,168971,168973,168975,168977,168979,168981,168983,168985],{"class":242,"line":277},[240,168970,150010],{"class":257},[240,168972,64602],{"class":443},[240,168974,268],{"class":257},[240,168976,161356],{"class":443},[240,168978,1277],{"class":257},[240,168980,153097],{"class":443},[240,168982,268],{"class":257},[240,168984,2506],{"class":264},[240,168986,6882],{"class":257},[240,168988,168989],{"class":242,"line":294},[240,168990,35192],{"class":257},[240,168992,168993],{"class":242,"line":309},[240,168994,4353],{"emptyLinePlaceholder":2051},[240,168996,168997,168999,169001,169003,169006,169008,169010,169012,169014,169016,169018,169020,169022],{"class":242,"line":529},[240,168998,162931],{"class":257},[240,169000,440],{"class":288},[240,169002,165229],{"class":264},[240,169004,169005],{"class":257},"(students, ",[240,169007,155571],{"class":792},[240,169009,155574],{"class":288},[240,169011,155577],{"class":257},[240,169013,153097],{"class":443},[240,169015,114112],{"class":257},[240,169017,165153],{"class":792},[240,169019,440],{"class":288},[240,169021,33422],{"class":264},[240,169023,2129],{"class":257},[240,169025,169026,169028],{"class":242,"line":549},[240,169027,32361],{"class":264},[240,169029,78500],{"class":257},[14,169031,169033],{"id":169032},"_711-闭包入门","7.11 闭包入门",[19,169035,169036],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[231,169038,169040],{"className":32324,"code":169039,"language":32326,"meta":236,"style":236},"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",[23,169041,169042,169052,169062,169073,169077,169084,169088,169092,169106],{"__ignoreMap":236},[240,169043,169044,169046,169049],{"class":242,"line":243},[240,169045,33893],{"class":288},[240,169047,169048],{"class":436}," outer",[240,169050,169051],{"class":257},"(base):\n",[240,169053,169054,169056,169059],{"class":242,"line":250},[240,169055,32747],{"class":288},[240,169057,169058],{"class":436}," inner",[240,169060,169061],{"class":257},"(num):\n",[240,169063,169064,169066,169069,169071],{"class":242,"line":261},[240,169065,16701],{"class":288},[240,169067,169068],{"class":257}," base ",[240,169070,2580],{"class":288},[240,169072,168204],{"class":257},[240,169074,169075],{"class":242,"line":277},[240,169076,4353],{"emptyLinePlaceholder":2051},[240,169078,169079,169081],{"class":242,"line":294},[240,169080,6042],{"class":288},[240,169082,169083],{"class":257}," inner\n",[240,169085,169086],{"class":242,"line":309},[240,169087,4353],{"emptyLinePlaceholder":2051},[240,169089,169090],{"class":242,"line":529},[240,169091,4353],{"emptyLinePlaceholder":2051},[240,169093,169094,169097,169099,169102,169104],{"class":242,"line":549},[240,169095,169096],{"class":257},"add_10 ",[240,169098,440],{"class":288},[240,169100,169101],{"class":257}," outer(",[240,169103,2546],{"class":264},[240,169105,2129],{"class":257},[240,169107,169108,169110,169113,169115],{"class":242,"line":569},[240,169109,32361],{"class":264},[240,169111,169112],{"class":257},"(add_10(",[240,169114,1741],{"class":264},[240,169116,32443],{"class":257},[19,169118,169119],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[14,169121,169123],{"id":169122},"_712-装饰器入门","7.12 装饰器入门",[19,169125,169126],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[231,169128,169130],{"className":32324,"code":169129,"language":32326,"meta":236,"style":236},"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",[23,169131,169132,169141,169150,169161,169166,169177,169181,169188,169192,169196,169201,169209,169219,169223,169227],{"__ignoreMap":236},[240,169133,169134,169136,169138],{"class":242,"line":243},[240,169135,33893],{"class":288},[240,169137,89104],{"class":436},[240,169139,169140],{"class":257},"(func):\n",[240,169142,169143,169145,169148],{"class":242,"line":250},[240,169144,32747],{"class":288},[240,169146,169147],{"class":436}," wrapper",[240,169149,33899],{"class":257},[240,169151,169152,169154,169156,169159],{"class":242,"line":261},[240,169153,34397],{"class":264},[240,169155,789],{"class":257},[240,169157,169158],{"class":443},"\"函数开始执行\"",[240,169160,2129],{"class":257},[240,169162,169163],{"class":242,"line":277},[240,169164,169165],{"class":257},"        func()\n",[240,169167,169168,169170,169172,169175],{"class":242,"line":294},[240,169169,34397],{"class":264},[240,169171,789],{"class":257},[240,169173,169174],{"class":443},"\"函数执行结束\"",[240,169176,2129],{"class":257},[240,169178,169179],{"class":242,"line":309},[240,169180,4353],{"emptyLinePlaceholder":2051},[240,169182,169183,169185],{"class":242,"line":529},[240,169184,6042],{"class":288},[240,169186,169187],{"class":257}," wrapper\n",[240,169189,169190],{"class":242,"line":549},[240,169191,4353],{"emptyLinePlaceholder":2051},[240,169193,169194],{"class":242,"line":569},[240,169195,4353],{"emptyLinePlaceholder":2051},[240,169197,169198],{"class":242,"line":589},[240,169199,169200],{"class":436},"@log\n",[240,169202,169203,169205,169207],{"class":242,"line":715},[240,169204,33893],{"class":288},[240,169206,162621],{"class":436},[240,169208,33899],{"class":257},[240,169210,169211,169213,169215,169217],{"class":242,"line":727},[240,169212,33245],{"class":264},[240,169214,789],{"class":257},[240,169216,7795],{"class":443},[240,169218,2129],{"class":257},[240,169220,169221],{"class":242,"line":1730},[240,169222,4353],{"emptyLinePlaceholder":2051},[240,169224,169225],{"class":242,"line":3582},[240,169226,4353],{"emptyLinePlaceholder":2051},[240,169228,169229],{"class":242,"line":3596},[240,169230,162656],{"class":257},[19,169232,159899],{},[231,169234,169236],{"className":32324,"code":169235,"language":32326,"meta":236,"style":236},"say_hello = log(say_hello)\n",[23,169237,169238],{"__ignoreMap":236},[240,169239,169240,169243,169245],{"class":242,"line":243},[240,169241,169242],{"class":257},"say_hello ",[240,169244,440],{"class":288},[240,169246,169247],{"class":257}," log(say_hello)\n",[19,169249,169250],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[14,169252,169254],{"id":169253},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[231,169256,169258],{"className":32324,"code":169257,"language":32326,"meta":236,"style":236},"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",[23,169259,169260,169268,169285,169295,169314,169324,169331,169335,169341,169345,169349,169353,169361,169371,169375,169379],{"__ignoreMap":236},[240,169261,169262,169264,169266],{"class":242,"line":243},[240,169263,33893],{"class":288},[240,169265,89104],{"class":436},[240,169267,169140],{"class":257},[240,169269,169270,169272,169274,169276,169278,169281,169283],{"class":242,"line":250},[240,169271,32747],{"class":288},[240,169273,169147],{"class":436},[240,169275,789],{"class":257},[240,169277,2554],{"class":288},[240,169279,169280],{"class":257},"args, ",[240,169282,12612],{"class":288},[240,169284,168291],{"class":257},[240,169286,169287,169289,169291,169293],{"class":242,"line":261},[240,169288,34397],{"class":264},[240,169290,789],{"class":257},[240,169292,169158],{"class":443},[240,169294,2129],{"class":257},[240,169296,169297,169300,169302,169305,169307,169309,169311],{"class":242,"line":277},[240,169298,169299],{"class":257},"        result ",[240,169301,440],{"class":288},[240,169303,169304],{"class":257}," func(",[240,169306,2554],{"class":288},[240,169308,169280],{"class":257},[240,169310,12612],{"class":288},[240,169312,169313],{"class":257},"kwargs)\n",[240,169315,169316,169318,169320,169322],{"class":242,"line":294},[240,169317,34397],{"class":264},[240,169319,789],{"class":257},[240,169321,169174],{"class":443},[240,169323,2129],{"class":257},[240,169325,169326,169328],{"class":242,"line":309},[240,169327,16701],{"class":288},[240,169329,169330],{"class":257}," result\n",[240,169332,169333],{"class":242,"line":529},[240,169334,4353],{"emptyLinePlaceholder":2051},[240,169336,169337,169339],{"class":242,"line":549},[240,169338,6042],{"class":288},[240,169340,169187],{"class":257},[240,169342,169343],{"class":242,"line":569},[240,169344,4353],{"emptyLinePlaceholder":2051},[240,169346,169347],{"class":242,"line":589},[240,169348,4353],{"emptyLinePlaceholder":2051},[240,169350,169351],{"class":242,"line":715},[240,169352,169200],{"class":436},[240,169354,169355,169357,169359],{"class":242,"line":727},[240,169356,33893],{"class":288},[240,169358,7161],{"class":436},[240,169360,152718],{"class":257},[240,169362,169363,169365,169367,169369],{"class":242,"line":1730},[240,169364,6042],{"class":288},[240,169366,12820],{"class":257},[240,169368,2580],{"class":288},[240,169370,152729],{"class":257},[240,169372,169373],{"class":242,"line":3582},[240,169374,4353],{"emptyLinePlaceholder":2051},[240,169376,169377],{"class":242,"line":3596},[240,169378,4353],{"emptyLinePlaceholder":2051},[240,169380,169381,169383,169385,169387,169389,169391],{"class":242,"line":3601},[240,169382,32361],{"class":264},[240,169384,168225],{"class":257},[240,169386,2546],{"class":264},[240,169388,1277],{"class":257},[240,169390,1000],{"class":264},[240,169392,32443],{"class":257},[19,169394,169395,169396,102929,169398,169400],{},"这个写法使用 ",[23,169397,168157],{},[23,169399,168272],{}," 接收原函数的所有参数。",[14,169402,169404],{"id":169403},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[19,169406,125202],{},[1826,169408,169409,169412,169415],{},[1829,169410,169411],{},"给定一组学生数据。",[1829,169413,169414],{},"封装函数，根据传入规则筛选学生。",[1829,169416,169417],{},"筛选及格、优秀、未成年学生。",[19,169419,11986],{},[231,169421,169423],{"className":32324,"code":169422,"language":32326,"meta":236,"style":236},"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",[23,169424,169425,169433,169461,169489,169517,169521,169525,169529,169539,169547,169557,169564,169569,169575,169579,169583,169607,169630,169653,169657,169664,169671],{"__ignoreMap":236},[240,169426,169427,169429,169431],{"class":242,"line":243},[240,169428,161341],{"class":257},[240,169430,440],{"class":288},[240,169432,57380],{"class":257},[240,169434,169435,169437,169439,169441,169443,169445,169447,169449,169451,169453,169455,169457,169459],{"class":242,"line":250},[240,169436,150010],{"class":257},[240,169438,64602],{"class":443},[240,169440,268],{"class":257},[240,169442,151513],{"class":443},[240,169444,1277],{"class":257},[240,169446,71047],{"class":443},[240,169448,268],{"class":257},[240,169450,2748],{"class":264},[240,169452,1277],{"class":257},[240,169454,153097],{"class":443},[240,169456,268],{"class":257},[240,169458,3082],{"class":264},[240,169460,6882],{"class":257},[240,169462,169463,169465,169467,169469,169471,169473,169475,169477,169479,169481,169483,169485,169487],{"class":242,"line":261},[240,169464,150010],{"class":257},[240,169466,64602],{"class":443},[240,169468,268],{"class":257},[240,169470,152561],{"class":443},[240,169472,1277],{"class":257},[240,169474,71047],{"class":443},[240,169476,268],{"class":257},[240,169478,2723],{"class":264},[240,169480,1277],{"class":257},[240,169482,153097],{"class":443},[240,169484,268],{"class":257},[240,169486,2908],{"class":264},[240,169488,6882],{"class":257},[240,169490,169491,169493,169495,169497,169499,169501,169503,169505,169507,169509,169511,169513,169515],{"class":242,"line":277},[240,169492,150010],{"class":257},[240,169494,64602],{"class":443},[240,169496,268],{"class":257},[240,169498,161356],{"class":443},[240,169500,1277],{"class":257},[240,169502,71047],{"class":443},[240,169504,268],{"class":257},[240,169506,2773],{"class":264},[240,169508,1277],{"class":257},[240,169510,153097],{"class":443},[240,169512,268],{"class":257},[240,169514,2977],{"class":264},[240,169516,6882],{"class":257},[240,169518,169519],{"class":242,"line":294},[240,169520,35192],{"class":257},[240,169522,169523],{"class":242,"line":309},[240,169524,4353],{"emptyLinePlaceholder":2051},[240,169526,169527],{"class":242,"line":529},[240,169528,4353],{"emptyLinePlaceholder":2051},[240,169530,169531,169533,169536],{"class":242,"line":549},[240,169532,33893],{"class":288},[240,169534,169535],{"class":436}," filter_students",[240,169537,169538],{"class":257},"(students, condition):\n",[240,169540,169541,169543,169545],{"class":242,"line":569},[240,169542,162848],{"class":257},[240,169544,440],{"class":288},[240,169546,53776],{"class":257},[240,169548,169549,169551,169553,169555],{"class":242,"line":589},[240,169550,5153],{"class":288},[240,169552,153762],{"class":257},[240,169554,27989],{"class":288},[240,169556,153767],{"class":257},[240,169558,169559,169561],{"class":242,"line":715},[240,169560,4450],{"class":288},[240,169562,169563],{"class":257}," condition(student):\n",[240,169565,169566],{"class":242,"line":727},[240,169567,169568],{"class":257},"            result.append(student)\n",[240,169570,169571,169573],{"class":242,"line":1730},[240,169572,6042],{"class":288},[240,169574,169330],{"class":257},[240,169576,169577],{"class":242,"line":3582},[240,169578,4353],{"emptyLinePlaceholder":2051},[240,169580,169581],{"class":242,"line":3596},[240,169582,4353],{"emptyLinePlaceholder":2051},[240,169584,169585,169587,169589,169592,169594,169597,169599,169601,169603,169605],{"class":242,"line":3601},[240,169586,167326],{"class":257},[240,169588,440],{"class":288},[240,169590,169591],{"class":257}," filter_students(students, ",[240,169593,168511],{"class":288},[240,169595,169596],{"class":257}," s: s[",[240,169598,153097],{"class":443},[240,169600,6395],{"class":257},[240,169602,3664],{"class":288},[240,169604,159462],{"class":264},[240,169606,2129],{"class":257},[240,169608,169609,169612,169614,169616,169618,169620,169622,169624,169626,169628],{"class":242,"line":3607},[240,169610,169611],{"class":257},"excellent ",[240,169613,440],{"class":288},[240,169615,169591],{"class":257},[240,169617,168511],{"class":288},[240,169619,169596],{"class":257},[240,169621,153097],{"class":443},[240,169623,6395],{"class":257},[240,169625,3664],{"class":288},[240,169627,159413],{"class":264},[240,169629,2129],{"class":257},[240,169631,169632,169635,169637,169639,169641,169643,169645,169647,169649,169651],{"class":242,"line":3628},[240,169633,169634],{"class":257},"under_age ",[240,169636,440],{"class":288},[240,169638,169591],{"class":257},[240,169640,168511],{"class":288},[240,169642,169596],{"class":257},[240,169644,71047],{"class":443},[240,169646,6395],{"class":257},[240,169648,431],{"class":288},[240,169650,157910],{"class":264},[240,169652,2129],{"class":257},[240,169654,169655],{"class":242,"line":3633},[240,169656,4353],{"emptyLinePlaceholder":2051},[240,169658,169659,169661],{"class":242,"line":3647},[240,169660,32361],{"class":264},[240,169662,169663],{"class":257},"(passed)\n",[240,169665,169666,169668],{"class":242,"line":3652},[240,169667,32361],{"class":264},[240,169669,169670],{"class":257},"(excellent)\n",[240,169672,169673,169675],{"class":242,"line":3681},[240,169674,32361],{"class":264},[240,169676,169677],{"class":257},"(under_age)\n",[14,169679,169681],{"id":169680},"_715-易错点","7.15 易错点",[1826,169683,169684,169687,169695,169700,169711],{},[1829,169685,169686],{},"默认参数不要写可变对象。",[1829,169688,169689,169691,169692,169694],{},[23,169690,168157],{}," 是元组，",[23,169693,168272],{}," 是字典。",[1829,169696,169697,169699],{},[23,169698,168511],{}," 只适合简单表达式。",[1829,169701,169702,102929,169704,169706,169707,169710],{},[23,169703,75959],{},[23,169705,81965],{}," 的结果是迭代器，常用 ",[23,169708,169709],{},"list()"," 转换查看。",[1829,169712,169713],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[14,169715,169717],{"id":169716},"_716-本章练习","7.16 本章练习",[1826,169719,169720,169727,169733,169738,169743],{},[1829,169721,169722,169723,169726],{},"写函数 ",[23,169724,169725],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[1829,169728,169722,169729,169732],{},[23,169730,169731],{},"print_user(**kwargs)","，输出用户所有字段。",[1829,169734,106276,169735,169737],{},[23,169736,168511],{}," 对学生列表按年龄排序。",[1829,169739,106276,169740,169742],{},[23,169741,81965],{}," 找出成绩不及格的学生。",[1829,169744,169745],{},"写一个装饰器，统计函数执行前后的提示信息。",[2019,169747,169748],{},"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":236,"searchDepth":250,"depth":250,"links":169750},[169751,169752,169753,169754,169755,169756,169760,169761,169762,169763,169768,169769,169770,169771,169772,169773],{"id":167609,"depth":250,"text":167610},{"id":167723,"depth":250,"text":167724},{"id":167812,"depth":250,"text":167813},{"id":167874,"depth":250,"text":167875},{"id":168020,"depth":250,"text":168021},{"id":168147,"depth":250,"text":168148,"children":169757},[169758,169759],{"id":168151,"depth":261,"text":168152},{"id":168266,"depth":261,"text":168267},{"id":168347,"depth":250,"text":168348},{"id":168505,"depth":250,"text":168506},{"id":168673,"depth":250,"text":168674},{"id":168755,"depth":250,"text":168756,"children":169764},[169765,169766,169767],{"id":168759,"depth":261,"text":168760},{"id":168830,"depth":261,"text":168831},{"id":168907,"depth":261,"text":168908},{"id":169032,"depth":250,"text":169033},{"id":169122,"depth":250,"text":169123},{"id":169253,"depth":250,"text":169254},{"id":169403,"depth":250,"text":169404},{"id":169680,"depth":250,"text":169681},{"id":169716,"depth":250,"text":169717},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":167601,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":169780,"title":169781,"body":169782,"description":2048,"extension":2049,"meta":172301,"navigation":2051,"path":172302,"seo":172303,"stem":172304,"__hash__":172305},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":169783,"toc":172276},[169784,169787,169791,169794,169797,169828,169832,169836,169839,169866,169870,169873,169924,169927,169942,169945,169980,169984,169986,170010,170013,170073,170077,170081,170084,170141,170144,170164,170168,170171,170234,170238,170241,170297,170304,170328,170332,170335,170398,170402,170407,170458,170461,170465,170470,170537,170540,170622,170626,170631,170682,170685,170689,170692,170695,170703,170706,170752,170755,170801,170805,170811,170855,170858,170904,170907,170947,170950,171011,171015,171018,171108,171111,171253,171256,171323,171327,171330,171333,171474,171477,171555,171558,171734,171738,171740,171751,171753,171952,171956,172200,172204,172238,172242,172273],[10,169785,169781],{"id":169786},"_8-文件操作",[14,169788,169790],{"id":169789},"_81-文件操作的意义","8.1 文件操作的意义",[19,169792,169793],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[19,169795,169796],{},"常见文件类型：",[1826,169798,169799,169805,169811,169817,169823],{},[1829,169800,169801,169804],{},[23,169802,169803],{},".txt","：普通文本。",[1829,169806,169807,169810],{},[23,169808,169809],{},".csv","：表格文本。",[1829,169812,169813,169816],{},[23,169814,169815],{},".json","：结构化数据。",[1829,169818,169819,169822],{},[23,169820,169821],{},".log","：日志文件。",[1829,169824,169825,169827],{},[23,169826,147977],{},"：Python 源代码。",[14,169829,169831],{"id":169830},"_82-路径","8.2 路径",[32,169833,169835],{"id":169834},"_821-相对路径","8.2.1 相对路径",[19,169837,169838],{},"相对当前运行目录：",[231,169840,169842],{"className":32324,"code":169841,"language":32326,"meta":236,"style":236},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[23,169843,169844],{"__ignoreMap":236},[240,169845,169846,169848,169850,169852,169854,169856,169858,169860,169862,169864],{"class":242,"line":243},[240,169847,88828],{"class":264},[240,169849,789],{"class":257},[240,169851,148421],{"class":443},[240,169853,1277],{"class":257},[240,169855,148426],{"class":443},[240,169857,1277],{"class":257},[240,169859,148431],{"class":792},[240,169861,440],{"class":288},[240,169863,148436],{"class":443},[240,169865,2129],{"class":257},[32,169867,169869],{"id":169868},"_822-绝对路径","8.2.2 绝对路径",[19,169871,169872],{},"从根目录或盘符开始：",[231,169874,169876],{"className":32324,"code":169875,"language":32326,"meta":236,"style":236},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[23,169877,169878,169901],{"__ignoreMap":236},[240,169879,169880,169882,169884,169887,169889,169891,169893,169895,169897,169899],{"class":242,"line":243},[240,169881,88828],{"class":264},[240,169883,789],{"class":257},[240,169885,169886],{"class":443},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[240,169888,1277],{"class":257},[240,169890,148426],{"class":443},[240,169892,1277],{"class":257},[240,169894,148431],{"class":792},[240,169896,440],{"class":288},[240,169898,148436],{"class":443},[240,169900,2129],{"class":257},[240,169902,169903,169905,169907,169910,169912,169914,169916,169918,169920,169922],{"class":242,"line":250},[240,169904,88828],{"class":264},[240,169906,789],{"class":257},[240,169908,169909],{"class":443},"\"D:\u002Fdata\u002Fdata.txt\"",[240,169911,1277],{"class":257},[240,169913,148426],{"class":443},[240,169915,1277],{"class":257},[240,169917,148431],{"class":792},[240,169919,440],{"class":288},[240,169921,148436],{"class":443},[240,169923,2129],{"class":257},[19,169925,169926],{},"Windows 路径建议写成：",[231,169928,169930],{"className":32324,"code":169929,"language":32326,"meta":236,"style":236},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[23,169931,169932],{"__ignoreMap":236},[240,169933,169934,169937,169939],{"class":242,"line":243},[240,169935,169936],{"class":257},"path ",[240,169938,440],{"class":288},[240,169940,169941],{"class":443}," \"D:\u002Fdata\u002Fdata.txt\"\n",[19,169943,169944],{},"或原始字符串：",[231,169946,169948],{"className":32324,"code":169947,"language":32326,"meta":236,"style":236},"path = r\"D:\\data\\data.txt\"\n",[23,169949,169950],{"__ignoreMap":236},[240,169951,169952,169954,169956,169958,169960,169963,169966,169969,169971,169973,169975,169978],{"class":242,"line":243},[240,169953,169936],{"class":257},[240,169955,440],{"class":288},[240,169957,19069],{"class":288},[240,169959,2355],{"class":443},[240,169961,169962],{"class":49923},"D:",[240,169964,169965],{"class":264},"\\d",[240,169967,169968],{"class":49923},"ata",[240,169970,169965],{"class":264},[240,169972,169968],{"class":49923},[240,169974,2657],{"class":264},[240,169976,169977],{"class":49923},"txt",[240,169979,27080],{"class":443},[14,169981,169983],{"id":169982},"_83-open函数","8.3 open函数",[19,169985,7133],{},[231,169987,169989],{"className":32324,"code":169988,"language":32326,"meta":236,"style":236},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[23,169990,169991],{"__ignoreMap":236},[240,169992,169993,169995,169997,169999,170002,170004,170006,170008],{"class":242,"line":243},[240,169994,47300],{"class":792},[240,169996,15514],{"class":288},[240,169998,148416],{"class":264},[240,170000,170001],{"class":257},"(文件路径, 打开模式, ",[240,170003,148431],{"class":792},[240,170005,440],{"class":288},[240,170007,148436],{"class":443},[240,170009,2129],{"class":257},[19,170011,170012],{},"常见模式：",[802,170014,170015,170024],{},[805,170016,170017],{},[808,170018,170019,170022],{},[811,170020,170021],{},"模式",[811,170023,1057],{},[819,170025,170026,170035,170044,170053,170063],{},[808,170027,170028,170032],{},[824,170029,170030],{},[23,170031,2768],{},[824,170033,170034],{},"只读，文件不存在会报错",[808,170036,170037,170041],{},[824,170038,170039],{},[23,170040,2892],{},[824,170042,170043],{},"只写，文件不存在会创建，存在会清空",[808,170045,170046,170050],{},[824,170047,170048],{},[23,170049,254],{},[824,170051,170052],{},"追加，文件不存在会创建",[808,170054,170055,170060],{},[824,170056,170057],{},[23,170058,170059],{},"rb",[824,170061,170062],{},"二进制只读",[808,170064,170065,170070],{},[824,170066,170067],{},[23,170068,170069],{},"wb",[824,170071,170072],{},"二进制只写",[14,170074,170076],{"id":170075},"_84-读取文件","8.4 读取文件",[32,170078,170080],{"id":170079},"_841-read","8.4.1 read",[19,170082,170083],{},"一次读取全部内容：",[231,170085,170087],{"className":32324,"code":170086,"language":32326,"meta":236,"style":236},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[23,170088,170089,170115,170127,170134],{"__ignoreMap":236},[240,170090,170091,170093,170095,170097,170099,170101,170103,170105,170107,170109,170111,170113],{"class":242,"line":243},[240,170092,47300],{"class":792},[240,170094,15514],{"class":288},[240,170096,148416],{"class":264},[240,170098,789],{"class":257},[240,170100,148421],{"class":443},[240,170102,1277],{"class":257},[240,170104,148426],{"class":443},[240,170106,1277],{"class":257},[240,170108,148431],{"class":792},[240,170110,440],{"class":288},[240,170112,148436],{"class":443},[240,170114,2129],{"class":257},[240,170116,170117,170120,170122,170124],{"class":242,"line":250},[240,170118,170119],{"class":257},"content ",[240,170121,440],{"class":288},[240,170123,149778],{"class":792},[240,170125,170126],{"class":257},".read()\n",[240,170128,170129,170131],{"class":242,"line":261},[240,170130,32361],{"class":264},[240,170132,170133],{"class":257},"(content)\n",[240,170135,170136,170138],{"class":242,"line":277},[240,170137,47300],{"class":792},[240,170139,170140],{"class":257},".close()\n",[19,170142,170143],{},"可以指定读取字符数：",[231,170145,170147],{"className":32324,"code":170146,"language":32326,"meta":236,"style":236},"content = file.read(10)\n",[23,170148,170149],{"__ignoreMap":236},[240,170150,170151,170153,170155,170157,170160,170162],{"class":242,"line":243},[240,170152,170119],{"class":257},[240,170154,440],{"class":288},[240,170156,149778],{"class":792},[240,170158,170159],{"class":257},".read(",[240,170161,2546],{"class":264},[240,170163,2129],{"class":257},[32,170165,170167],{"id":170166},"_842-readline","8.4.2 readline",[19,170169,170170],{},"一次读取一行：",[231,170172,170174],{"className":32324,"code":170173,"language":32326,"meta":236,"style":236},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[23,170175,170176,170202,170206,170217,170224,170228],{"__ignoreMap":236},[240,170177,170178,170180,170182,170184,170186,170188,170190,170192,170194,170196,170198,170200],{"class":242,"line":243},[240,170179,47300],{"class":792},[240,170181,15514],{"class":288},[240,170183,148416],{"class":264},[240,170185,789],{"class":257},[240,170187,148421],{"class":443},[240,170189,1277],{"class":257},[240,170191,148426],{"class":443},[240,170193,1277],{"class":257},[240,170195,148431],{"class":792},[240,170197,440],{"class":288},[240,170199,148436],{"class":443},[240,170201,2129],{"class":257},[240,170203,170204],{"class":242,"line":250},[240,170205,4353],{"emptyLinePlaceholder":2051},[240,170207,170208,170210,170212,170214],{"class":242,"line":261},[240,170209,148877],{"class":257},[240,170211,440],{"class":288},[240,170213,149778],{"class":792},[240,170215,170216],{"class":257},".readline()\n",[240,170218,170219,170221],{"class":242,"line":277},[240,170220,32361],{"class":264},[240,170222,170223],{"class":257},"(line)\n",[240,170225,170226],{"class":242,"line":294},[240,170227,4353],{"emptyLinePlaceholder":2051},[240,170229,170230,170232],{"class":242,"line":309},[240,170231,47300],{"class":792},[240,170233,170140],{"class":257},[32,170235,170237],{"id":170236},"_843-readlines","8.4.3 readlines",[19,170239,170240],{},"读取所有行，返回列表：",[231,170242,170244],{"className":32324,"code":170243,"language":32326,"meta":236,"style":236},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[23,170245,170246,170272,170284,170291],{"__ignoreMap":236},[240,170247,170248,170250,170252,170254,170256,170258,170260,170262,170264,170266,170268,170270],{"class":242,"line":243},[240,170249,47300],{"class":792},[240,170251,15514],{"class":288},[240,170253,148416],{"class":264},[240,170255,789],{"class":257},[240,170257,148421],{"class":443},[240,170259,1277],{"class":257},[240,170261,148426],{"class":443},[240,170263,1277],{"class":257},[240,170265,148431],{"class":792},[240,170267,440],{"class":288},[240,170269,148436],{"class":443},[240,170271,2129],{"class":257},[240,170273,170274,170277,170279,170281],{"class":242,"line":250},[240,170275,170276],{"class":257},"lines ",[240,170278,440],{"class":288},[240,170280,149778],{"class":792},[240,170282,170283],{"class":257},".readlines()\n",[240,170285,170286,170288],{"class":242,"line":261},[240,170287,32361],{"class":264},[240,170289,170290],{"class":257},"(lines)\n",[240,170292,170293,170295],{"class":242,"line":277},[240,170294,47300],{"class":792},[240,170296,170140],{"class":257},[19,170298,170299,170300,170303],{},"每一行通常带有换行符，可以用 ",[23,170301,170302],{},"strip()"," 去掉：",[231,170305,170307],{"className":32324,"code":170306,"language":32326,"meta":236,"style":236},"for line in lines:\n    print(line.strip())\n",[23,170308,170309,170321],{"__ignoreMap":236},[240,170310,170311,170313,170316,170318],{"class":242,"line":243},[240,170312,4977],{"class":288},[240,170314,170315],{"class":257}," line ",[240,170317,27989],{"class":288},[240,170319,170320],{"class":257}," lines:\n",[240,170322,170323,170325],{"class":242,"line":250},[240,170324,33245],{"class":264},[240,170326,170327],{"class":257},"(line.strip())\n",[32,170329,170331],{"id":170330},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[19,170333,170334],{},"推荐读取大文件时使用：",[231,170336,170338],{"className":32324,"code":170337,"language":32326,"meta":236,"style":236},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[23,170339,170340,170366,170370,170382,170388,170392],{"__ignoreMap":236},[240,170341,170342,170344,170346,170348,170350,170352,170354,170356,170358,170360,170362,170364],{"class":242,"line":243},[240,170343,47300],{"class":792},[240,170345,15514],{"class":288},[240,170347,148416],{"class":264},[240,170349,789],{"class":257},[240,170351,148421],{"class":443},[240,170353,1277],{"class":257},[240,170355,148426],{"class":443},[240,170357,1277],{"class":257},[240,170359,148431],{"class":792},[240,170361,440],{"class":288},[240,170363,148436],{"class":443},[240,170365,2129],{"class":257},[240,170367,170368],{"class":242,"line":250},[240,170369,4353],{"emptyLinePlaceholder":2051},[240,170371,170372,170374,170376,170378,170380],{"class":242,"line":261},[240,170373,4977],{"class":288},[240,170375,170315],{"class":257},[240,170377,27989],{"class":288},[240,170379,149778],{"class":792},[240,170381,5691],{"class":257},[240,170383,170384,170386],{"class":242,"line":277},[240,170385,33245],{"class":264},[240,170387,170327],{"class":257},[240,170389,170390],{"class":242,"line":294},[240,170391,4353],{"emptyLinePlaceholder":2051},[240,170393,170394,170396],{"class":242,"line":309},[240,170395,47300],{"class":792},[240,170397,170140],{"class":257},[14,170399,170401],{"id":170400},"_85-with语句","8.5 with语句",[19,170403,170404,170406],{},[23,170405,109743],{}," 会自动关闭文件，推荐使用。",[231,170408,170410],{"className":32324,"code":170409,"language":32326,"meta":236,"style":236},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[23,170411,170412,170442,170452],{"__ignoreMap":236},[240,170413,170414,170416,170418,170420,170422,170424,170426,170428,170430,170432,170434,170436,170438,170440],{"class":242,"line":243},[240,170415,109743],{"class":288},[240,170417,148416],{"class":264},[240,170419,789],{"class":257},[240,170421,148421],{"class":443},[240,170423,1277],{"class":257},[240,170425,148426],{"class":443},[240,170427,1277],{"class":257},[240,170429,148431],{"class":792},[240,170431,440],{"class":288},[240,170433,148436],{"class":443},[240,170435,1230],{"class":257},[240,170437,33329],{"class":288},[240,170439,149778],{"class":792},[240,170441,5691],{"class":257},[240,170443,170444,170446,170448,170450],{"class":242,"line":250},[240,170445,148448],{"class":257},[240,170447,440],{"class":288},[240,170449,149778],{"class":792},[240,170451,170126],{"class":257},[240,170453,170454,170456],{"class":242,"line":261},[240,170455,33245],{"class":264},[240,170457,170133],{"class":257},[19,170459,170460],{},"等价于打开文件、读取、最后关闭，但更安全。",[14,170462,170464],{"id":170463},"_86-写入文件","8.6 写入文件",[19,170466,170467,170469],{},[23,170468,2892],{}," 模式会清空原文件。",[231,170471,170473],{"className":32324,"code":170472,"language":32326,"meta":236,"style":236},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[23,170474,170475,170505,170522],{"__ignoreMap":236},[240,170476,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495,170497,170499,170501,170503],{"class":242,"line":243},[240,170478,109743],{"class":288},[240,170480,148416],{"class":264},[240,170482,789],{"class":257},[240,170484,148421],{"class":443},[240,170486,1277],{"class":257},[240,170488,153601],{"class":443},[240,170490,1277],{"class":257},[240,170492,148431],{"class":792},[240,170494,440],{"class":288},[240,170496,148436],{"class":443},[240,170498,1230],{"class":257},[240,170500,33329],{"class":288},[240,170502,149778],{"class":792},[240,170504,5691],{"class":257},[240,170506,170507,170510,170513,170516,170518,170520],{"class":242,"line":250},[240,170508,170509],{"class":792},"    file",[240,170511,170512],{"class":257},".write(",[240,170514,170515],{"class":443},"\"hello",[240,170517,158150],{"class":264},[240,170519,2355],{"class":443},[240,170521,2129],{"class":257},[240,170523,170524,170526,170528,170531,170533,170535],{"class":242,"line":261},[240,170525,170509],{"class":792},[240,170527,170512],{"class":257},[240,170529,170530],{"class":443},"\"python",[240,170532,158150],{"class":264},[240,170534,2355],{"class":443},[240,170536,2129],{"class":257},[19,170538,170539],{},"写入多行：",[231,170541,170543],{"className":32324,"code":170542,"language":32326,"meta":236,"style":236},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[23,170544,170545,170580,170584,170615],{"__ignoreMap":236},[240,170546,170547,170549,170551,170553,170556,170558,170560,170562,170565,170567,170569,170571,170574,170576,170578],{"class":242,"line":243},[240,170548,170276],{"class":257},[240,170550,440],{"class":288},[240,170552,54162],{"class":257},[240,170554,170555],{"class":443},"\"小明,18",[240,170557,158150],{"class":264},[240,170559,2355],{"class":443},[240,170561,1277],{"class":257},[240,170563,170564],{"class":443},"\"小红,17",[240,170566,158150],{"class":264},[240,170568,2355],{"class":443},[240,170570,1277],{"class":257},[240,170572,170573],{"class":443},"\"小刚,19",[240,170575,158150],{"class":264},[240,170577,2355],{"class":443},[240,170579,35192],{"class":257},[240,170581,170582],{"class":242,"line":250},[240,170583,4353],{"emptyLinePlaceholder":2051},[240,170585,170586,170588,170590,170592,170595,170597,170599,170601,170603,170605,170607,170609,170611,170613],{"class":242,"line":261},[240,170587,109743],{"class":288},[240,170589,148416],{"class":264},[240,170591,789],{"class":257},[240,170593,170594],{"class":443},"\"students.txt\"",[240,170596,1277],{"class":257},[240,170598,153601],{"class":443},[240,170600,1277],{"class":257},[240,170602,148431],{"class":792},[240,170604,440],{"class":288},[240,170606,148436],{"class":443},[240,170608,1230],{"class":257},[240,170610,33329],{"class":288},[240,170612,149778],{"class":792},[240,170614,5691],{"class":257},[240,170616,170617,170619],{"class":242,"line":277},[240,170618,170509],{"class":792},[240,170620,170621],{"class":257},".writelines(lines)\n",[14,170623,170625],{"id":170624},"_87-追加文件","8.7 追加文件",[19,170627,170628,170630],{},[23,170629,254],{}," 模式不会清空原内容，而是在末尾追加。",[231,170632,170634],{"className":32324,"code":170633,"language":32326,"meta":236,"style":236},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[23,170635,170636,170667],{"__ignoreMap":236},[240,170637,170638,170640,170642,170644,170647,170649,170651,170653,170655,170657,170659,170661,170663,170665],{"class":242,"line":243},[240,170639,109743],{"class":288},[240,170641,148416],{"class":264},[240,170643,789],{"class":257},[240,170645,170646],{"class":443},"\"log.txt\"",[240,170648,1277],{"class":257},[240,170650,166950],{"class":443},[240,170652,1277],{"class":257},[240,170654,148431],{"class":792},[240,170656,440],{"class":288},[240,170658,148436],{"class":443},[240,170660,1230],{"class":257},[240,170662,33329],{"class":288},[240,170664,149778],{"class":792},[240,170666,5691],{"class":257},[240,170668,170669,170671,170673,170676,170678,170680],{"class":242,"line":250},[240,170670,170509],{"class":792},[240,170672,170512],{"class":257},[240,170674,170675],{"class":443},"\"程序启动",[240,170677,158150],{"class":264},[240,170679,2355],{"class":443},[240,170681,2129],{"class":257},[19,170683,170684],{},"日志类文件常用追加模式。",[14,170686,170688],{"id":170687},"_88-文件编码","8.8 文件编码",[19,170690,170691],{},"编码决定文字如何保存为字节。",[19,170693,170694],{},"常见编码：",[1826,170696,170697,170700],{},[1829,170698,170699],{},"UTF-8：推荐。",[1829,170701,170702],{},"GBK：部分 Windows 中文文件常见。",[19,170704,170705],{},"读取文件乱码时，可以尝试：",[231,170707,170709],{"className":32324,"code":170708,"language":32326,"meta":236,"style":236},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[23,170710,170711,170742],{"__ignoreMap":236},[240,170712,170713,170715,170717,170719,170721,170723,170725,170727,170729,170731,170734,170736,170738,170740],{"class":242,"line":243},[240,170714,109743],{"class":288},[240,170716,148416],{"class":264},[240,170718,789],{"class":257},[240,170720,148421],{"class":443},[240,170722,1277],{"class":257},[240,170724,148426],{"class":443},[240,170726,1277],{"class":257},[240,170728,148431],{"class":792},[240,170730,440],{"class":288},[240,170732,170733],{"class":443},"\"gbk\"",[240,170735,1230],{"class":257},[240,170737,33329],{"class":288},[240,170739,149778],{"class":792},[240,170741,5691],{"class":257},[240,170743,170744,170746,170748,170750],{"class":242,"line":250},[240,170745,148448],{"class":257},[240,170747,440],{"class":288},[240,170749,149778],{"class":792},[240,170751,170126],{"class":257},[19,170753,170754],{},"写文件时建议统一 UTF-8：",[231,170756,170758],{"className":32324,"code":170757,"language":32326,"meta":236,"style":236},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[23,170759,170760,170790],{"__ignoreMap":236},[240,170761,170762,170764,170766,170768,170770,170772,170774,170776,170778,170780,170782,170784,170786,170788],{"class":242,"line":243},[240,170763,109743],{"class":288},[240,170765,148416],{"class":264},[240,170767,789],{"class":257},[240,170769,148421],{"class":443},[240,170771,1277],{"class":257},[240,170773,153601],{"class":443},[240,170775,1277],{"class":257},[240,170777,148431],{"class":792},[240,170779,440],{"class":288},[240,170781,148436],{"class":443},[240,170783,1230],{"class":257},[240,170785,33329],{"class":288},[240,170787,149778],{"class":792},[240,170789,5691],{"class":257},[240,170791,170792,170794,170796,170799],{"class":242,"line":250},[240,170793,170509],{"class":792},[240,170795,170512],{"class":257},[240,170797,170798],{"class":443},"\"中文内容\"",[240,170800,2129],{"class":257},[14,170802,170804],{"id":170803},"_89-pathlib","8.9 pathlib",[19,170806,170807,170810],{},[23,170808,170809],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[231,170812,170814],{"className":32324,"code":170813,"language":32326,"meta":236,"style":236},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[23,170815,170816,170826,170830,170848],{"__ignoreMap":236},[240,170817,170818,170820,170822,170824],{"class":242,"line":243},[240,170819,32683],{"class":288},[240,170821,110221],{"class":257},[240,170823,32338],{"class":288},[240,170825,110226],{"class":257},[240,170827,170828],{"class":242,"line":250},[240,170829,4353],{"emptyLinePlaceholder":2051},[240,170831,170832,170834,170836,170838,170841,170843,170845],{"class":242,"line":261},[240,170833,169936],{"class":257},[240,170835,440],{"class":288},[240,170837,110455],{"class":257},[240,170839,170840],{"class":443},"\"data\"",[240,170842,1230],{"class":257},[240,170844,2683],{"class":288},[240,170846,170847],{"class":443}," \"students.txt\"\n",[240,170849,170850,170852],{"class":242,"line":277},[240,170851,32361],{"class":264},[240,170853,170854],{"class":257},"(path)\n",[19,170856,170857],{},"创建目录：",[231,170859,170861],{"className":32324,"code":170860,"language":32326,"meta":236,"style":236},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[23,170862,170863,170873,170877,170890],{"__ignoreMap":236},[240,170864,170865,170867,170869,170871],{"class":242,"line":243},[240,170866,32683],{"class":288},[240,170868,110221],{"class":257},[240,170870,32338],{"class":288},[240,170872,110226],{"class":257},[240,170874,170875],{"class":242,"line":250},[240,170876,4353],{"emptyLinePlaceholder":2051},[240,170878,170879,170882,170884,170886,170888],{"class":242,"line":261},[240,170880,170881],{"class":257},"data_dir ",[240,170883,440],{"class":288},[240,170885,110455],{"class":257},[240,170887,170840],{"class":443},[240,170889,2129],{"class":257},[240,170891,170892,170895,170898,170900,170902],{"class":242,"line":277},[240,170893,170894],{"class":257},"data_dir.mkdir(",[240,170896,170897],{"class":792},"exist_ok",[240,170899,440],{"class":288},[240,170901,33422],{"class":264},[240,170903,2129],{"class":257},[19,170905,170906],{},"判断文件是否存在：",[231,170908,170910],{"className":32324,"code":170909,"language":32326,"meta":236,"style":236},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[23,170911,170912,170925,170929,170936],{"__ignoreMap":236},[240,170913,170914,170916,170918,170920,170923],{"class":242,"line":243},[240,170915,169936],{"class":257},[240,170917,440],{"class":288},[240,170919,110455],{"class":257},[240,170921,170922],{"class":443},"\"data\u002Fstudents.txt\"",[240,170924,2129],{"class":257},[240,170926,170927],{"class":242,"line":250},[240,170928,4353],{"emptyLinePlaceholder":2051},[240,170930,170931,170933],{"class":242,"line":261},[240,170932,3489],{"class":288},[240,170934,170935],{"class":257}," path.exists():\n",[240,170937,170938,170940,170942,170945],{"class":242,"line":277},[240,170939,33245],{"class":264},[240,170941,789],{"class":257},[240,170943,170944],{"class":443},"\"文件存在\"",[240,170946,2129],{"class":257},[19,170948,170949],{},"读写文本：",[231,170951,170953],{"className":32324,"code":170952,"language":32326,"meta":236,"style":236},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[23,170954,170955,170967,170971,170988,171005],{"__ignoreMap":236},[240,170956,170957,170959,170961,170963,170965],{"class":242,"line":243},[240,170958,169936],{"class":257},[240,170960,440],{"class":288},[240,170962,110455],{"class":257},[240,170964,148421],{"class":443},[240,170966,2129],{"class":257},[240,170968,170969],{"class":242,"line":250},[240,170970,4353],{"emptyLinePlaceholder":2051},[240,170972,170973,170976,170978,170980,170982,170984,170986],{"class":242,"line":261},[240,170974,170975],{"class":257},"path.write_text(",[240,170977,147501],{"class":443},[240,170979,1277],{"class":257},[240,170981,148431],{"class":792},[240,170983,440],{"class":288},[240,170985,148436],{"class":443},[240,170987,2129],{"class":257},[240,170989,170990,170992,170994,170997,170999,171001,171003],{"class":242,"line":277},[240,170991,170119],{"class":257},[240,170993,440],{"class":288},[240,170995,170996],{"class":257}," path.read_text(",[240,170998,148431],{"class":792},[240,171000,440],{"class":288},[240,171002,148436],{"class":443},[240,171004,2129],{"class":257},[240,171006,171007,171009],{"class":242,"line":294},[240,171008,32361],{"class":264},[240,171010,170133],{"class":257},[14,171012,171014],{"id":171013},"_810-json文件","8.10 JSON文件",[19,171016,171017],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[231,171019,171021],{"className":32324,"code":171020,"language":32326,"meta":236,"style":236},"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",[23,171022,171023,171029,171033,171041,171051,171061,171069,171073,171077,171102],{"__ignoreMap":236},[240,171024,171025,171027],{"class":242,"line":243},[240,171026,32338],{"class":288},[240,171028,148716],{"class":257},[240,171030,171031],{"class":242,"line":250},[240,171032,4353],{"emptyLinePlaceholder":2051},[240,171034,171035,171037,171039],{"class":242,"line":261},[240,171036,151106],{"class":257},[240,171038,440],{"class":288},[240,171040,258],{"class":257},[240,171042,171043,171045,171047,171049],{"class":242,"line":277},[240,171044,148645],{"class":443},[240,171046,268],{"class":257},[240,171048,151513],{"class":443},[240,171050,33412],{"class":257},[240,171052,171053,171055,171057,171059],{"class":242,"line":294},[240,171054,166162],{"class":443},[240,171056,268],{"class":257},[240,171058,2748],{"class":264},[240,171060,33412],{"class":257},[240,171062,171063,171065,171067],{"class":242,"line":309},[240,171064,166173],{"class":443},[240,171066,268],{"class":257},[240,171068,166178],{"class":264},[240,171070,171071],{"class":242,"line":529},[240,171072,312],{"class":257},[240,171074,171075],{"class":242,"line":549},[240,171076,4353],{"emptyLinePlaceholder":2051},[240,171078,171079,171081,171083,171086,171088,171090,171092,171094,171096,171098,171100],{"class":242,"line":569},[240,171080,158069],{"class":257},[240,171082,440],{"class":288},[240,171084,171085],{"class":257}," json.dumps(student, ",[240,171087,148762],{"class":792},[240,171089,440],{"class":288},[240,171091,35933],{"class":264},[240,171093,1277],{"class":257},[240,171095,153637],{"class":792},[240,171097,440],{"class":288},[240,171099,1668],{"class":264},[240,171101,2129],{"class":257},[240,171103,171104,171106],{"class":242,"line":589},[240,171105,32361],{"class":264},[240,171107,165696],{"class":257},[19,171109,171110],{},"写入 JSON 文件：",[231,171112,171114],{"className":32324,"code":171113,"language":32326,"meta":236,"style":236},"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",[23,171115,171116,171122,171126,171134,171162,171190,171194,171198,171228],{"__ignoreMap":236},[240,171117,171118,171120],{"class":242,"line":243},[240,171119,32338],{"class":288},[240,171121,148716],{"class":257},[240,171123,171124],{"class":242,"line":250},[240,171125,4353],{"emptyLinePlaceholder":2051},[240,171127,171128,171130,171132],{"class":242,"line":261},[240,171129,161341],{"class":257},[240,171131,440],{"class":288},[240,171133,57380],{"class":257},[240,171135,171136,171138,171140,171142,171144,171146,171148,171150,171152,171154,171156,171158,171160],{"class":242,"line":277},[240,171137,150010],{"class":257},[240,171139,64602],{"class":443},[240,171141,268],{"class":257},[240,171143,151513],{"class":443},[240,171145,1277],{"class":257},[240,171147,71047],{"class":443},[240,171149,268],{"class":257},[240,171151,2748],{"class":264},[240,171153,1277],{"class":257},[240,171155,153097],{"class":443},[240,171157,268],{"class":257},[240,171159,3082],{"class":264},[240,171161,6882],{"class":257},[240,171163,171164,171166,171168,171170,171172,171174,171176,171178,171180,171182,171184,171186,171188],{"class":242,"line":294},[240,171165,150010],{"class":257},[240,171167,64602],{"class":443},[240,171169,268],{"class":257},[240,171171,152561],{"class":443},[240,171173,1277],{"class":257},[240,171175,71047],{"class":443},[240,171177,268],{"class":257},[240,171179,2723],{"class":264},[240,171181,1277],{"class":257},[240,171183,153097],{"class":443},[240,171185,268],{"class":257},[240,171187,2908],{"class":264},[240,171189,6882],{"class":257},[240,171191,171192],{"class":242,"line":309},[240,171193,35192],{"class":257},[240,171195,171196],{"class":242,"line":529},[240,171197,4353],{"emptyLinePlaceholder":2051},[240,171199,171200,171202,171204,171206,171208,171210,171212,171214,171216,171218,171220,171222,171224,171226],{"class":242,"line":549},[240,171201,109743],{"class":288},[240,171203,148416],{"class":264},[240,171205,789],{"class":257},[240,171207,153456],{"class":443},[240,171209,1277],{"class":257},[240,171211,153601],{"class":443},[240,171213,1277],{"class":257},[240,171215,148431],{"class":792},[240,171217,440],{"class":288},[240,171219,148436],{"class":443},[240,171221,1230],{"class":257},[240,171223,33329],{"class":288},[240,171225,149778],{"class":792},[240,171227,5691],{"class":257},[240,171229,171230,171233,171235,171237,171239,171241,171243,171245,171247,171249,171251],{"class":242,"line":569},[240,171231,171232],{"class":257},"    json.dump(students, ",[240,171234,47300],{"class":792},[240,171236,1277],{"class":257},[240,171238,148762],{"class":792},[240,171240,440],{"class":288},[240,171242,35933],{"class":264},[240,171244,1277],{"class":257},[240,171246,153637],{"class":792},[240,171248,440],{"class":288},[240,171250,1668],{"class":264},[240,171252,2129],{"class":257},[19,171254,171255],{},"读取 JSON 文件：",[231,171257,171259],{"className":32324,"code":171258,"language":32326,"meta":236,"style":236},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[23,171260,171261,171267,171271,171301,171313,171317],{"__ignoreMap":236},[240,171262,171263,171265],{"class":242,"line":243},[240,171264,32338],{"class":288},[240,171266,148716],{"class":257},[240,171268,171269],{"class":242,"line":250},[240,171270,4353],{"emptyLinePlaceholder":2051},[240,171272,171273,171275,171277,171279,171281,171283,171285,171287,171289,171291,171293,171295,171297,171299],{"class":242,"line":261},[240,171274,109743],{"class":288},[240,171276,148416],{"class":264},[240,171278,789],{"class":257},[240,171280,153456],{"class":443},[240,171282,1277],{"class":257},[240,171284,148426],{"class":443},[240,171286,1277],{"class":257},[240,171288,148431],{"class":792},[240,171290,440],{"class":288},[240,171292,148436],{"class":443},[240,171294,1230],{"class":257},[240,171296,33329],{"class":288},[240,171298,149778],{"class":792},[240,171300,5691],{"class":257},[240,171302,171303,171305,171307,171309,171311],{"class":242,"line":277},[240,171304,154662],{"class":257},[240,171306,440],{"class":288},[240,171308,149789],{"class":257},[240,171310,47300],{"class":792},[240,171312,2129],{"class":257},[240,171314,171315],{"class":242,"line":294},[240,171316,4353],{"emptyLinePlaceholder":2051},[240,171318,171319,171321],{"class":242,"line":309},[240,171320,32361],{"class":264},[240,171322,166620],{"class":257},[14,171324,171326],{"id":171325},"_811-csv文件","8.11 CSV文件",[19,171328,171329],{},"CSV 是逗号分隔值，常用于表格数据。",[19,171331,171332],{},"写入 CSV：",[231,171334,171336],{"className":32324,"code":171335,"language":32326,"meta":236,"style":236},"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",[23,171337,171338,171345,171349,171357,171375,171391,171407,171411,171415,171455,171469],{"__ignoreMap":236},[240,171339,171340,171342],{"class":242,"line":243},[240,171341,32338],{"class":288},[240,171343,171344],{"class":257}," csv\n",[240,171346,171347],{"class":242,"line":250},[240,171348,4353],{"emptyLinePlaceholder":2051},[240,171350,171351,171353,171355],{"class":242,"line":261},[240,171352,161341],{"class":257},[240,171354,440],{"class":288},[240,171356,57380],{"class":257},[240,171358,171359,171362,171364,171366,171368,171370,171373],{"class":242,"line":277},[240,171360,171361],{"class":257},"    [",[240,171363,75014],{"class":443},[240,171365,1277],{"class":257},[240,171367,75047],{"class":443},[240,171369,1277],{"class":257},[240,171371,171372],{"class":443},"\"成绩\"",[240,171374,89749],{"class":257},[240,171376,171377,171379,171381,171383,171385,171387,171389],{"class":242,"line":294},[240,171378,171361],{"class":257},[240,171380,151513],{"class":443},[240,171382,1277],{"class":257},[240,171384,2748],{"class":264},[240,171386,1277],{"class":257},[240,171388,3082],{"class":264},[240,171390,89749],{"class":257},[240,171392,171393,171395,171397,171399,171401,171403,171405],{"class":242,"line":309},[240,171394,171361],{"class":257},[240,171396,152561],{"class":443},[240,171398,1277],{"class":257},[240,171400,2723],{"class":264},[240,171402,1277],{"class":257},[240,171404,2908],{"class":264},[240,171406,89749],{"class":257},[240,171408,171409],{"class":242,"line":529},[240,171410,35192],{"class":257},[240,171412,171413],{"class":242,"line":549},[240,171414,4353],{"emptyLinePlaceholder":2051},[240,171416,171417,171419,171421,171423,171426,171428,171430,171432,171434,171436,171438,171440,171443,171445,171447,171449,171451,171453],{"class":242,"line":569},[240,171418,109743],{"class":288},[240,171420,148416],{"class":264},[240,171422,789],{"class":257},[240,171424,171425],{"class":443},"\"students.csv\"",[240,171427,1277],{"class":257},[240,171429,153601],{"class":443},[240,171431,1277],{"class":257},[240,171433,148431],{"class":792},[240,171435,440],{"class":288},[240,171437,148436],{"class":443},[240,171439,1277],{"class":257},[240,171441,171442],{"class":792},"newline",[240,171444,440],{"class":288},[240,171446,9603],{"class":443},[240,171448,1230],{"class":257},[240,171450,33329],{"class":288},[240,171452,149778],{"class":792},[240,171454,5691],{"class":257},[240,171456,171457,171460,171462,171465,171467],{"class":242,"line":589},[240,171458,171459],{"class":257},"    writer ",[240,171461,440],{"class":288},[240,171463,171464],{"class":257}," csv.writer(",[240,171466,47300],{"class":792},[240,171468,2129],{"class":257},[240,171470,171471],{"class":242,"line":715},[240,171472,171473],{"class":257},"    writer.writerows(students)\n",[19,171475,171476],{},"读取 CSV：",[231,171478,171480],{"className":32324,"code":171479,"language":32326,"meta":236,"style":236},"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",[23,171481,171482,171488,171492,171522,171536,171548],{"__ignoreMap":236},[240,171483,171484,171486],{"class":242,"line":243},[240,171485,32338],{"class":288},[240,171487,171344],{"class":257},[240,171489,171490],{"class":242,"line":250},[240,171491,4353],{"emptyLinePlaceholder":2051},[240,171493,171494,171496,171498,171500,171502,171504,171506,171508,171510,171512,171514,171516,171518,171520],{"class":242,"line":261},[240,171495,109743],{"class":288},[240,171497,148416],{"class":264},[240,171499,789],{"class":257},[240,171501,171425],{"class":443},[240,171503,1277],{"class":257},[240,171505,148426],{"class":443},[240,171507,1277],{"class":257},[240,171509,148431],{"class":792},[240,171511,440],{"class":288},[240,171513,148436],{"class":443},[240,171515,1230],{"class":257},[240,171517,33329],{"class":288},[240,171519,149778],{"class":792},[240,171521,5691],{"class":257},[240,171523,171524,171527,171529,171532,171534],{"class":242,"line":277},[240,171525,171526],{"class":257},"    reader ",[240,171528,440],{"class":288},[240,171530,171531],{"class":257}," csv.reader(",[240,171533,47300],{"class":792},[240,171535,2129],{"class":257},[240,171537,171538,171540,171543,171545],{"class":242,"line":294},[240,171539,5153],{"class":288},[240,171541,171542],{"class":257}," row ",[240,171544,27989],{"class":288},[240,171546,171547],{"class":257}," reader:\n",[240,171549,171550,171552],{"class":242,"line":309},[240,171551,34397],{"class":264},[240,171553,171554],{"class":257},"(row)\n",[19,171556,171557],{},"使用字典写入：",[231,171559,171561],{"className":32324,"code":171560,"language":32326,"meta":236,"style":236},"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",[23,171562,171563,171569,171573,171581,171609,171637,171641,171645,171683,171704,171725,171730],{"__ignoreMap":236},[240,171564,171565,171567],{"class":242,"line":243},[240,171566,32338],{"class":288},[240,171568,171344],{"class":257},[240,171570,171571],{"class":242,"line":250},[240,171572,4353],{"emptyLinePlaceholder":2051},[240,171574,171575,171577,171579],{"class":242,"line":261},[240,171576,161341],{"class":257},[240,171578,440],{"class":288},[240,171580,57380],{"class":257},[240,171582,171583,171585,171587,171589,171591,171593,171595,171597,171599,171601,171603,171605,171607],{"class":242,"line":277},[240,171584,150010],{"class":257},[240,171586,64602],{"class":443},[240,171588,268],{"class":257},[240,171590,151513],{"class":443},[240,171592,1277],{"class":257},[240,171594,71047],{"class":443},[240,171596,268],{"class":257},[240,171598,2748],{"class":264},[240,171600,1277],{"class":257},[240,171602,153097],{"class":443},[240,171604,268],{"class":257},[240,171606,3082],{"class":264},[240,171608,6882],{"class":257},[240,171610,171611,171613,171615,171617,171619,171621,171623,171625,171627,171629,171631,171633,171635],{"class":242,"line":294},[240,171612,150010],{"class":257},[240,171614,64602],{"class":443},[240,171616,268],{"class":257},[240,171618,152561],{"class":443},[240,171620,1277],{"class":257},[240,171622,71047],{"class":443},[240,171624,268],{"class":257},[240,171626,2723],{"class":264},[240,171628,1277],{"class":257},[240,171630,153097],{"class":443},[240,171632,268],{"class":257},[240,171634,2908],{"class":264},[240,171636,6882],{"class":257},[240,171638,171639],{"class":242,"line":309},[240,171640,35192],{"class":257},[240,171642,171643],{"class":242,"line":529},[240,171644,4353],{"emptyLinePlaceholder":2051},[240,171646,171647,171649,171651,171653,171655,171657,171659,171661,171663,171665,171667,171669,171671,171673,171675,171677,171679,171681],{"class":242,"line":549},[240,171648,109743],{"class":288},[240,171650,148416],{"class":264},[240,171652,789],{"class":257},[240,171654,171425],{"class":443},[240,171656,1277],{"class":257},[240,171658,153601],{"class":443},[240,171660,1277],{"class":257},[240,171662,148431],{"class":792},[240,171664,440],{"class":288},[240,171666,148436],{"class":443},[240,171668,1277],{"class":257},[240,171670,171442],{"class":792},[240,171672,440],{"class":288},[240,171674,9603],{"class":443},[240,171676,1230],{"class":257},[240,171678,33329],{"class":288},[240,171680,149778],{"class":792},[240,171682,5691],{"class":257},[240,171684,171685,171688,171690,171692,171694,171696,171698,171700,171702],{"class":242,"line":569},[240,171686,171687],{"class":257},"    fieldnames ",[240,171689,440],{"class":288},[240,171691,54162],{"class":257},[240,171693,64602],{"class":443},[240,171695,1277],{"class":257},[240,171697,71047],{"class":443},[240,171699,1277],{"class":257},[240,171701,153097],{"class":443},[240,171703,35192],{"class":257},[240,171705,171706,171708,171710,171713,171715,171717,171720,171722],{"class":242,"line":589},[240,171707,171459],{"class":257},[240,171709,440],{"class":288},[240,171711,171712],{"class":257}," csv.DictWriter(",[240,171714,47300],{"class":792},[240,171716,1277],{"class":257},[240,171718,171719],{"class":792},"fieldnames",[240,171721,440],{"class":288},[240,171723,171724],{"class":257},"fieldnames)\n",[240,171726,171727],{"class":242,"line":715},[240,171728,171729],{"class":257},"    writer.writeheader()\n",[240,171731,171732],{"class":242,"line":727},[240,171733,171473],{"class":257},[14,171735,171737],{"id":171736},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[19,171739,125202],{},[1826,171741,171742,171745,171748],{},[1829,171743,171744],{},"读取文本文件。",[1829,171746,171747],{},"统计每个单词出现次数。",[1829,171749,171750],{},"输出出现次数最多的前 10 个单词。",[19,171752,11986],{},[231,171754,171756],{"className":32324,"code":171755,"language":32326,"meta":236,"style":236},"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",[23,171757,171758,171768,171772,171785,171801,171805,171815,171824,171828,171840,171860,171869,171873,171891,171895,171925,171929,171945],{"__ignoreMap":236},[240,171759,171760,171762,171764,171766],{"class":242,"line":243},[240,171761,32683],{"class":288},[240,171763,110221],{"class":257},[240,171765,32338],{"class":288},[240,171767,110226],{"class":257},[240,171769,171770],{"class":242,"line":250},[240,171771,4353],{"emptyLinePlaceholder":2051},[240,171773,171774,171776,171778,171780,171783],{"class":242,"line":261},[240,171775,169936],{"class":257},[240,171777,440],{"class":288},[240,171779,110455],{"class":257},[240,171781,171782],{"class":443},"\"article.txt\"",[240,171784,2129],{"class":257},[240,171786,171787,171789,171791,171793,171795,171797,171799],{"class":242,"line":277},[240,171788,170119],{"class":257},[240,171790,440],{"class":288},[240,171792,170996],{"class":257},[240,171794,148431],{"class":792},[240,171796,440],{"class":288},[240,171798,148436],{"class":443},[240,171800,2129],{"class":257},[240,171802,171803],{"class":242,"line":294},[240,171804,4353],{"emptyLinePlaceholder":2051},[240,171806,171807,171810,171812],{"class":242,"line":309},[240,171808,171809],{"class":257},"words ",[240,171811,440],{"class":288},[240,171813,171814],{"class":257}," content.lower().split()\n",[240,171816,171817,171820,171822],{"class":242,"line":529},[240,171818,171819],{"class":257},"counter ",[240,171821,440],{"class":288},[240,171823,89781],{"class":257},[240,171825,171826],{"class":242,"line":549},[240,171827,4353],{"emptyLinePlaceholder":2051},[240,171829,171830,171832,171835,171837],{"class":242,"line":569},[240,171831,4977],{"class":288},[240,171833,171834],{"class":257}," word ",[240,171836,27989],{"class":288},[240,171838,171839],{"class":257}," words:\n",[240,171841,171842,171845,171847,171850,171853,171855,171858],{"class":242,"line":589},[240,171843,171844],{"class":257},"    word ",[240,171846,440],{"class":288},[240,171848,171849],{"class":257}," word.strip(",[240,171851,171852],{"class":443},"\".,!?;:",[240,171854,158120],{"class":264},[240,171856,171857],{"class":443},"'()[]\"",[240,171859,2129],{"class":257},[240,171861,171862,171864,171866],{"class":242,"line":715},[240,171863,5053],{"class":288},[240,171865,40876],{"class":288},[240,171867,171868],{"class":257}," word:\n",[240,171870,171871],{"class":242,"line":727},[240,171872,150137],{"class":288},[240,171874,171875,171878,171880,171883,171885,171887,171889],{"class":242,"line":1730},[240,171876,171877],{"class":257},"    counter[word] ",[240,171879,440],{"class":288},[240,171881,171882],{"class":257}," counter.get(word, ",[240,171884,1274],{"class":264},[240,171886,1230],{"class":257},[240,171888,2580],{"class":288},[240,171890,57632],{"class":264},[240,171892,171893],{"class":242,"line":3582},[240,171894,4353],{"emptyLinePlaceholder":2051},[240,171896,171897,171900,171902,171904,171907,171909,171911,171913,171915,171917,171919,171921,171923],{"class":242,"line":3596},[240,171898,171899],{"class":257},"items ",[240,171901,440],{"class":288},[240,171903,165229],{"class":264},[240,171905,171906],{"class":257},"(counter.items(), ",[240,171908,155571],{"class":792},[240,171910,155574],{"class":288},[240,171912,155577],{"class":257},[240,171914,1643],{"class":264},[240,171916,114112],{"class":257},[240,171918,165153],{"class":792},[240,171920,440],{"class":288},[240,171922,33422],{"class":264},[240,171924,2129],{"class":257},[240,171926,171927],{"class":242,"line":3601},[240,171928,4353],{"emptyLinePlaceholder":2051},[240,171930,171931,171933,171936,171938,171941,171943],{"class":242,"line":3607},[240,171932,4977],{"class":288},[240,171934,171935],{"class":257}," word, count ",[240,171937,27989],{"class":288},[240,171939,171940],{"class":257}," items[:",[240,171942,2546],{"class":264},[240,171944,167380],{"class":257},[240,171946,171947,171949],{"class":242,"line":3628},[240,171948,33245],{"class":264},[240,171950,171951],{"class":257},"(word, count)\n",[14,171953,171955],{"id":171954},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[231,171957,171959],{"className":32324,"code":171958,"language":32326,"meta":236,"style":236},"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",[23,171960,171961,171967,171977,171981,171993,171997,172001,172009,172019,172025,172029,172059,172069,172073,172077,172085,172115,172139,172143,172147,172155,172184,172189],{"__ignoreMap":236},[240,171962,171963,171965],{"class":242,"line":243},[240,171964,32338],{"class":288},[240,171966,148716],{"class":257},[240,171968,171969,171971,171973,171975],{"class":242,"line":250},[240,171970,32683],{"class":288},[240,171972,110221],{"class":257},[240,171974,32338],{"class":288},[240,171976,110226],{"class":257},[240,171978,171979],{"class":242,"line":261},[240,171980,4353],{"emptyLinePlaceholder":2051},[240,171982,171983,171985,171987,171989,171991],{"class":242,"line":277},[240,171984,153449],{"class":264},[240,171986,15514],{"class":288},[240,171988,110455],{"class":257},[240,171990,153456],{"class":443},[240,171992,2129],{"class":257},[240,171994,171995],{"class":242,"line":294},[240,171996,4353],{"emptyLinePlaceholder":2051},[240,171998,171999],{"class":242,"line":309},[240,172000,4353],{"emptyLinePlaceholder":2051},[240,172002,172003,172005,172007],{"class":242,"line":529},[240,172004,33893],{"class":288},[240,172006,153473],{"class":436},[240,172008,33899],{"class":257},[240,172010,172011,172013,172015,172017],{"class":242,"line":549},[240,172012,5053],{"class":288},[240,172014,40876],{"class":288},[240,172016,153484],{"class":264},[240,172018,153487],{"class":257},[240,172020,172021,172023],{"class":242,"line":569},[240,172022,16701],{"class":288},[240,172024,53776],{"class":257},[240,172026,172027],{"class":242,"line":589},[240,172028,4353],{"emptyLinePlaceholder":2051},[240,172030,172031,172033,172035,172037,172039,172041,172043,172045,172047,172049,172051,172053,172055,172057],{"class":242,"line":715},[240,172032,36124],{"class":288},[240,172034,148416],{"class":264},[240,172036,789],{"class":257},[240,172038,153449],{"class":264},[240,172040,1277],{"class":257},[240,172042,148426],{"class":443},[240,172044,1277],{"class":257},[240,172046,148431],{"class":792},[240,172048,440],{"class":288},[240,172050,148436],{"class":443},[240,172052,1230],{"class":257},[240,172054,33329],{"class":288},[240,172056,149778],{"class":792},[240,172058,5691],{"class":257},[240,172060,172061,172063,172065,172067],{"class":242,"line":727},[240,172062,16701],{"class":288},[240,172064,149789],{"class":257},[240,172066,47300],{"class":792},[240,172068,2129],{"class":257},[240,172070,172071],{"class":242,"line":1730},[240,172072,4353],{"emptyLinePlaceholder":2051},[240,172074,172075],{"class":242,"line":3582},[240,172076,4353],{"emptyLinePlaceholder":2051},[240,172078,172079,172081,172083],{"class":242,"line":3596},[240,172080,33893],{"class":288},[240,172082,153583],{"class":436},[240,172084,153586],{"class":257},[240,172086,172087,172089,172091,172093,172095,172097,172099,172101,172103,172105,172107,172109,172111,172113],{"class":242,"line":3601},[240,172088,36124],{"class":288},[240,172090,148416],{"class":264},[240,172092,789],{"class":257},[240,172094,153449],{"class":264},[240,172096,1277],{"class":257},[240,172098,153601],{"class":443},[240,172100,1277],{"class":257},[240,172102,148431],{"class":792},[240,172104,440],{"class":288},[240,172106,148436],{"class":443},[240,172108,1230],{"class":257},[240,172110,33329],{"class":288},[240,172112,149778],{"class":792},[240,172114,5691],{"class":257},[240,172116,172117,172119,172121,172123,172125,172127,172129,172131,172133,172135,172137],{"class":242,"line":3607},[240,172118,153622],{"class":257},[240,172120,47300],{"class":792},[240,172122,1277],{"class":257},[240,172124,148762],{"class":792},[240,172126,440],{"class":288},[240,172128,35933],{"class":264},[240,172130,1277],{"class":257},[240,172132,153637],{"class":792},[240,172134,440],{"class":288},[240,172136,1668],{"class":264},[240,172138,2129],{"class":257},[240,172140,172141],{"class":242,"line":3628},[240,172142,4353],{"emptyLinePlaceholder":2051},[240,172144,172145],{"class":242,"line":3633},[240,172146,4353],{"emptyLinePlaceholder":2051},[240,172148,172149,172151,172153],{"class":242,"line":3647},[240,172150,161341],{"class":257},[240,172152,440],{"class":288},[240,172154,154667],{"class":257},[240,172156,172157,172160,172162,172164,172166,172168,172170,172172,172174,172176,172178,172180,172182],{"class":242,"line":3652},[240,172158,172159],{"class":257},"students.append({",[240,172161,64602],{"class":443},[240,172163,268],{"class":257},[240,172165,151513],{"class":443},[240,172167,1277],{"class":257},[240,172169,71047],{"class":443},[240,172171,268],{"class":257},[240,172173,2748],{"class":264},[240,172175,1277],{"class":257},[240,172177,153097],{"class":443},[240,172179,268],{"class":257},[240,172181,3082],{"class":264},[240,172183,166777],{"class":257},[240,172185,172186],{"class":242,"line":3681},[240,172187,172188],{"class":257},"save_students(students)\n",[240,172190,172191,172193,172195,172198],{"class":242,"line":3686},[240,172192,32361],{"class":264},[240,172194,789],{"class":257},[240,172196,172197],{"class":443},"\"保存成功\"",[240,172199,2129],{"class":257},[14,172201,172203],{"id":172202},"_814-易错点","8.14 易错点",[1826,172205,172206,172210,172216,172221,172228,172235],{},[1829,172207,172208,170469],{},[23,172209,2892],{},[1829,172211,172212,172213,30331],{},"读写中文要指定 ",[23,172214,172215],{},"encoding=\"utf-8\"",[1829,172217,172218,172219,30331],{},"打开文件后要关闭，推荐使用 ",[23,172220,109743],{},[1829,172222,172223,172224,172227],{},"读取大文件不要直接 ",[23,172225,172226],{},"read()"," 全部内容。",[1829,172229,172230,172231,172234],{},"Windows 写 CSV 时建议加 ",[23,172232,172233],{},"newline=\"\"","，避免空行。",[1829,172236,172237],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[14,172239,172241],{"id":172240},"_815-本章练习","8.15 本章练习",[1826,172243,172244,172251,172256,172259,172262],{},[1829,172245,172246,172247,172250],{},"写入一个 ",[23,172248,172249],{},"students.txt","，每行保存一个学生姓名。",[1829,172252,106265,172253,172255],{},[23,172254,172249],{}," 并输出所有学生。",[1829,172257,172258],{},"把学生列表保存为 JSON 文件。",[1829,172260,172261],{},"从 JSON 文件读取学生数据，计算平均分。",[1829,172263,172264,172265,172268,172269,172272],{},"写一个日志函数 ",[23,172266,172267],{},"write_log(message)","，每次调用向 ",[23,172270,172271],{},"app.log"," 追加一行。",[2019,172274,172275],{},"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":236,"searchDepth":250,"depth":250,"links":172277},[172278,172279,172283,172284,172290,172291,172292,172293,172294,172295,172296,172297,172298,172299,172300],{"id":169789,"depth":250,"text":169790},{"id":169830,"depth":250,"text":169831,"children":172280},[172281,172282],{"id":169834,"depth":261,"text":169835},{"id":169868,"depth":261,"text":169869},{"id":169982,"depth":250,"text":169983},{"id":170075,"depth":250,"text":170076,"children":172285},[172286,172287,172288,172289],{"id":170079,"depth":261,"text":170080},{"id":170166,"depth":261,"text":170167},{"id":170236,"depth":261,"text":170237},{"id":170330,"depth":261,"text":170331},{"id":170400,"depth":250,"text":170401},{"id":170463,"depth":250,"text":170464},{"id":170624,"depth":250,"text":170625},{"id":170687,"depth":250,"text":170688},{"id":170803,"depth":250,"text":170804},{"id":171013,"depth":250,"text":171014},{"id":171325,"depth":250,"text":171326},{"id":171736,"depth":250,"text":171737},{"id":171954,"depth":250,"text":171955},{"id":172202,"depth":250,"text":172203},{"id":172240,"depth":250,"text":172241},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":169781,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":172307,"title":172308,"body":172309,"description":2048,"extension":2049,"meta":174495,"navigation":2051,"path":174496,"seo":174497,"stem":174498,"__hash__":174499},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":172310,"toc":174462},[172311,172314,172318,172321,172324,172416,172418,172437,172442,172446,172449,172452,172481,172488,172491,172495,172498,172527,172529,172581,172587,172640,172644,172742,172745,172812,172816,172873,172875,172881,172885,172890,172896,172987,172992,172996,172999,173077,173080,173118,173122,173240,173243,173247,173250,173295,173298,173302,173307,173313,173363,173366,173397,173401,173405,173435,173439,173474,173478,173513,173553,173557,173573,173576,173580,173584,173663,173667,173708,173712,173767,173771,173805,173809,173839,173848,173855,173861,173918,173921,173929,173932,173936,173943,173946,173952,173955,173972,173977,173981,173987,174000,174003,174040,174043,174054,174057,174071,174074,174088,174092,174099,174132,174135,174137,174143,174146,174150,174152,174158,174163,174336,174340,174403,174407,174431,174435,174459],[10,172312,172308],{"id":172313},"_9-异常模块与包",[14,172315,172317],{"id":172316},"_91-什么是异常","9.1 什么是异常",[19,172319,172320],{},"异常是程序运行过程中出现的错误。",[19,172322,172323],{},"常见异常：",[802,172325,172326,172335],{},[805,172327,172328],{},[808,172329,172330,172333],{},[811,172331,172332],{},"异常",[811,172334,1057],{},[819,172336,172337,172347,172357,172366,172376,172386,172396,172406],{},[808,172338,172339,172344],{},[824,172340,172341],{},[23,172342,172343],{},"NameError",[824,172345,172346],{},"使用了未定义变量",[808,172348,172349,172354],{},[824,172350,172351],{},[23,172352,172353],{},"TypeError",[824,172355,172356],{},"类型不匹配",[808,172358,172359,172363],{},[824,172360,172361],{},[23,172362,156459],{},[824,172364,172365],{},"值不合法",[808,172367,172368,172373],{},[824,172369,172370],{},[23,172371,172372],{},"IndexError",[824,172374,172375],{},"列表索引越界",[808,172377,172378,172383],{},[824,172379,172380],{},[23,172381,172382],{},"KeyError",[824,172384,172385],{},"字典 key 不存在",[808,172387,172388,172393],{},[824,172389,172390],{},[23,172391,172392],{},"FileNotFoundError",[824,172394,172395],{},"文件不存在",[808,172397,172398,172403],{},[824,172399,172400],{},[23,172401,172402],{},"ZeroDivisionError",[824,172404,172405],{},"除数为 0",[808,172407,172408,172413],{},[824,172409,172410],{},[23,172411,172412],{},"ImportError",[824,172414,172415],{},"导入失败",[19,172417,17084],{},[231,172419,172421],{"className":32324,"code":172420,"language":32326,"meta":236,"style":236},"num = int(\"abc\")\n",[23,172422,172423],{"__ignoreMap":236},[240,172424,172425,172427,172429,172431,172433,172435],{"class":242,"line":243},[240,172426,157412],{"class":257},[240,172428,440],{"class":288},[240,172430,4335],{"class":264},[240,172432,789],{"class":257},[240,172434,157505],{"class":443},[240,172436,2129],{"class":257},[19,172438,172439,172440,30331],{},"会触发 ",[23,172441,156459],{},[14,172443,172445],{"id":172444},"_92-为什么要处理异常","9.2 为什么要处理异常",[19,172447,172448],{},"如果不处理异常，程序会直接终止。",[19,172450,172451],{},"例如用户输入年龄：",[231,172453,172455],{"className":32324,"code":172454,"language":32326,"meta":236,"style":236},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[23,172456,172457,172475],{"__ignoreMap":236},[240,172458,172459,172461,172463,172465,172467,172469,172471,172473],{"class":242,"line":243},[240,172460,148171],{"class":257},[240,172462,440],{"class":288},[240,172464,4335],{"class":264},[240,172466,789],{"class":257},[240,172468,55756],{"class":264},[240,172470,789],{"class":257},[240,172472,154019],{"class":443},[240,172474,32443],{"class":257},[240,172476,172477,172479],{"class":242,"line":250},[240,172478,32361],{"class":264},[240,172480,157386],{"class":257},[19,172482,172483,172484,172487],{},"用户输入 ",[23,172485,172486],{},"abc","，程序就会报错退出。",[19,172489,172490],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[14,172492,172494],{"id":172493},"_93-try-except","9.3 try except",[19,172496,172497],{},"基础语法：",[231,172499,172501],{"className":32324,"code":172500,"language":32326,"meta":236,"style":236},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[23,172502,172503,172510,172515,172522],{"__ignoreMap":236},[240,172504,172505,172508],{"class":242,"line":243},[240,172506,172507],{"class":288},"try",[240,172509,5691],{"class":257},[240,172511,172512],{"class":242,"line":250},[240,172513,172514],{"class":257},"    可能出错的代码\n",[240,172516,172517,172520],{"class":242,"line":261},[240,172518,172519],{"class":288},"except",[240,172521,5691],{"class":257},[240,172523,172524],{"class":242,"line":277},[240,172525,172526],{"class":257},"    出错后的处理代码\n",[19,172528,17084],{},[231,172530,172532],{"className":32324,"code":172531,"language":32326,"meta":236,"style":236},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[23,172533,172534,172540,172558,172564,172570],{"__ignoreMap":236},[240,172535,172536,172538],{"class":242,"line":243},[240,172537,172507],{"class":288},[240,172539,5691],{"class":257},[240,172541,172542,172544,172546,172548,172550,172552,172554,172556],{"class":242,"line":250},[240,172543,154011],{"class":257},[240,172545,440],{"class":288},[240,172547,4335],{"class":264},[240,172549,789],{"class":257},[240,172551,55756],{"class":264},[240,172553,789],{"class":257},[240,172555,154019],{"class":443},[240,172557,32443],{"class":257},[240,172559,172560,172562],{"class":242,"line":261},[240,172561,33245],{"class":264},[240,172563,157386],{"class":257},[240,172565,172566,172568],{"class":242,"line":277},[240,172567,172519],{"class":288},[240,172569,5691],{"class":257},[240,172571,172572,172574,172576,172579],{"class":242,"line":294},[240,172573,33245],{"class":264},[240,172575,789],{"class":257},[240,172577,172578],{"class":443},"\"年龄必须是数字\"",[240,172580,2129],{"class":257},[19,172582,172583,172584,172586],{},"不建议裸写 ",[23,172585,172519],{},"，最好指定异常类型。",[231,172588,172590],{"className":32324,"code":172589,"language":32326,"meta":236,"style":236},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[23,172591,172592,172598,172616,172622,172630],{"__ignoreMap":236},[240,172593,172594,172596],{"class":242,"line":243},[240,172595,172507],{"class":288},[240,172597,5691],{"class":257},[240,172599,172600,172602,172604,172606,172608,172610,172612,172614],{"class":242,"line":250},[240,172601,154011],{"class":257},[240,172603,440],{"class":288},[240,172605,4335],{"class":264},[240,172607,789],{"class":257},[240,172609,55756],{"class":264},[240,172611,789],{"class":257},[240,172613,154019],{"class":443},[240,172615,32443],{"class":257},[240,172617,172618,172620],{"class":242,"line":261},[240,172619,33245],{"class":264},[240,172621,157386],{"class":257},[240,172623,172624,172626,172628],{"class":242,"line":277},[240,172625,172519],{"class":288},[240,172627,153851],{"class":264},[240,172629,5691],{"class":257},[240,172631,172632,172634,172636,172638],{"class":242,"line":294},[240,172633,33245],{"class":264},[240,172635,789],{"class":257},[240,172637,172578],{"class":443},[240,172639,2129],{"class":257},[14,172641,172643],{"id":172642},"_94-捕获多个异常","9.4 捕获多个异常",[231,172645,172647],{"className":32324,"code":172646,"language":32326,"meta":236,"style":236},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[23,172648,172649,172655,172676,172696,172703,172711,172722,172731],{"__ignoreMap":236},[240,172650,172651,172653],{"class":242,"line":243},[240,172652,172507],{"class":288},[240,172654,5691],{"class":257},[240,172656,172657,172660,172662,172664,172666,172668,172670,172672,172674],{"class":242,"line":250},[240,172658,172659],{"class":257},"    nums ",[240,172661,440],{"class":288},[240,172663,54162],{"class":257},[240,172665,1643],{"class":264},[240,172667,1277],{"class":257},[240,172669,1668],{"class":264},[240,172671,1277],{"class":257},[240,172673,1692],{"class":264},[240,172675,35192],{"class":257},[240,172677,172678,172681,172683,172685,172687,172689,172691,172694],{"class":242,"line":261},[240,172679,172680],{"class":257},"    index ",[240,172682,440],{"class":288},[240,172684,4335],{"class":264},[240,172686,789],{"class":257},[240,172688,55756],{"class":264},[240,172690,789],{"class":257},[240,172692,172693],{"class":443},"\"请输入索引:\"",[240,172695,32443],{"class":257},[240,172697,172698,172700],{"class":242,"line":277},[240,172699,33245],{"class":264},[240,172701,172702],{"class":257},"(nums[index])\n",[240,172704,172705,172707,172709],{"class":242,"line":294},[240,172706,172519],{"class":288},[240,172708,153851],{"class":264},[240,172710,5691],{"class":257},[240,172712,172713,172715,172717,172720],{"class":242,"line":309},[240,172714,33245],{"class":264},[240,172716,789],{"class":257},[240,172718,172719],{"class":443},"\"索引必须是整数\"",[240,172721,2129],{"class":257},[240,172723,172724,172726,172729],{"class":242,"line":529},[240,172725,172519],{"class":288},[240,172727,172728],{"class":264}," IndexError",[240,172730,5691],{"class":257},[240,172732,172733,172735,172737,172740],{"class":242,"line":549},[240,172734,33245],{"class":264},[240,172736,789],{"class":257},[240,172738,172739],{"class":443},"\"索引越界\"",[240,172741,2129],{"class":257},[19,172743,172744],{},"多个异常使用相同处理逻辑：",[231,172746,172748],{"className":32324,"code":172747,"language":32326,"meta":236,"style":236},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[23,172749,172750,172756,172774,172787,172801],{"__ignoreMap":236},[240,172751,172752,172754],{"class":242,"line":243},[240,172753,172507],{"class":288},[240,172755,5691],{"class":257},[240,172757,172758,172760,172762,172764,172766,172768,172770,172772],{"class":242,"line":250},[240,172759,47539],{"class":257},[240,172761,440],{"class":288},[240,172763,4335],{"class":264},[240,172765,789],{"class":257},[240,172767,55756],{"class":264},[240,172769,789],{"class":257},[240,172771,157421],{"class":443},[240,172773,32443],{"class":257},[240,172775,172776,172778,172780,172782,172784],{"class":242,"line":261},[240,172777,33245],{"class":264},[240,172779,789],{"class":257},[240,172781,2546],{"class":264},[240,172783,157671],{"class":288},[240,172785,172786],{"class":257}," num)\n",[240,172788,172789,172791,172793,172795,172797,172799],{"class":242,"line":277},[240,172790,172519],{"class":288},[240,172792,3612],{"class":257},[240,172794,156459],{"class":264},[240,172796,1277],{"class":257},[240,172798,172402],{"class":264},[240,172800,32732],{"class":257},[240,172802,172803,172805,172807,172810],{"class":242,"line":294},[240,172804,33245],{"class":264},[240,172806,789],{"class":257},[240,172808,172809],{"class":443},"\"输入不合法\"",[240,172811,2129],{"class":257},[14,172813,172815],{"id":172814},"_95-获取异常信息","9.5 获取异常信息",[231,172817,172819],{"className":32324,"code":172818,"language":32326,"meta":236,"style":236},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[23,172820,172821,172827,172841,172852],{"__ignoreMap":236},[240,172822,172823,172825],{"class":242,"line":243},[240,172824,172507],{"class":288},[240,172826,5691],{"class":257},[240,172828,172829,172831,172833,172835,172837,172839],{"class":242,"line":250},[240,172830,47539],{"class":257},[240,172832,440],{"class":288},[240,172834,4335],{"class":264},[240,172836,789],{"class":257},[240,172838,157505],{"class":443},[240,172840,2129],{"class":257},[240,172842,172843,172845,172847,172849],{"class":242,"line":261},[240,172844,172519],{"class":288},[240,172846,153851],{"class":264},[240,172848,66527],{"class":288},[240,172850,172851],{"class":257}," e:\n",[240,172853,172854,172856,172858,172860,172863,172865,172867,172869,172871],{"class":242,"line":277},[240,172855,33245],{"class":264},[240,172857,789],{"class":257},[240,172859,2172],{"class":288},[240,172861,172862],{"class":443},"\"出错了:",[240,172864,2991],{"class":264},[240,172866,2192],{"class":257},[240,172868,3040],{"class":264},[240,172870,2355],{"class":443},[240,172872,2129],{"class":257},[19,172874,148082],{},[231,172876,172879],{"className":172877,"code":172878,"language":7139,"meta":236},[7137],"出错了:invalid literal for int() with base 10: 'abc'\n",[23,172880,172878],{"__ignoreMap":236},[14,172882,172884],{"id":172883},"_96-else和finally","9.6 else和finally",[19,172886,172887,172889],{},[23,172888,3655],{},"：没有异常时执行。",[19,172891,172892,172895],{},[23,172893,172894],{},"finally","：无论是否异常都会执行。",[231,172897,172899],{"className":32324,"code":172898,"language":32326,"meta":236,"style":236},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[23,172900,172901,172907,172925,172933,172943,172949,172970,172976],{"__ignoreMap":236},[240,172902,172903,172905],{"class":242,"line":243},[240,172904,172507],{"class":288},[240,172906,5691],{"class":257},[240,172908,172909,172911,172913,172915,172917,172919,172921,172923],{"class":242,"line":250},[240,172910,47539],{"class":257},[240,172912,440],{"class":288},[240,172914,4335],{"class":264},[240,172916,789],{"class":257},[240,172918,55756],{"class":264},[240,172920,789],{"class":257},[240,172922,157421],{"class":443},[240,172924,32443],{"class":257},[240,172926,172927,172929,172931],{"class":242,"line":261},[240,172928,172519],{"class":288},[240,172930,153851],{"class":264},[240,172932,5691],{"class":257},[240,172934,172935,172937,172939,172941],{"class":242,"line":277},[240,172936,33245],{"class":264},[240,172938,789],{"class":257},[240,172940,154839],{"class":443},[240,172942,2129],{"class":257},[240,172944,172945,172947],{"class":242,"line":294},[240,172946,3655],{"class":288},[240,172948,5691],{"class":257},[240,172950,172951,172953,172955,172957,172960,172962,172964,172966,172968],{"class":242,"line":309},[240,172952,33245],{"class":264},[240,172954,789],{"class":257},[240,172956,2172],{"class":288},[240,172958,172959],{"class":443},"\"输入正确:",[240,172961,2991],{"class":264},[240,172963,3619],{"class":257},[240,172965,3040],{"class":264},[240,172967,2355],{"class":443},[240,172969,2129],{"class":257},[240,172971,172972,172974],{"class":242,"line":529},[240,172973,172894],{"class":288},[240,172975,5691],{"class":257},[240,172977,172978,172980,172982,172985],{"class":242,"line":549},[240,172979,33245],{"class":264},[240,172981,789],{"class":257},[240,172983,172984],{"class":443},"\"程序结束\"",[240,172986,2129],{"class":257},[19,172988,172989,172991],{},[23,172990,172894],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[14,172993,172995],{"id":172994},"_97-抛出异常","9.7 抛出异常",[19,172997,172998],{},"程序可以主动抛出异常。",[231,173000,173002],{"className":32324,"code":173001,"language":32326,"meta":236,"style":236},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[23,173003,173004,173013,173025,173038,173058,173062,173066],{"__ignoreMap":236},[240,173005,173006,173008,173011],{"class":242,"line":243},[240,173007,33893],{"class":288},[240,173009,173010],{"class":436}," set_age",[240,173012,163040],{"class":257},[240,173014,173015,173017,173019,173021,173023],{"class":242,"line":250},[240,173016,5053],{"class":288},[240,173018,17655],{"class":257},[240,173020,431],{"class":288},[240,173022,6045],{"class":264},[240,173024,5691],{"class":257},[240,173026,173027,173029,173031,173033,173036],{"class":242,"line":261},[240,173028,105342],{"class":288},[240,173030,153851],{"class":264},[240,173032,789],{"class":257},[240,173034,173035],{"class":443},"\"年龄不能为负数\"",[240,173037,2129],{"class":257},[240,173039,173040,173042,173044,173046,173048,173050,173052,173054,173056],{"class":242,"line":277},[240,173041,33245],{"class":264},[240,173043,789],{"class":257},[240,173045,2172],{"class":288},[240,173047,163608],{"class":443},[240,173049,2991],{"class":264},[240,173051,72144],{"class":257},[240,173053,3040],{"class":264},[240,173055,2355],{"class":443},[240,173057,2129],{"class":257},[240,173059,173060],{"class":242,"line":294},[240,173061,4353],{"emptyLinePlaceholder":2051},[240,173063,173064],{"class":242,"line":309},[240,173065,4353],{"emptyLinePlaceholder":2051},[240,173067,173068,173071,173073,173075],{"class":242,"line":529},[240,173069,173070],{"class":257},"set_age(",[240,173072,2631],{"class":288},[240,173074,1643],{"class":264},[240,173076,2129],{"class":257},[19,173078,173079],{},"调用者可以捕获：",[231,173081,173083],{"className":32324,"code":173082,"language":32326,"meta":236,"style":236},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[23,173084,173085,173091,173102,173112],{"__ignoreMap":236},[240,173086,173087,173089],{"class":242,"line":243},[240,173088,172507],{"class":288},[240,173090,5691],{"class":257},[240,173092,173093,173096,173098,173100],{"class":242,"line":250},[240,173094,173095],{"class":257},"    set_age(",[240,173097,2631],{"class":288},[240,173099,1643],{"class":264},[240,173101,2129],{"class":257},[240,173103,173104,173106,173108,173110],{"class":242,"line":261},[240,173105,172519],{"class":288},[240,173107,153851],{"class":264},[240,173109,66527],{"class":288},[240,173111,172851],{"class":257},[240,173113,173114,173116],{"class":242,"line":277},[240,173115,33245],{"class":264},[240,173117,68922],{"class":257},[14,173119,173121],{"id":173120},"_98-自定义异常","9.8 自定义异常",[231,173123,173125],{"className":32324,"code":173124,"language":32326,"meta":236,"style":236},"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",[23,173126,173127,173141,173145,173149,173153,173161,173171,173182,173192,173196,173200,173206,173223,173234],{"__ignoreMap":236},[240,173128,173129,173131,173134,173136,173139],{"class":242,"line":243},[240,173130,16643],{"class":288},[240,173132,173133],{"class":436}," BalanceNotEnoughError",[240,173135,789],{"class":257},[240,173137,173138],{"class":264},"Exception",[240,173140,32732],{"class":257},[240,173142,173143],{"class":242,"line":250},[240,173144,151162],{"class":288},[240,173146,173147],{"class":242,"line":261},[240,173148,4353],{"emptyLinePlaceholder":2051},[240,173150,173151],{"class":242,"line":277},[240,173152,4353],{"emptyLinePlaceholder":2051},[240,173154,173155,173157,173159],{"class":242,"line":294},[240,173156,33893],{"class":288},[240,173158,151811],{"class":436},[240,173160,164437],{"class":257},[240,173162,173163,173165,173167,173169],{"class":242,"line":309},[240,173164,5053],{"class":288},[240,173166,151767],{"class":257},[240,173168,3053],{"class":288},[240,173170,164214],{"class":257},[240,173172,173173,173175,173178,173180],{"class":242,"line":529},[240,173174,105342],{"class":288},[240,173176,173177],{"class":257}," BalanceNotEnoughError(",[240,173179,151862],{"class":443},[240,173181,2129],{"class":257},[240,173183,173184,173186,173188,173190],{"class":242,"line":549},[240,173185,6042],{"class":288},[240,173187,164444],{"class":257},[240,173189,2631],{"class":288},[240,173191,151800],{"class":257},[240,173193,173194],{"class":242,"line":569},[240,173195,4353],{"emptyLinePlaceholder":2051},[240,173197,173198],{"class":242,"line":589},[240,173199,4353],{"emptyLinePlaceholder":2051},[240,173201,173202,173204],{"class":242,"line":715},[240,173203,172507],{"class":288},[240,173205,5691],{"class":257},[240,173207,173208,173210,173212,173215,173217,173219,173221],{"class":242,"line":727},[240,173209,164115],{"class":257},[240,173211,440],{"class":288},[240,173213,173214],{"class":257}," withdraw(",[240,173216,285],{"class":264},[240,173218,1277],{"class":257},[240,173220,3676],{"class":264},[240,173222,2129],{"class":257},[240,173224,173225,173227,173230,173232],{"class":242,"line":1730},[240,173226,172519],{"class":288},[240,173228,173229],{"class":257}," BalanceNotEnoughError ",[240,173231,33329],{"class":288},[240,173233,172851],{"class":257},[240,173235,173236,173238],{"class":242,"line":3582},[240,173237,33245],{"class":264},[240,173239,68922],{"class":257},[19,173241,173242],{},"入门阶段大多数情况使用内置异常即可。",[14,173244,173246],{"id":173245},"_99-traceback","9.9 traceback",[19,173248,173249],{},"调试时可以输出完整异常堆栈。",[231,173251,173253],{"className":32324,"code":173252,"language":32326,"meta":236,"style":236},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[23,173254,173255,173262,173266,173272,173282,173290],{"__ignoreMap":236},[240,173256,173257,173259],{"class":242,"line":243},[240,173258,32338],{"class":288},[240,173260,173261],{"class":257}," traceback\n",[240,173263,173264],{"class":242,"line":250},[240,173265,4353],{"emptyLinePlaceholder":2051},[240,173267,173268,173270],{"class":242,"line":261},[240,173269,172507],{"class":288},[240,173271,5691],{"class":257},[240,173273,173274,173276,173278,173280],{"class":242,"line":277},[240,173275,3938],{"class":264},[240,173277,789],{"class":257},[240,173279,157505],{"class":443},[240,173281,2129],{"class":257},[240,173283,173284,173286,173288],{"class":242,"line":294},[240,173285,172519],{"class":288},[240,173287,153851],{"class":264},[240,173289,5691],{"class":257},[240,173291,173292],{"class":242,"line":309},[240,173293,173294],{"class":257},"    traceback.print_exc()\n",[19,173296,173297],{},"日志系统中常把异常堆栈记录到文件。",[14,173299,173301],{"id":173300},"_910-什么是模块","9.10 什么是模块",[19,173303,173304,173305,127893],{},"模块就是一个 ",[23,173306,147977],{},[19,173308,173309,173310,26565],{},"例如创建 ",[23,173311,173312],{},"my_math.py",[231,173314,173316],{"className":32324,"code":173315,"language":32326,"meta":236,"style":236},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[23,173317,173318,173326,173336,173340,173344,173353],{"__ignoreMap":236},[240,173319,173320,173322,173324],{"class":242,"line":243},[240,173321,33893],{"class":288},[240,173323,7161],{"class":436},[240,173325,152718],{"class":257},[240,173327,173328,173330,173332,173334],{"class":242,"line":250},[240,173329,6042],{"class":288},[240,173331,12820],{"class":257},[240,173333,2580],{"class":288},[240,173335,152729],{"class":257},[240,173337,173338],{"class":242,"line":261},[240,173339,4353],{"emptyLinePlaceholder":2051},[240,173341,173342],{"class":242,"line":277},[240,173343,4353],{"emptyLinePlaceholder":2051},[240,173345,173346,173348,173351],{"class":242,"line":294},[240,173347,33893],{"class":288},[240,173349,173350],{"class":436}," sub",[240,173352,152718],{"class":257},[240,173354,173355,173357,173359,173361],{"class":242,"line":309},[240,173356,6042],{"class":288},[240,173358,12820],{"class":257},[240,173360,2631],{"class":288},[240,173362,152729],{"class":257},[19,173364,173365],{},"在另一个文件中导入：",[231,173367,173369],{"className":32324,"code":173368,"language":32326,"meta":236,"style":236},"import my_math\n\nprint(my_math.add(1, 2))\n",[23,173370,173371,173378,173382],{"__ignoreMap":236},[240,173372,173373,173375],{"class":242,"line":243},[240,173374,32338],{"class":288},[240,173376,173377],{"class":257}," my_math\n",[240,173379,173380],{"class":242,"line":250},[240,173381,4353],{"emptyLinePlaceholder":2051},[240,173383,173384,173386,173389,173391,173393,173395],{"class":242,"line":261},[240,173385,32361],{"class":264},[240,173387,173388],{"class":257},"(my_math.add(",[240,173390,1643],{"class":264},[240,173392,1277],{"class":257},[240,173394,1668],{"class":264},[240,173396,32443],{"class":257},[14,173398,173400],{"id":173399},"_911-import导入","9.11 import导入",[32,173402,173404],{"id":173403},"_9111-导入模块","9.11.1 导入模块",[231,173406,173408],{"className":32324,"code":173407,"language":32326,"meta":236,"style":236},"import random\n\nprint(random.randint(1, 10))\n",[23,173409,173410,173416,173420],{"__ignoreMap":236},[240,173411,173412,173414],{"class":242,"line":243},[240,173413,32338],{"class":288},[240,173415,47274],{"class":257},[240,173417,173418],{"class":242,"line":250},[240,173419,4353],{"emptyLinePlaceholder":2051},[240,173421,173422,173424,173427,173429,173431,173433],{"class":242,"line":261},[240,173423,32361],{"class":264},[240,173425,173426],{"class":257},"(random.randint(",[240,173428,1643],{"class":264},[240,173430,1277],{"class":257},[240,173432,2546],{"class":264},[240,173434,32443],{"class":257},[32,173436,173438],{"id":173437},"_9112-导入指定内容","9.11.2 导入指定内容",[231,173440,173442],{"className":32324,"code":173441,"language":32326,"meta":236,"style":236},"from random import randint\n\nprint(randint(1, 10))\n",[23,173443,173444,173455,173459],{"__ignoreMap":236},[240,173445,173446,173448,173450,173452],{"class":242,"line":243},[240,173447,32683],{"class":288},[240,173449,59727],{"class":257},[240,173451,32338],{"class":288},[240,173453,173454],{"class":257}," randint\n",[240,173456,173457],{"class":242,"line":250},[240,173458,4353],{"emptyLinePlaceholder":2051},[240,173460,173461,173463,173466,173468,173470,173472],{"class":242,"line":261},[240,173462,32361],{"class":264},[240,173464,173465],{"class":257},"(randint(",[240,173467,1643],{"class":264},[240,173469,1277],{"class":257},[240,173471,2546],{"class":264},[240,173473,32443],{"class":257},[32,173475,173477],{"id":173476},"_9113-起别名","9.11.3 起别名",[231,173479,173481],{"className":32324,"code":173480,"language":32326,"meta":236,"style":236},"import random as rd\n\nprint(rd.randint(1, 10))\n",[23,173482,173483,173494,173498],{"__ignoreMap":236},[240,173484,173485,173487,173489,173491],{"class":242,"line":243},[240,173486,32338],{"class":288},[240,173488,59727],{"class":257},[240,173490,33329],{"class":288},[240,173492,173493],{"class":257}," rd\n",[240,173495,173496],{"class":242,"line":250},[240,173497,4353],{"emptyLinePlaceholder":2051},[240,173499,173500,173502,173505,173507,173509,173511],{"class":242,"line":261},[240,173501,32361],{"class":264},[240,173503,173504],{"class":257},"(rd.randint(",[240,173506,1643],{"class":264},[240,173508,1277],{"class":257},[240,173510,2546],{"class":264},[240,173512,32443],{"class":257},[231,173514,173516],{"className":32324,"code":173515,"language":32326,"meta":236,"style":236},"from random import randint as rint\n\nprint(rint(1, 10))\n",[23,173517,173518,173534,173538],{"__ignoreMap":236},[240,173519,173520,173522,173524,173526,173529,173531],{"class":242,"line":243},[240,173521,32683],{"class":288},[240,173523,59727],{"class":257},[240,173525,32338],{"class":288},[240,173527,173528],{"class":257}," randint ",[240,173530,33329],{"class":288},[240,173532,173533],{"class":257}," rint\n",[240,173535,173536],{"class":242,"line":250},[240,173537,4353],{"emptyLinePlaceholder":2051},[240,173539,173540,173542,173545,173547,173549,173551],{"class":242,"line":261},[240,173541,32361],{"class":264},[240,173543,173544],{"class":257},"(rint(",[240,173546,1643],{"class":264},[240,173548,1277],{"class":257},[240,173550,2546],{"class":264},[240,173552,32443],{"class":257},[32,173554,173556],{"id":173555},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[231,173558,173560],{"className":32324,"code":173559,"language":32326,"meta":236,"style":236},"from random import *\n",[23,173561,173562],{"__ignoreMap":236},[240,173563,173564,173566,173568,173570],{"class":242,"line":243},[240,173565,32683],{"class":288},[240,173567,59727],{"class":257},[240,173569,32338],{"class":288},[240,173571,173572],{"class":288}," *\n",[19,173574,173575],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[14,173577,173579],{"id":173578},"_912-常用内置模块","9.12 常用内置模块",[32,173581,173583],{"id":173582},"_9121-random","9.12.1 random",[231,173585,173587],{"className":32324,"code":173586,"language":32326,"meta":236,"style":236},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[23,173588,173589,173595,173599,173613,173632],{"__ignoreMap":236},[240,173590,173591,173593],{"class":242,"line":243},[240,173592,32338],{"class":288},[240,173594,47274],{"class":257},[240,173596,173597],{"class":242,"line":250},[240,173598,4353],{"emptyLinePlaceholder":2051},[240,173600,173601,173603,173605,173607,173609,173611],{"class":242,"line":261},[240,173602,32361],{"class":264},[240,173604,173426],{"class":257},[240,173606,1643],{"class":264},[240,173608,1277],{"class":257},[240,173610,2546],{"class":264},[240,173612,32443],{"class":257},[240,173614,173615,173617,173620,173622,173624,173626,173628,173630],{"class":242,"line":277},[240,173616,32361],{"class":264},[240,173618,173619],{"class":257},"(random.choice([",[240,173621,151513],{"class":443},[240,173623,1277],{"class":257},[240,173625,152561],{"class":443},[240,173627,1277],{"class":257},[240,173629,161356],{"class":443},[240,173631,35089],{"class":257},[240,173633,173634,173636,173639,173641,173643,173645,173647,173649,173651,173653,173655,173657,173659,173661],{"class":242,"line":294},[240,173635,32361],{"class":264},[240,173637,173638],{"class":257},"(random.sample([",[240,173640,1643],{"class":264},[240,173642,1277],{"class":257},[240,173644,1668],{"class":264},[240,173646,1277],{"class":257},[240,173648,1692],{"class":264},[240,173650,1277],{"class":257},[240,173652,1716],{"class":264},[240,173654,1277],{"class":257},[240,173656,1741],{"class":264},[240,173658,114112],{"class":257},[240,173660,1668],{"class":264},[240,173662,32443],{"class":257},[32,173664,173666],{"id":173665},"_9122-time","9.12.2 time",[231,173668,173670],{"className":32324,"code":173669,"language":32326,"meta":236,"style":236},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[23,173671,173672,173678,173682,173689,173697],{"__ignoreMap":236},[240,173673,173674,173676],{"class":242,"line":243},[240,173675,32338],{"class":288},[240,173677,33775],{"class":257},[240,173679,173680],{"class":242,"line":250},[240,173681,4353],{"emptyLinePlaceholder":2051},[240,173683,173684,173686],{"class":242,"line":261},[240,173685,32361],{"class":264},[240,173687,173688],{"class":257},"(time.time())\n",[240,173690,173691,173693,173695],{"class":242,"line":277},[240,173692,96984],{"class":257},[240,173694,1643],{"class":264},[240,173696,2129],{"class":257},[240,173698,173699,173701,173703,173706],{"class":242,"line":294},[240,173700,32361],{"class":264},[240,173702,789],{"class":257},[240,173704,173705],{"class":443},"\"1秒后执行\"",[240,173707,2129],{"class":257},[32,173709,173711],{"id":173710},"_9123-datetime","9.12.3 datetime",[231,173713,173715],{"className":32324,"code":173714,"language":32326,"meta":236,"style":236},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[23,173716,173717,173729,173733,173743,173750],{"__ignoreMap":236},[240,173718,173719,173721,173724,173726],{"class":242,"line":243},[240,173720,32683],{"class":288},[240,173722,173723],{"class":257}," datetime ",[240,173725,32338],{"class":288},[240,173727,173728],{"class":257}," datetime\n",[240,173730,173731],{"class":242,"line":250},[240,173732,4353],{"emptyLinePlaceholder":2051},[240,173734,173735,173738,173740],{"class":242,"line":261},[240,173736,173737],{"class":257},"now ",[240,173739,440],{"class":288},[240,173741,173742],{"class":257}," datetime.now()\n",[240,173744,173745,173747],{"class":242,"line":277},[240,173746,32361],{"class":264},[240,173748,173749],{"class":257},"(now)\n",[240,173751,173752,173754,173757,173760,173762,173765],{"class":242,"line":294},[240,173753,32361],{"class":264},[240,173755,173756],{"class":257},"(now.strftime(",[240,173758,173759],{"class":443},"\"%Y-%m-",[240,173761,158316],{"class":264},[240,173763,173764],{"class":443}," %H:%M:%S\"",[240,173766,32443],{"class":257},[32,173768,173770],{"id":173769},"_9124-os","9.12.4 os",[231,173772,173774],{"className":32324,"code":173773,"language":32326,"meta":236,"style":236},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[23,173775,173776,173782,173786,173793],{"__ignoreMap":236},[240,173777,173778,173780],{"class":242,"line":243},[240,173779,32338],{"class":288},[240,173781,47251],{"class":257},[240,173783,173784],{"class":242,"line":250},[240,173785,4353],{"emptyLinePlaceholder":2051},[240,173787,173788,173790],{"class":242,"line":261},[240,173789,32361],{"class":264},[240,173791,173792],{"class":257},"(os.getcwd())\n",[240,173794,173795,173797,173800,173803],{"class":242,"line":277},[240,173796,32361],{"class":264},[240,173798,173799],{"class":257},"(os.listdir(",[240,173801,173802],{"class":443},"\".\"",[240,173804,32443],{"class":257},[32,173806,173808],{"id":173807},"_9125-sys","9.12.5 sys",[231,173810,173812],{"className":32324,"code":173811,"language":32326,"meta":236,"style":236},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[23,173813,173814,173821,173825,173832],{"__ignoreMap":236},[240,173815,173816,173818],{"class":242,"line":243},[240,173817,32338],{"class":288},[240,173819,173820],{"class":257}," sys\n",[240,173822,173823],{"class":242,"line":250},[240,173824,4353],{"emptyLinePlaceholder":2051},[240,173826,173827,173829],{"class":242,"line":261},[240,173828,32361],{"class":264},[240,173830,173831],{"class":257},"(sys.version)\n",[240,173833,173834,173836],{"class":242,"line":277},[240,173835,32361],{"class":264},[240,173837,173838],{"class":257},"(sys.path)\n",[14,173840,173842,173843,173845,173846,2355],{"id":173841},"_913-if-name-main","9.13 if ",[68,173844,81724],{}," == \"",[68,173847,103969],{},[19,173849,173850,173851,173854],{},"模块被直接运行和被导入时，",[23,173852,173853],{},"__name__"," 的值不同。",[19,173856,173857,173858,26565],{},"创建 ",[23,173859,173860],{},"my_module.py",[231,173862,173864],{"className":32324,"code":173863,"language":32326,"meta":236,"style":236},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[23,173865,173866,173874,173884,173888,173892,173904],{"__ignoreMap":236},[240,173867,173868,173870,173872],{"class":242,"line":243},[240,173869,33893],{"class":288},[240,173871,7161],{"class":436},[240,173873,152718],{"class":257},[240,173875,173876,173878,173880,173882],{"class":242,"line":250},[240,173877,6042],{"class":288},[240,173879,12820],{"class":257},[240,173881,2580],{"class":288},[240,173883,152729],{"class":257},[240,173885,173886],{"class":242,"line":261},[240,173887,4353],{"emptyLinePlaceholder":2051},[240,173889,173890],{"class":242,"line":277},[240,173891,4353],{"emptyLinePlaceholder":2051},[240,173893,173894,173896,173898,173900,173902],{"class":242,"line":294},[240,173895,3489],{"class":288},[240,173897,33166],{"class":264},[240,173899,103470],{"class":288},[240,173901,103473],{"class":443},[240,173903,5691],{"class":257},[240,173905,173906,173908,173910,173912,173914,173916],{"class":242,"line":309},[240,173907,33245],{"class":264},[240,173909,168225],{"class":257},[240,173911,1643],{"class":264},[240,173913,1277],{"class":257},[240,173915,1668],{"class":264},[240,173917,32443],{"class":257},[19,173919,173920],{},"作用：",[1826,173922,173923,173926],{},[1829,173924,173925],{},"直接运行该文件时，执行测试代码。",[1829,173927,173928],{},"被其他文件导入时，不执行测试代码。",[19,173930,173931],{},"这是写模块时很常用的习惯。",[14,173933,173935],{"id":173934},"_914-包","9.14 包",[19,173937,173938,173939,173942],{},"包是包含 ",[23,173940,173941],{},"__init__.py"," 的目录，用于组织多个模块。",[19,173944,173945],{},"目录结构：",[231,173947,173950],{"className":173948,"code":173949,"language":7139,"meta":236},[7137],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[23,173951,173949],{"__ignoreMap":236},[19,173953,173954],{},"导入：",[231,173956,173958],{"className":32324,"code":173957,"language":32326,"meta":236,"style":236},"from utils.file_utils import read_file\n",[23,173959,173960],{"__ignoreMap":236},[240,173961,173962,173964,173967,173969],{"class":242,"line":243},[240,173963,32683],{"class":288},[240,173965,173966],{"class":257}," utils.file_utils ",[240,173968,32338],{"class":288},[240,173970,173971],{"class":257}," read_file\n",[19,173973,173974,173976],{},[23,173975,173941],{}," 可以为空，也可以写包初始化逻辑。",[14,173978,173980],{"id":173979},"_915-第三方包","9.15 第三方包",[19,173982,173983,173984,173986],{},"第三方包通过 ",[23,173985,25777],{}," 安装。",[231,173988,173990],{"className":25768,"code":173989,"language":25770,"meta":236,"style":236},"pip install requests\n",[23,173991,173992],{"__ignoreMap":236},[240,173993,173994,173996,173998],{"class":242,"line":243},[240,173995,25777],{"class":436},[240,173997,25780],{"class":443},[240,173999,147723],{"class":443},[19,174001,174002],{},"使用：",[231,174004,174006],{"className":32324,"code":174005,"language":32326,"meta":236,"style":236},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[23,174007,174008,174014,174018,174033],{"__ignoreMap":236},[240,174009,174010,174012],{"class":242,"line":243},[240,174011,32338],{"class":288},[240,174013,147723],{"class":257},[240,174015,174016],{"class":242,"line":250},[240,174017,4353],{"emptyLinePlaceholder":2051},[240,174019,174020,174023,174025,174028,174031],{"class":242,"line":261},[240,174021,174022],{"class":257},"response ",[240,174024,440],{"class":288},[240,174026,174027],{"class":257}," requests.get(",[240,174029,174030],{"class":443},"\"https:\u002F\u002Fwww.example.com\"",[240,174032,2129],{"class":257},[240,174034,174035,174037],{"class":242,"line":277},[240,174036,32361],{"class":264},[240,174038,174039],{"class":257},"(response.status_code)\n",[19,174041,174042],{},"查看已安装包：",[231,174044,174046],{"className":25768,"code":174045,"language":25770,"meta":236,"style":236},"pip list\n",[23,174047,174048],{"__ignoreMap":236},[240,174049,174050,174052],{"class":242,"line":243},[240,174051,25777],{"class":436},[240,174053,120865],{"class":443},[19,174055,174056],{},"导出项目依赖：",[231,174058,174059],{"className":25768,"code":147918,"language":25770,"meta":236,"style":236},[23,174060,174061],{"__ignoreMap":236},[240,174062,174063,174065,174067,174069],{"class":242,"line":243},[240,174064,25777],{"class":436},[240,174066,147927],{"class":443},[240,174068,28168],{"class":288},[240,174070,147932],{"class":443},[19,174072,174073],{},"安装项目依赖：",[231,174075,174076],{"className":25768,"code":147938,"language":25770,"meta":236,"style":236},[23,174077,174078],{"__ignoreMap":236},[240,174079,174080,174082,174084,174086],{"class":242,"line":243},[240,174081,25777],{"class":436},[240,174083,25780],{"class":443},[240,174085,121549],{"class":264},[240,174087,147932],{"class":443},[14,174089,174091],{"id":174090},"_916-模块搜索路径","9.16 模块搜索路径",[19,174093,174094,174095,174098],{},"Python 导入模块时会在 ",[23,174096,174097],{},"sys.path"," 中查找。",[231,174100,174102],{"className":32324,"code":174101,"language":32326,"meta":236,"style":236},"import sys\n\nfor path in sys.path:\n    print(path)\n",[23,174103,174104,174110,174114,174126],{"__ignoreMap":236},[240,174105,174106,174108],{"class":242,"line":243},[240,174107,32338],{"class":288},[240,174109,173820],{"class":257},[240,174111,174112],{"class":242,"line":250},[240,174113,4353],{"emptyLinePlaceholder":2051},[240,174115,174116,174118,174121,174123],{"class":242,"line":261},[240,174117,4977],{"class":288},[240,174119,174120],{"class":257}," path ",[240,174122,27989],{"class":288},[240,174124,174125],{"class":257}," sys.path:\n",[240,174127,174128,174130],{"class":242,"line":277},[240,174129,33245],{"class":264},[240,174131,170854],{"class":257},[19,174133,174134],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[19,174136,159248],{},[231,174138,174141],{"className":174139,"code":174140,"language":7139,"meta":236},[7137],"random.py\njson.py\ntime.py\n",[23,174142,174140],{"__ignoreMap":236},[19,174144,174145],{},"这些文件名可能导致导入异常。",[14,174147,174149],{"id":174148},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[19,174151,173945],{},[231,174153,174156],{"className":174154,"code":174155,"language":7139,"meta":236},[7137],"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",[23,174157,174155],{"__ignoreMap":236},[19,174159,174160,26565],{},[23,174161,174162],{},"utils\u002Ffile_utils.py",[231,174164,174166],{"className":32324,"code":174165,"language":32326,"meta":236,"style":236},"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",[23,174167,174168,174174,174184,174188,174192,174202,174212,174220,174226,174230,174257,174267,174271,174275,174285,174311],{"__ignoreMap":236},[240,174169,174170,174172],{"class":242,"line":243},[240,174171,32338],{"class":288},[240,174173,148716],{"class":257},[240,174175,174176,174178,174180,174182],{"class":242,"line":250},[240,174177,32683],{"class":288},[240,174179,110221],{"class":257},[240,174181,32338],{"class":288},[240,174183,110226],{"class":257},[240,174185,174186],{"class":242,"line":261},[240,174187,4353],{"emptyLinePlaceholder":2051},[240,174189,174190],{"class":242,"line":277},[240,174191,4353],{"emptyLinePlaceholder":2051},[240,174193,174194,174196,174199],{"class":242,"line":294},[240,174195,33893],{"class":288},[240,174197,174198],{"class":436}," read_json",[240,174200,174201],{"class":257},"(path):\n",[240,174203,174204,174207,174209],{"class":242,"line":309},[240,174205,174206],{"class":257},"    path ",[240,174208,440],{"class":288},[240,174210,174211],{"class":257}," Path(path)\n",[240,174213,174214,174216,174218],{"class":242,"line":529},[240,174215,5053],{"class":288},[240,174217,40876],{"class":288},[240,174219,170935],{"class":257},[240,174221,174222,174224],{"class":242,"line":549},[240,174223,16701],{"class":288},[240,174225,53776],{"class":257},[240,174227,174228],{"class":242,"line":569},[240,174229,4353],{"emptyLinePlaceholder":2051},[240,174231,174232,174234,174236,174239,174241,174243,174245,174247,174249,174251,174253,174255],{"class":242,"line":589},[240,174233,36124],{"class":288},[240,174235,148416],{"class":264},[240,174237,174238],{"class":257},"(path, ",[240,174240,148426],{"class":443},[240,174242,1277],{"class":257},[240,174244,148431],{"class":792},[240,174246,440],{"class":288},[240,174248,148436],{"class":443},[240,174250,1230],{"class":257},[240,174252,33329],{"class":288},[240,174254,149778],{"class":792},[240,174256,5691],{"class":257},[240,174258,174259,174261,174263,174265],{"class":242,"line":715},[240,174260,16701],{"class":288},[240,174262,149789],{"class":257},[240,174264,47300],{"class":792},[240,174266,2129],{"class":257},[240,174268,174269],{"class":242,"line":727},[240,174270,4353],{"emptyLinePlaceholder":2051},[240,174272,174273],{"class":242,"line":1730},[240,174274,4353],{"emptyLinePlaceholder":2051},[240,174276,174277,174279,174282],{"class":242,"line":3582},[240,174278,33893],{"class":288},[240,174280,174281],{"class":436}," write_json",[240,174283,174284],{"class":257},"(path, data):\n",[240,174286,174287,174289,174291,174293,174295,174297,174299,174301,174303,174305,174307,174309],{"class":242,"line":3596},[240,174288,36124],{"class":288},[240,174290,148416],{"class":264},[240,174292,174238],{"class":257},[240,174294,153601],{"class":443},[240,174296,1277],{"class":257},[240,174298,148431],{"class":792},[240,174300,440],{"class":288},[240,174302,148436],{"class":443},[240,174304,1230],{"class":257},[240,174306,33329],{"class":288},[240,174308,149778],{"class":792},[240,174310,5691],{"class":257},[240,174312,174313,174316,174318,174320,174322,174324,174326,174328,174330,174332,174334],{"class":242,"line":3601},[240,174314,174315],{"class":257},"        json.dump(data, ",[240,174317,47300],{"class":792},[240,174319,1277],{"class":257},[240,174321,148762],{"class":792},[240,174323,440],{"class":288},[240,174325,35933],{"class":264},[240,174327,1277],{"class":257},[240,174329,153637],{"class":792},[240,174331,440],{"class":288},[240,174333,1668],{"class":264},[240,174335,2129],{"class":257},[19,174337,174338,26565],{},[23,174339,156232],{},[231,174341,174343],{"className":32324,"code":174342,"language":32326,"meta":236,"style":236},"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",[23,174344,174345,174356,174360,174373,174393],{"__ignoreMap":236},[240,174346,174347,174349,174351,174353],{"class":242,"line":243},[240,174348,32683],{"class":288},[240,174350,173966],{"class":257},[240,174352,32338],{"class":288},[240,174354,174355],{"class":257}," read_json, write_json\n",[240,174357,174358],{"class":242,"line":250},[240,174359,4353],{"emptyLinePlaceholder":2051},[240,174361,174362,174364,174366,174369,174371],{"class":242,"line":261},[240,174363,161341],{"class":257},[240,174365,440],{"class":288},[240,174367,174368],{"class":257}," read_json(",[240,174370,153456],{"class":443},[240,174372,2129],{"class":257},[240,174374,174375,174377,174379,174381,174383,174385,174387,174389,174391],{"class":242,"line":277},[240,174376,172159],{"class":257},[240,174378,64602],{"class":443},[240,174380,268],{"class":257},[240,174382,151513],{"class":443},[240,174384,1277],{"class":257},[240,174386,153097],{"class":443},[240,174388,268],{"class":257},[240,174390,3082],{"class":264},[240,174392,166777],{"class":257},[240,174394,174395,174398,174400],{"class":242,"line":294},[240,174396,174397],{"class":257},"write_json(",[240,174399,153456],{"class":443},[240,174401,174402],{"class":257},", students)\n",[14,174404,174406],{"id":174405},"_918-易错点","9.18 易错点",[1826,174408,174409,174412,174417,174422,174425,174428],{},[1829,174410,174411],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[1829,174413,174414,174415,30331],{},"能指定异常类型就不要裸写 ",[23,174416,172519],{},[1829,174418,174419,174421],{},[23,174420,172894],{}," 无论是否出错都会执行。",[1829,174423,174424],{},"模块文件名不要和标准库重名。",[1829,174426,174427],{},"导入自己写的模块时，要注意运行目录。",[1829,174429,174430],{},"第三方包要安装到当前解释器或虚拟环境中。",[14,174432,174434],{"id":174433},"_919-本章练习","9.19 本章练习",[1826,174436,174437,174440,174443,174449,174456],{},[1829,174438,174439],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[1829,174441,174442],{},"写函数读取文件，如果文件不存在则返回空字符串。",[1829,174444,173857,174445,174448],{},[23,174446,174447],{},"math_utils.py","，实现加减乘除函数并导入使用。",[1829,174450,174451,174452,174455],{},"创建一个 ",[23,174453,174454],{},"utils"," 包，把 JSON 读写函数放进去。",[1829,174457,174458],{},"写一个程序，捕获除零异常和输入格式异常。",[2019,174460,174461],{},"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":236,"searchDepth":250,"depth":250,"links":174463},[174464,174465,174466,174467,174468,174469,174470,174471,174472,174473,174474,174480,174487,174489,174490,174491,174492,174493,174494],{"id":172316,"depth":250,"text":172317},{"id":172444,"depth":250,"text":172445},{"id":172493,"depth":250,"text":172494},{"id":172642,"depth":250,"text":172643},{"id":172814,"depth":250,"text":172815},{"id":172883,"depth":250,"text":172884},{"id":172994,"depth":250,"text":172995},{"id":173120,"depth":250,"text":173121},{"id":173245,"depth":250,"text":173246},{"id":173300,"depth":250,"text":173301},{"id":173399,"depth":250,"text":173400,"children":174475},[174476,174477,174478,174479],{"id":173403,"depth":261,"text":173404},{"id":173437,"depth":261,"text":173438},{"id":173476,"depth":261,"text":173477},{"id":173555,"depth":261,"text":173556},{"id":173578,"depth":250,"text":173579,"children":174481},[174482,174483,174484,174485,174486],{"id":173582,"depth":261,"text":173583},{"id":173665,"depth":261,"text":173666},{"id":173710,"depth":261,"text":173711},{"id":173769,"depth":261,"text":173770},{"id":173807,"depth":261,"text":173808},{"id":173841,"depth":250,"text":174488},"9.13 if name == \"main\"",{"id":173934,"depth":250,"text":173935},{"id":173979,"depth":250,"text":173980},{"id":174090,"depth":250,"text":174091},{"id":174148,"depth":250,"text":174149},{"id":174405,"depth":250,"text":174406},{"id":174433,"depth":250,"text":174434},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":172308,"description":2048},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":174501,"title":174502,"body":174503,"description":174666,"extension":2049,"meta":174667,"navigation":2051,"path":174668,"seo":174669,"stem":174670,"__hash__":174671},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":174504,"toc":174661},[174505,174508,174511,174514,174525,174527,174601,174604,174607,174610,174613,174616,174619,174622,174625,174628,174631],[10,174506,174502],{"id":174507},"python教程",[19,174509,174510],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[19,174512,174513],{},"建议学习环境：",[1826,174515,174516,174519,174522],{},[1829,174517,174518],{},"Python 版本：Python 3.10 及以上。",[1829,174520,174521],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[1829,174523,174524],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[14,174526,118988],{"id":118988},[1826,174528,174529,174535,174541,174547,174553,174559,174565,174571,174577,174583,174589,174595],{},[1829,174530,174531],{},[254,174532,174534],{"href":174533},".\u002Fch1-Python","Python环境与第一个程序",[1829,174536,174537],{},[254,174538,174540],{"href":174539},".\u002Fch2","基础语法、变量与字符串",[1829,174542,174543],{},[254,174544,174546],{"href":174545},".\u002Fch3","判断语句",[1829,174548,174549],{},[254,174550,174552],{"href":174551},".\u002Fch4","循环语句",[1829,174554,174555],{},[254,174556,174558],{"href":174557},".\u002Fch5","函数基础",[1829,174560,174561],{},[254,174562,174564],{"href":174563},".\u002Fch6","数据容器",[1829,174566,174567],{},[254,174568,174570],{"href":174569},".\u002Fch7","函数进阶",[1829,174572,174573],{},[254,174574,174576],{"href":174575},".\u002Fch8","文件操作",[1829,174578,174579],{},[254,174580,174582],{"href":174581},".\u002Fch9","异常、模块与包",[1829,174584,174585],{},[254,174586,174588],{"href":174587},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[1829,174590,174591],{},[254,174592,174594],{"href":174593},".\u002Fch11","面向对象基础",[1829,174596,174597],{},[254,174598,174600],{"href":174599},".\u002Fch12","综合案例与复习路线",[14,174602,174603],{"id":174603},"学习路线",[19,174605,174606],{},"第一阶段：能运行程序。",[19,174608,174609],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[19,174611,174612],{},"第二阶段：能组织数据。",[19,174614,174615],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[19,174617,174618],{},"第三阶段：能封装逻辑。",[19,174620,174621],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[19,174623,174624],{},"第四阶段：能做小项目。",[19,174626,174627],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[14,174629,174630],{"id":174630},"参考资料",[1826,174632,174633,174640,174647,174654],{},[1829,174634,174635,174636],{},"黑马程序员 Python 入门教程推荐：",[254,174637,174638],{"href":174638,"rel":174639},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[25811],[1829,174641,174642,174643],{},"Python 官方中文教程：",[254,174644,174645],{"href":174645,"rel":174646},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[25811],[1829,174648,174649,174650],{},"Python 标准库文档：",[254,174651,174652],{"href":174652,"rel":174653},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[25811],[1829,174655,174656,174657],{},"pyecharts 文档：",[254,174658,174659],{"href":174659,"rel":174660},"https:\u002F\u002Fpyecharts.org\u002F",[25811],{"title":236,"searchDepth":250,"depth":250,"links":174662},[174663,174664,174665],{"id":118988,"depth":250,"text":118988},{"id":174603,"depth":250,"text":174603},{"id":174630,"depth":250,"text":174630},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":25325},"\u002Fwiki\u002F2024-10-10-python",{"title":174502,"description":174666},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331426832]